Cryptography 对于加密安全素数,我应该使用Rabin Miller的多少次迭代?

Cryptography 对于加密安全素数,我应该使用Rabin Miller的多少次迭代?,cryptography,primes,Cryptography,Primes,我正在为Diffie-Hellman类型的密钥生成2048位安全素数,p和(p-1)/2都是素数 我可以在p和(p-1)/2上使用Rabin-Miller的几次迭代,并且仍然对加密强密钥充满信心?在我所做的研究中,我听到了1024位普通素数的6到64次迭代,所以我现在有点困惑。一旦建立起来,如果生成的是安全素数而不是普通素数,那么这个数会改变吗 计算时间非常宝贵,因此这是一个实际的问题-我基本上想知道如何找出我可以避开的测试的最低数量,同时保持几乎有保证的安全性。Rabin Miller的每次迭

我正在为Diffie-Hellman类型的密钥生成2048位安全素数,p和(p-1)/2都是素数

我可以在p和(p-1)/2上使用Rabin-Miller的几次迭代,并且仍然对加密强密钥充满信心?在我所做的研究中,我听到了1024位普通素数的6到64次迭代,所以我现在有点困惑。一旦建立起来,如果生成的是安全素数而不是普通素数,那么这个数会改变吗


计算时间非常宝贵,因此这是一个实际的问题-我基本上想知道如何找出我可以避开的测试的最低数量,同时保持几乎有保证的安全性。

Rabin Miller的每次迭代都会将该数字合成的几率降低1/4

因此,在64次迭代之后,2^128中只有1次机会是复合数

假设您将其用于公钥算法(例如RSA),并假设您将其与使用(比如)128位密钥的对称算法相结合,则对手可以以该概率猜测您的密钥

底线是选择迭代次数,将该概率置于您为算法选择的其他大小的大致范围内

[更新,详细说明]

答案完全取决于您将使用这些数字的算法,以及针对这些算法的最著名的攻击

例如,根据:

截至2003年,RSA Security声称1024位RSA密钥的强度相当于80位对称密钥,2048位RSA密钥相当于112位对称密钥,3072位RSA密钥相当于128位对称密钥

因此,如果您计划使用这些素数来生成(比如)1024位RSA密钥,那么就没有理由对Rabin Miller进行超过40次的迭代。为什么?因为当你遇到故障时,攻击者可能会破解你的一把钥匙

当然,如果时间允许,没有理由不执行更多的迭代。这样做没有多大意义

另一方面,如果您正在生成2048位RSA密钥,则Rabin Miller的56次(大约)迭代更合适

密码学通常由原语组成,如素代、RSA、SHA-2和AES。如果你想让其中一个原形比其他原形坚固2^900倍,你可以,但这有点像在小木屋上安装一个10英尺高的钢拱门

你的问题没有固定的答案。这取决于进入加密系统的其他部分的强度


总之,2^-128是一个非常小的概率,所以我可能只使用64次迭代:-)。

这有关系吗?为什么不运行1000次迭代呢?在搜索素数时,不管怎样,在第一次失败时,都会停止应用Rabin-Miller测试,因此对于查找素数所需的时间来说,迭代次数的上限是多少并不重要。您甚至可以在1000次迭代之后运行确定性素性检查算法,以完全确定


这就是说,一个数在n次迭代后成为素数的概率是4^-n。

让我们假设你通过选择随机值来选择素数p,直到你找到一个,Miller Rabin说:这个看起来像素数。米勒-拉宾测试最多使用n轮。(对于所谓的“安全素数”,除了运行两个嵌套测试外,其他内容不会更改。)

随机1024位整数为素数的概率约为1/900。现在,您不想做任何愚蠢的事情,因此只生成奇数值(偶数1024位整数保证为非素数),并且,更一般地,仅当值不是“明显”非素数(即可以被小素数除)时,才运行Miller-Rabin测试。因此,在达到质数(平均值)之前,你最终用Miller Rabin尝试了大约300个值。当该值为非素数时,Miller-Rabin将在每一轮中以3/4的概率检测它,因此对于单个非素数值,平均运行的Miller-Rabin轮数为1+(1/4)+(1/16)+……=4/3. 对于300个值,这意味着大约400轮Miller-Rabin,不管您选择n

因此,如果选择n,例如40,则n所隐含的成本小于总计算成本的10%。随机素数选择过程由对非素数的测试控制,而非素数不受所选n值的影响。我在这里谈到了1024位整数;对于较大的数字,n的选择就更不重要了,因为随着大小的增加,素数变得更稀疏(对于2048位整数,上面的“10%”变成了“5%”)

因此,您可以选择n=40并对此感到满意(或者至少知道减少n不会为您带来太多好处)。另一方面,使用大于40的n是没有意义的,因为这会使概率低于简单计算错误的风险。计算机是硬件,它们可能会出现随机故障。例如,素数测试函数可以为非素数值返回“真”,因为宇宙射线(高速穿过宇宙的高能粒子)恰好在正确的时间击中正确的晶体管,将返回值从0(“假”)翻转到1(“真”)。这是非常不可能的——但可能性不低于概率2-80。有关更多详细信息,请参阅。底线是,不管你如何确保一个整数是素数,你仍然有一个不可避免的概率元素,40轮米勒-拉宾已经给了你最好的希望

总之,使用40轮。

Damgard Landrock Pomerance的论文指出,如果随机选择
k
-位奇数
n
,并在