生成指定位数强Lucas校验伪素数-Arnault1995构造法

Arnault在1995年的论文《Constructing Carmichael Numbers which are Strong Pseudoprimes to Several Bases》提出了一种用于构造强Lucas校验伪素数的方法,本文将对其方法做具体的实现分析。


文章目录

  • 1.Lucas素数测试
    • 1.1 Lucas序列
    • 1.2 Lucas定理
    • 1.3 Lucas素数测试
    • 1.4 Lucas伪素数
    • 1.5 Lucas定理2
    • 1.6 强Lucas素数测试
    • 1.7 强Lucas伪素数
  • 2.Arnault1995提出的强伪素数构造方法
    • 2.1 大致思路
    • 2.2 生成指定位数的强Lucas伪素数(code this)


1.Lucas素数测试

参考:Albrecht, Martin R., et al. “Prime and prejudice: primality testing under adversarial conditions.” Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. 2018.

1.1 Lucas序列

P P P Q Q Q是整数,且 D = P 2 − 4 Q D=P^{2}-4Q D=P24Q,则卢卡斯序列 U k U_{k} Uk V k V_{k} Vk如下( k ≥ 0 k \ge 0 k0):

U k + 2 = P U k + 1 − Q U k , U 0 = 0 , U 1 = 1 V k + 2 = P V k + 1 − Q V k , V 0 = 2 , V 1 = P U_{k+2}=PU_{k+1}-QU_{k},\ U_{0}=0,U_{1}=1\\ V_{k+2}=PV_{k+1}-QV_{k},\ V_{0}=2,V_{1}=P\\ Uk+2=PUk+1QUk, U0=0,U1=1Vk+2=PVk+1QVk, V0=2,V1=P

实际上也可以这么理解,设 α \alpha α β \beta β分别是方程 x 2 − P x + Q x^{2}-Px+Q x2Px+Q的两个根,则有:
U ( P , Q ) = { ( U k ( P , Q ) ) } k ≥ 0 = { α k − β k α − β } k ≥ 0 V ( P , Q ) = { ( V k ( P , Q ) ) } k ≥ 0 = { α k + β k } k ≥ 0 U(P,Q)=\{(U_{k}(P,Q)) \}_{k\ge 0}=\{ \frac{\alpha^{k}-\beta^{k}}{\alpha-\beta}\}_{k\ge 0}\\ V(P,Q)=\{(V_{k}(P,Q)) \}_{k\ge 0}=\{ \alpha^{k}+\beta^{k}\}_{k\ge 0}\\ U(P,Q)={(Uk(P,Q))}k0={αβαkβk}k0V(P,Q)={(Vk(P,Q))}k0={αk+βk}k0

1.2 Lucas定理

p p p是素数,且 g c d ( p , 2 Q D ) = 1 gcd(p,2QD)=1 gcd(p,2QD)=1,则有:
U p − ( x p ) ≡ 0 ( m o d p ) U_{p-(\frac{x}{p})} \equiv 0\ (mod \ p) Up(px)0 (mod p)

其中 ( x p ) (\frac{x}{p}) (px)表示勒让德符号。

1.3 Lucas素数测试

针对不同的 P P P Q Q Q,重复测试Lucas定理的逆否。

1.4 Lucas伪素数

如果 n n n是一个合数,满足 g c d ( n , 2 Q D ) = 1 gcd(n,2QD)=1 gcd(n,2QD)=1,如果 U n − ( x n ) ≡ 0 ( m o d n ) U_{n-(\frac{x}{n})} \equiv 0\ (mod \ n) Un(nx)0 (mod n),则 n n n是在参数 ( P , Q ) (P,Q) (P,Q)下的伪素数。

1.5 Lucas定理2

p p p是一个素数,且 p ∤ 2 Q D p\nmid2QD p2QD,设 p − ( D p ) = 2 k q p-(\frac{D}{p})=2^{k}q p(pD)=2kq q q q为奇数,则以下至少有一个条件满足:

p ∣ U q or  ∃ i such that  0 ≤ i < k and  p ∣ V 2 i q .  p \mid U_q \quad \text { or } \quad \exists i \text { such that } 0 \leq i<k \text { and } p \mid V_{2^i q} \text {. } pUq or i such that 0i<k and pV2iq

1.6 强Lucas素数测试

针对不同的 P P P Q Q Q,重复测试Lucas定理2的逆否。

1.7 强Lucas伪素数

