对于2 ^ 1024到2 ^ 4096范围内的数字,最快的确定性素性测试是什么?

时间:2011-06-10 10:31:44

标签: algorithm performance primes

我正在编写加密协议的实现。到目前为止,我一直很难找到1024位到4096位整数(308到1233位数字)的最快确定性素性测试。我知道有几种选择,但我无法找到真实世界的速度比较。

具体而言,AKS测试与Rabin-Miller的确定性版本和Elliptic Curve Primality Proving测试(以及其他)相比,对于这个尺寸的一般随机数如何表现?

3 个答案:

答案 0 :(得分:11)

本文正在回答您的问题:

Richard P. Brent的原始测试: http://cs.anu.edu.au/student/comp4600/lectures/comp4600_primality.pdf

它在复杂性和“真实世界速度”中比较了3种算法。

答案 1 :(得分:5)

我是新手,所以我无法对上述链接发表评论,但这里是该文章的互联网档案链接:

https://web.archive.org/web/20110414142105/http://cs.anu.edu.au/student/comp4600/lectures/comp4600_primality.pdf

答案 2 :(得分:4)

此大小的最快证明方法是APR-CL(例如mpz_aprcl)和ECPP(例如Primoecpp-dj)。 APR-CL是确定性的并且几乎是多项式时间,而ECPP是随机的,但返回的答案是经证实的,而不是概率性的。或者,使用建设性的方法来证明素数,例如Maurer的方法或Shawe-Taylor。这些是通过构建Pocklington样式的证明来快速生成随机n位素数的方法。从实际的角度来看,如果你生成随机候选者而不是从第三方接收它们那么Miller-Rabin的错误率非常低,并且在这种情况下几乎所有人都对使用多个Miller-Rabin测试感到满意随机基础,可能还有强大的卢卡斯测试。有关可能的主要测试的建设性方法和建议的大量信息,请参见FIPS 186-4。

时间显示在this graph中,用于选择通过试验分区进行的随机n位数填充,BPSW(一种有效的可能主要检验),两种版本的AKS,APR-CL和ECPP。这显示了AKS与其他方法的比较。

我没有添加确定性MR,因为我认为你并不是在谈论64位输入,而且你必须测试n / 4个碱基或证明Riemann假设所以你只需要测试2 * log ^ 2(n)碱。即使您在没有证据的情况下使用后者,与其他选项相比,这两个选项都没有吸引力。在实践中,Bach版本比预期的AKS更快,但在我使用C + GMP的测试中明显慢于ECPP和APR-CL。我没有看过渐近线,但是在300位数时,它的速度慢了100倍。因此,我没有看到任何一点与APR-CL(Det M-R较慢)或ECPP(Det M-R较慢且ECPP为您提供启动证书)。

布伦特的论文可以在UMS10 version from 2010以及a similar version from 2006中找到。它基本上与我在各种算法的C + GMP中的更现代实现中发现的一致。 AKS是具有里程碑意义的理论成果,但目前尚无实际用途。