RSA - p和q的比特长度

时间:2012-08-30 07:41:37

标签: math rsa public-key-encryption

我只是想了解RSA的密钥生成部分,更具体地说,选择p和q素数。给定模数的目标位长度n,我应该在哪个范围内生成p和q?

模量n是p和q的乘积,其中p和q都是素数。我已经读过p和q应该相对接近,并且在sqrt(n)附近。如果目标位长度是例如32位(我意识到非常小),那么p和q应该是最大16位的随机素数吗?

感谢您的任何澄清

罗布

1 个答案:

答案 0 :(得分:15)

对于32位模数,问题有点学术性:选择pq的主要目的是使产品难以分解,但找到较小数量的素数因子分解比2^32更容易让人担心pq在这种情况下的大小。请注意,只要pq不同的素数,数学就会正常工作。

对于更真实的东西,比如1024位模数,那么是的,您可以随意选择两个512位素数pq:即选择{{1 }}和p统一来自q范围内所有素数的集合。有一个“strong primes”概念,它是旨在避免特定可能的已知攻击的素数 - 例如,您会看到应该选择[2^511, 2^512]p的建议,以便qp-1有很多因素,以防止使用Pollard's 'p-1' algorithm进行简单的分解。但是,这些建议并不适用于大模量和最先进的分解算法(GNFSECM)。还有其他一些可能的情况,理论上可以给出一个简单的因子分解,但实际上它们不太可能在q-1p的随机选择中出现,他们不值得担心。 / p>

总结:只需选择两个具有相同位长的随机素数,就完成了。

要考虑的其他一些评论和事项:

  1. 当然,如果你确实选择了两个512位素数,你最终会得到 1023位 1024位模数;这可能不值得担心,但如果你真的关心获得1024位模数,你可以进一步限制qp的范围,比如q,或者只是抛弃任何1023位模数,然后再试一次。

  2. 不要刻意选择[1.5 * 2^511, 2^512]p,以便它们彼此靠近:qp真正相互靠近(例如,相隔少于q,那么他们的产品10^10很容易被Fermat's method分解。但是,如果您在pq范围内选择随机素数pq,则不会发生任何现实概率。

  3. 在随机选择素数时,一个诱人的策略是在[2^511, 2^512]范围内选择一个随机(奇数)整数,然后递增它直到找到第一个素数。但请注意,在所有素数中做出统一选择:在大差距之后出现的素数比其他素数更有可能出现。一个更好的策略就是继续挑选随机奇数并保持第一个是素数(或者更可能的是,这么多随机选择的基数的强可能素数,你可以在实践中确定它是素数)。

  4. 确保您有一个非常好的随机数加密源,供您的素数生成。