如果 n n n是一个合数,且 g c d ( n , 2 Q D ) = 1 gcd(n,2QD)=1 gcd(n,2QD)=1,设 n − ( D n ) = 2 k q n-(\frac{D}{n})=2^{k}q n(nD)=2kq q q q为奇数,且以下至少有一个条件满足:

n ∣ U q or  ∃ i such that  0 ≤ i < k and  n ∣ V 2 i q .  n \mid U_q \quad \text { or } \quad \exists i \text { such that } 0 \leq i<k \text { and } n \mid V_{2^i q} \text {. } nUq or i such that 0i<k and nV2iq

2.Arnault1995提出的强伪素数构造方法

参考:Fran ̧cois Arnault. Constructing Carmichael numbers which are strong pseudoprimes to several bases. Journal of Symbolic Computation, 20(2):151–161, 1995.
以下简称Arnault1995。

2.1 大致思路

在做Baillie-PSW测试的时候,一般采用Selfridge’s Method A方法选择参数。
Selfridge’s Method A:
D D D 5 , − 7 , 9 , − 11 , 13 , . . . 5,-7,9,-11,13,... 5,7,9,11,13,...的第一个元素,且满足 ( D n ) = − 1 (\frac{D}{n})=-1 (nD)=1,设 P = 1 P=1 P=1 Q = 1 − D 4 Q=\frac{1-D}{4} Q=41D

构造思路:

假设我们要构造的合数 n n n满足 ( 5 n ) = − 1 (\frac{5}{n})=-1 (n5)=1,依据Selfridge’s Method A确定的参数应该为 ( P , Q , D ) = ( 1 , − 1 , 5 ) (P,Q,D)=(1,-1,5) (P,Q,D)=(1,1,5)

1.设合数 n = p 1 p 2 p 3 n=p_{1}p_{2}p_{3} n=p1p2p3,其中 p i p_{i} pi均为素数,且 p i = k i ( p 1 + 1 ) − 1 p_{i}=k_{i}(p_{1}+1)-1 pi=ki(p1+1)1 i ∈ [ 2 , 3 ] i\in[2,3] i[2,3] k 2 k_{2} k2 k 3 k_{3} k3均为奇数。

2. p i p_{i} pi必须满足以下条件(Arnault1995 Lemmas 6.1 and 6.2):

( D p i ) = ( Q p i ) = − 1 , i ∈ [ 1 , 3 ] (\frac{D}{p_{i}})=(\frac{Q}{p_{i}})=-1 \ , i\in[1,3] (piD)=(piQ)=1 ,i[1,3]
在参数 ( P , Q , D ) = ( 1 , − 1 , 5 ) (P,Q,D)=(1,-1,5) (P,Q,D)=(1,1,5)的情况下:
( − 1 p i ) = ( 5 p i ) = − 1 , i ∈ [ 1 , 3 ] (\frac{-1}{p_{i}})=(\frac{5}{p_{i}})=-1 \ , i\in[1,3] (pi1)=(pi5)=1 ,i[1,3]

可以发现 ( − 1 p i ) = − 1 ⇔ p i ≡ 3 ( m o d 4 ) (\frac{-1}{p_{i}})=-1 \Leftrightarrow p_{i}\equiv3\ (mod \ 4) (pi1)=1pi3 (mod 4) ( 5 p i ) = − 1 ⇔ p i ≡ 2 or  3 ( m o d 5 ) (\frac{5}{p_{i}})=-1 \Leftrightarrow p_{i}\equiv2 \ \text{or} \ 3\ (mod \ 5) (pi5)=1pi2 or 3 (mod 5),又对 i ∈ [ 2 , 3 ] i\in[2,3] i[2,3]来说, p i = k i ( p 1 + 1 ) − 1 p_{i}=k_{i}(p_{1}+1)-1 pi=ki(p1+1)1。由中国剩余定理可以解得:

