Math RSA-p和q的位长度

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的大小。请注

我只是想了解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
的大小。请注意,只要
p
q
是不同的素数,数学就可以很好地工作

对于更现实的情况,比如1024位模,那么是的,随机选择两个512位素数
p
q
:也就是说,从
[2^511,2^512]
范围内的所有素数集中统一选择
p
q
。有一个概念是“”,它是为避免特定的已知攻击而设计的素数——例如,您将看到建议选择
p
q
,以便
p-1
q-1
具有较大的因子,以防止使用。然而,这些建议并不真正适用于大模数和最先进的因式分解算法(,)。还有其他一些可能的情况,理论上可以给出一个简单的因式分解,但它们在实践中不太可能从
p
q
的随机选择中出现,因此它们不值得担心

小结:只要选择两个位长相等的随机素数,就可以了

另外还有一些评论和需要考虑的事情:

  • 当然,如果你选择了两个512位素数,你将得到1023位或1024位的模;这可能不值得担心,但是如果你真的想得到一个1024位的模,你可以进一步限制
    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]
    中的随机(奇数)整数,然后递增它,直到找到第一个素数。但请注意,这并不能在所有的素数中给出一个统一的选择:在一个大间隙之后出现的素数比其他素数更可能出现。一个更好的策略是继续选择随机奇数,并将第一个素数(或者更可能的是,一个强概率素数)保留在许多随机选择的基上,以便在实践中确定它是素数

  • 确保您手头有一个非常好的随机数加密源,用于生成素数


  • 非常感谢,这很有帮助。我发现很难找到任何常用的最佳实践,所以我会考虑所有这些观点。