school第三次公钥实验
PH Gao第三次NTL相关理论分析
Fermat
基于费马小定理,对于素数p有:
ap−1≡1(modp)
费马素性检验的基本思想是:对于给定的数n,随机选择一个整数a,如果an−1modn=1,则n可能是素数,否则n是合数。所以计算an−1 是否modn余1就可以粗略地判断一个数是否为素数,多次实验可以提高判断的正确率。
Solovay−Strassen
基于Jacobi符号,对于素数p有:
a2p−1≡(pd)(modp)
Solovay−Strassen素性检验的基本思想是:对于给定的数n,随机选择一个整数a,如果a2n−1modn=(pd),则n可能是素数,否则n是合数。所以计算a2n−1modn 是否等于(pd)就可以粗略地判断一个数是否为素数,对于这个式子,p是素数,则这个式子一定成立,但是满足这个式子的数不一定是素数,所以需要多次实验来提高正确率。
(pd)的计算方式为将p分解为素数的乘积,然后计算每个素数的Legendre符号,最后将每个素数的Legendre符号相乘,得到的结果就是(pd)的值,所以我们可以通过递归的方式来设计函数来计算(pd)的值。
Miller−Rabin
基于Fermat小定理及其引理,假设 n 是一个奇素数,且n>2,此时n−1必然为一个偶数,可以被表示为2s⋅d的形式对于素数p有:
a2sd≡1(modp)
对上式引理,有:
a2s−1d≡±1(modp)
要是结果为−1,我们可以一直做取平方根的操作,最终简化得到:
ad≡1(modp)
即如果随机选取一个整数a(1<a<n−1),使得对任意r(0<r<s−1)能使得a2rd≡−1(modp),或者ad≡1(modp),则n可能是素数,否则n一定是合数。所以计算以上就可以粗略地判断一个数是否为素数,对于这个式子,p是素数,则这个式子一定成立,但是满足这个式子的数不一定是素数,所以需要多次实验来提高正确率。
第三次NTL实验结果分析
以上三种检测方式的结果相同,对于测试数据:
\begin{align*}
& (1) : \text{110051}\\
& (2) : \text{181901} \\
& (3) : \text{410041} \\
& (4) : \text{769278483628740226167794860061798621150347827303123617} \\
& (5) : \text{1145169445838968401708775025324117691359108534130461797} \\
& (6) : \text{10221010696405715306543052536189788914202546069582395786318675605080695490061540792643337272761347929547435453096763879202778100241119332976939005254498509} \\
& (7) : \text{121833461555674589736949565105565398169972481095177279279180138710896774154003337848675741258281654778624527588581168846185536461680316105333272201631014303487127548432732619231950555289262966188279062132341418648002287985828399879599539829714743040809931482374894459448142788978098724300047711192868698944741} \\
\end{align*}
依次的素性检测结果为:
测试数据(1)(2)(3)(4)(5)(6)(7)结果TrueFalseFalseFalseFalseTrueTrue
经验证为正确答案。在实验中,我们发现,对于大数,Miller−Rabin的速度要比Fermat和Solovay−Strassen快很多,但是对于小数,Miller−Rabin的速度要比Fermat和Solovay−Strassen慢很多,所以我们可以根据数的大小来选择不同的算法来进行素性检测。同时,对于检测次数,我们发现,检测次数越多,正确率越高,但是速度越慢,所以我们可以根据需要来选择检测次数。