{ p 1 ≡ 3 or  7 ( m o d 20 ) p i ≡ 2 or  3 ( m o d 5 ) , i ∈ [ 2 , 3 ] \left\{ \begin{aligned} p_{1} &\equiv3 \ \text{or} \ 7\ (mod \ 20)\\ p_{i} &\equiv2 \ \text{or} \ 3\ (mod \ 5)\ , i \in [2,3]\\ \end{aligned} \right.\\ {p1pi3 or 7 (mod 20)2 or 3 (mod 5) ,i[2,3]

3.添加条件确保 k 2 k_{2} k2 k 3 k_{3} k3确实是整数。
{ p 1 ≡ k 3 − 1 ( m o d k 2 ) p 1 ≡ k 2 − 1 ( m o d k 3 ) \left\{ \begin{aligned} p_{1} & \equiv k_{3}^{-1} \ (mod \ k_{2}) \\ p_{1} & \equiv k_{2}^{-1} \ (mod \ k_{3}) \\ \end{aligned} \right.\\ {p1p1k31 (mod k2)k21 (mod k3)

满足上述三个条件的 n n n即为一个强Lucas伪素数。


2.2 生成指定位数的强Lucas伪素数(code this)

假设要生成 t t t位的强Lucas伪素数 n n n,可以联立三个关于 p 1 p_{1} p1的同余方程:
{ p 1 ≡ k 3 − 1 ( m o d k 2 ) p 1 ≡ k 2 − 1 ( m o d k 3 ) p 1 ≡ 7 ( m o d 20 ) \left\{ \begin{aligned} p_{1} & \equiv k_{3}^{-1} \ (mod \ k_{2}) \\ p_{1} & \equiv k_{2}^{-1} \ (mod \ k_{3}) \\ p_{1} & \equiv 7 \ (mod \ 20) \\ \end{aligned} \right. p1p1p1k31 (mod k2)k21 (mod k3)7 (mod 20)

通过中国剩余定理,能解出通解 p 1 p_{1} p1和特解 x x x:

M = 20 ∗ k 2 k 3 x = C R T ( [ k 3 − 1 ( m o d k 2 ) , k 2 − 1 ( m o d k 3 ) , 7 ] , [ k 2 , k 3 , 20 ] ) p 1 = k M + x , k ∈ Z M=20*k_{2}k_{3}\\ x=CRT([k_{3}^{-1} \ (mod \ k_{2}), k_{2}^{-1} \ (mod \ k_{3}), 7],[k_{2},k_{3},20])\\ p_{1}=kM+x \ ,k\in \mathbb{Z} M=20k2k3x=CRT([k31 (mod k2),k21 (mod k3),7],[k2,k3,20])p1=kM+x ,kZ

我们通过调整通解中的系数 k k k即可得到指定位数的 p 1 p_{1} p1,我们可以通过 t t t来计算 p 1 p_{1} p1的大致系数 k p 1 k_{p1} kp1

p 2 = k 2 ( p 1 + 1 ) − 1 = k 2 p 1 + k 2 − 1 p 3 = k 3 ( p 1 + 1 ) − 1 = k 3 p 1 + k 3 − 1 n = p 1 p 2 p 3 = k 2 k 3 p 1 3 + D D = p 1 ( 2 k 2 k 3 p 1 + k 2 k 3 + 1 − ( p 1 + 1 ) ( k 2 + k 3 ) ) ) ≈ 2 k 2 k 3 p 2 ≪ k 2 k 3 p 1 3 k p 1 ≥ ( 2 t − 1 k 2 k 3 ) − 3 ( m o d M ) − 1 p_{2}=k_{2}(p_{1}+1)-1=k_{2}p_{1}+k_{2}-1\\ p_{3}=k_{3}(p_{1}+1)-1=k_{3}p_{1}+k_{3}-1\\ n=p_{1}p_{2}p_{3}=k_{2}k_{3}p_{1}^{3}+D\\ D=p_{1}(2k_{2}k_{3}p_{1}+k_{2}k_{3}+1-(p_{1}+1)(k_{2}+k_{3}))) \approx 2k_{2}k_{3}p^{2}\ll k_{2}k_{3}p_{1}^{3}\\ \\ k_{p1} \ge (\frac {2^{t-1}}{k_{2}k_{3}})^{-3} \ (mod \ M) - 1 p2=k2(p1+1)1=k2p1+k21p3=k3(p1+1)1=k3p1+k31n=p1p2p3=k2k3p13+DD=p1(2k2k3p1+k2k3+1(p1+1)(k2+k3)))2k2k3p2k2k3p13kp1(k2k32t1)3 (mod M)1

在计算出 p 1 p_{1} p1后,通过 p i = k i ( p 1 + 1 ) − 1 p_{i}=k_{i}(p_{1}+1)-1 pi=ki(p1+1)1 i ∈ [ 2 , 3 ] i\in[2,3] i[2,3]计算 p 2 p_{2} p2 p 3 p_{3} p3,同时需要保证满足 p i ≡ 2 or  3 ( m o d 5 ) , i ∈ [ 2 , 3 ] p_{i} \equiv2 \ \text{or} \ 3\ (mod \ 5)\ , i \in [2,3] pi2 or 3 (mod 5) ,i[2,3]

代码如下(sage):

from random import randintdef generate_lucas_pseudoprimes(t):assert t >= 64, "Smaller numbers you can debug yourself!"while True:k2 = randint(1, 200) * 2 + 1k3 = randint(1, 200) * 2 + k2if k2 % 5 == 0 or k3 % 5 == 0:continueif gcd(k2, k3) != 1:continueM = k2 * k3 * 20x = crt([7, pow(k3, -1, k2), pow(k2, -1, k3)], [20, k2, k3])k = int((2 ** (t - 1) // (k2 * k3)) ** (1 / 3)) // M - 1p1 = M * k + xp2 = k2 * (p1 + 1) - 1p3 = k3 * (p1 + 1) - 1if p2 % 5 not in [2, 3] or p3 % 5 not in [2, 3]:continue# Enumerating kwhile True:k += 1p1 = M * k + xif not is_prime(p1):continuep2 = k2 * (p1 + 1) - 1p3 = k3 * (p1 + 1) - 1n = p1 * p2 * p3if n.nbits() < t:continueif n.nbits() > t:breakif not is_prime(p2) or not is_prime(p3):continuebreakif n.nbits() == t:breakreturn n, p1, p2, p3
n, _, _, _ = generate_lucas_pseudoprimes(512)
print(n)
from Crypto.Math.Primality import lucas_test
print(lucas_test(int(n)))

ATFWUS 2023-11-21

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/155554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Cloud Netflix微服务组件-Hystrix

目录 Hystrix的主要功能 传统容错手段 超时机制 应用容错三板斧 超时机制 舱壁隔离 熔断降级 侵入式Command用法 改进版一&#xff1a;ribbon与hystrix组合 改进版二&#xff1a;feign与hystrix组合 Hystrix三态转换图 源码分析 流程图 原理流程图 核心实现流程…

MySQL 的执行原理(一)

5.1 单表访问之索引合并 我们前边说过 MySQL 在一般情况下执行一个查询时最多只会用到单个二级 索引&#xff0c;但存在有特殊情况&#xff0c;在这些特殊情况下也可能在一个查询中使用到多个二 级索引&#xff0c;MySQL 中这种使用到多个索引来完成一次查询的执行方法称之为&…

基于Android个人理财家庭收支系统uniAPP+vue -hbuiderx-微信小程序vj9n8

摘 要 个人理财APP设计的目的是为用户提供对活动信息和提醒信息管理等方面的平台。 与PC端应用程序相比&#xff0c;个人理财的设计旨在为用户提供一个个人理财信息的管理。用户可以通过APP及时收入信息和支出信息&#xff0c;并对提醒消息进行查看等。 个人理财APP是在Androi…

代码随想录算法训练营第23期day53|1143.最长公共子序列、1035.不相交的线、53. 最大子序和

目录 一、1143.最长公共子序列 二、1035.不相交的线 三、53. 最大子序和 一、1143.最长公共子序列 力扣题目链接 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() 1, vector<int…

Vue 优雅的减少请求次数

文章目录 前言Java代码Vue代码改造前改造后前言 当开发一个应用程序或者网站时,我们经常需要从后端获取一些数据来展示给用户。在某些情况下,我们可能需要获取多个属性的值,而不是单独获取每个属性的值。这时,我们可以使用一次请求获取多个属性的值,以减少网络请求的次数…

吴恩达《机器学习》9-4-9-6:实现注意:展开参数、梯度检验、随机初始化

一、实现注意:展开参数 在上一个视频中&#xff0c;讨论了使用反向传播算法计算代价函数的导数。在本视频中&#xff0c;将简要介绍一个实现细节&#xff0c;即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验 在神经网络中…

Java vo dto 使用场景

在Java中&#xff0c;VO&#xff08;Value Object&#xff09;和DTO&#xff08;Data Transfer Object&#xff09;是常用的设计模式&#xff0c;用于数据传递和封装。它们分别适用于不同的场景&#xff1a; VO&#xff08;Value Object&#xff09;&#xff1a;用于表示具有一…

【2021集创赛】IEEE杯一等奖:一种28GHz高能效Outphasing PA设计

本作品参与极术社区组织的有奖征集|秀出你的集创赛作品风采,免费电子产品等你拿~活动。 团队介绍 参赛单位&#xff1a;电子科技大学 队伍名称&#xff1a;PA调得队 指导老师&#xff1a;王政 参赛队员&#xff1a;倪梦虎、杨茂旋、张振翼 总决赛奖项&#xff1a;一等奖 1.项…

Git仓库如何重置成新仓库或者仅留最终版本

Git仓库如何重置成新仓库或者仅留最终版本 1. 重置成新仓库1.1 使用orphan参数checkout全新分支1.2 重命名latest_branch为master分支 2.仅保留最终版本2.1 使用orphan参数checkout全新分支2.2 重命名latest_branch为master分支 1. 重置成新仓库 1.1 使用orphan参数checkout全…

Golang基础-面向对象篇

文章目录 struct结构体类的表示与封装类的继承多态的基本要素与实现interface空接口反射变量的内置pairreflect包解析Struct TagStruct Tag在json中的应用 struct结构体 在Go语言中&#xff0c;可以使用type 关键字来创建自定义类型&#xff0c;这对于提高代码的可读性和可维护…

掌握这个技巧,你也能成为酒店管理高手!

随着科技的迅猛发展&#xff0c;监控技术在各个领域得到了广泛应用。然而&#xff0c;传统的监控系统在面对水浸等突发事件时&#xff0c;往往无法提供有效的预警和保护。 水浸监控系统通过实时监测水位变化&#xff0c;及时发出警报&#xff0c;以帮助用户采取紧急措施&#x…

EANet:用于医学图像分割的迭代边缘注意力网络

EANet: Iterative edge attention network for medical image segmentation EANet&#xff1a;用于医学图像分割的迭代边缘注意力网络背景贡献实验方法Dynamic scale-aware context module&#xff08;动态规模感知上下文模块&#xff09;Edge attention preservation module&a…

3D格式转换工具

这里记录下自己之前做3D模型格式转换&#xff0c;包括做CAD模型格式转换辅助的一些开源仓库和工具 &#xff08;一&#xff09;转换成gltf工具 gltf作为3D界的jpg标准&#xff0c;如今已经有很多引擎对其进行了支持&#xff0c;这里单独把它列出来 1. obj转glft工具 git仓库…

深入解析Windows操作系统——概念和工具

文章目录 Windows操作系统的版本Windows NT和Windows 95基础概念和术语内核调试用户模式调试 Windows操作系统的版本 Windows NT和Windows 95 Windows NT和Windows 95之间的一些结构性差异&#xff0c;以及Windows NT优于Windows 95及其后续版本的一些方面&#xff1a; Wind…

慧择解构年轻高客市场长期价值 花旗重申“买入”评级

风险转移、资金配置、社会保障、风险管理&#xff0c;当这四大保险行业基本职能呈现在眼前&#xff0c;人们曾经的第一反应可能是&#xff0c;只有达到一定年龄和社会地位、具备一定经济实力的人群&#xff0c;才会真正严肃对待这些概念。 但是&#xff0c;无论是人均收入水平…

前端环境变量释义import.meta.env.xxx

视频教程 彻底搞懂前端环境变量使用和原理&#xff0c;超清楚_哔哩哔哩_bilibili 添加命令行参数 --modexxxxx 新建.env.xxxx文件,其中.env文件会在所有环境下生效 以VITE_开头&#xff0c;字符串无需加双引号 使用import.meta.env.VITE_xxxxx进行调用

使用pytorch利用神经网络原理进行图片的训练(持续学习中....)

1.做这件事的目的 语言只是工具,使用python训练图片数据,最终会得到.pth的训练文件,java有使用这个文件进行图片识别的工具,顺便整合,我觉得Neo4J正确率太低了,草莓都能识别成为苹果,而且速度慢,不能持续识别视频帧 2.什么是神经网络?(其实就是数学的排列组合最终得到统计结果…

StringBuffer解析

StringBuffer是可变的字符序列&#xff0c;当一个StringBuffer被创建以后&#xff0c;通过StringBuffer提供append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串&#xff0c;就可以调…

移动云CNP产品介绍

整体介绍 磐舟devops的核心功能是项目管理和CI流程实现。CD能力也是集成的外部开源产品argoCD。所以 磐舟并不以CD能力见长。一般推荐试用磐舟完成CI&#xff0c;然后试用移动云CNP产品完成CD部署工作。 移动云原生技术平台CNP是面向多云多集群场景的应用管理平台。平台以应用…

Linux—简介安装常用命令系统中软件安装项目部署

目录 1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具介绍3.5.2 FinalShell安…