Math RSA-p和q的位长度
我只是想了解RSA的密钥生成部分,更具体地说,就是选择p和q素数。给定模n的目标位长度,我应该在什么范围内生成p和q 模n是p和q的乘积,其中p和q都是素数。我已经读到p和q应该相对接近,并且在sqrt(n)附近。例如,如果目标位长度是32位(我意识到非常小),那么p和q是否应该是最大16位的随机素数 谢谢你的澄清Math RSA-p和q的位长度,math,rsa,public-key-encryption,Math,Rsa,Public Key Encryption,我只是想了解RSA的密钥生成部分,更具体地说,就是选择p和q素数。给定模n的目标位长度,我应该在什么范围内生成p和q 模n是p和q的乘积,其中p和q都是素数。我已经读到p和q应该相对接近,并且在sqrt(n)附近。例如,如果目标位长度是32位(我意识到非常小),那么p和q是否应该是最大16位的随机素数 谢谢你的澄清 Rob对于32位模,这个问题有点学术性:您选择p和q的主要目的是使产品难以分解,但是找到一个小于2^32的数的素因式分解非常容易,因此在这种情况下,几乎没有必要担心p和q的大小。请注
Rob对于32位模,这个问题有点学术性:您选择
p
和q
的主要目的是使产品难以分解,但是找到一个小于2^32
的数的素因式分解非常容易,因此在这种情况下,几乎没有必要担心p
和q
的大小。请注意,只要p
和q
是不同的素数,数学就可以很好地工作
对于更现实的情况,比如1024位模,那么是的,随机选择两个512位素数p
和q
:也就是说,从[2^511,2^512]
范围内的所有素数集中统一选择p
和q
。有一个概念是“”,它是为避免特定的已知攻击而设计的素数——例如,您将看到建议选择p
和q
,以便p-1
和q-1
具有较大的因子,以防止使用。然而,这些建议并不真正适用于大模数和最先进的因式分解算法(,)。还有其他一些可能的情况,理论上可以给出一个简单的因式分解,但它们在实践中不太可能从p
和q
的随机选择中出现,因此它们不值得担心
小结:只要选择两个位长相等的随机素数,就可以了
另外还有一些评论和需要考虑的事情:
p
和q
的范围,比如说[1.5*2^511,2^512]
,或者扔掉任何1023位的模,然后再试一次p
和q
使它们彼此接近:如果p
和q
确实彼此接近(例如,相距小于10^10
),那么它们的产品pq
很容易被分解成因数。但是如果你在[2^511,2^512]
范围内选择随机素数p
和q
,这是不可能发生的[2^511,2^512]
中的随机(奇数)整数,然后递增它,直到找到第一个素数。但请注意,这并不能在所有的素数中给出一个统一的选择:在一个大间隙之后出现的素数比其他素数更可能出现。一个更好的策略是继续选择随机奇数,并将第一个素数(或者更可能的是,一个强概率素数)保留在许多随机选择的基上,以便在实践中确定它是素数非常感谢,这很有帮助。我发现很难找到任何常用的最佳实践,所以我会考虑所有这些观点。