【问题标题】:RSA - bitlength of p and qRSA - p 和 q 的位长
【发布时间】:2023-03-15 05:46:01
【问题描述】:

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

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

感谢您的澄清

罗伯

【问题讨论】:

    标签: math rsa public-key-encryption


    【解决方案1】:

    对于 32 位模数,这个问题有点学术:您选择 pq 的主要目的是使乘积难以因式分解,但要找到小于 2^32 的数的素数分解非常简单,在这种情况下不必担心pq 的大小。请注意,只要pq不同的素数,数学就可以正常工作。

    对于更现实的东西,比如 1024 位模数,那么是的,你可以很安全地随机选择两个 512 位素数 pq:也就是说,选择 pq均匀地来自[2^511, 2^512] 范围内的所有素数集合。有一个“strong primes”的概念,它们是旨在避免特定可能的已知攻击的素数——例如,您会看到建议应该选择pq,以便p-1 和@987654341 @ 有很大的因数,以防止使用 Pollard's 'p-1' algorithm 进行简单的因式分解。然而,这些建议并不真正适用于大模数和最先进的分解算法(GNFSECM)。还有其他可能的情况在理论上可以轻松分解,但实际上它们不太可能从pq 的随机选择中出现,因此不值得担心。

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

    几个额外的 cmets 和需要考虑的事情:

    1. 当然,如果您确实选择了两个 512 位素数,您最终会得到 要么 1023 位 1024 位模数;这可能不值得担心,但如果你真的很想得到一个 1024 位的模数,你可以进一步限制 pq 的范围,比如 [1.5 * 2^511, 2^512],或者只是扔掉任何 1023 位模数再试一次。

    2. 不要故意选择 pq 使它们彼此靠近:如果 pq 确实彼此靠近(例如,小于 10^10 分开,比如说),那么他们的产品pq 很容易被Fermat's method 分解。但是,如果您在[2^511, 2^512] 范围内选择随机素数pq,这不会以任何现实概率发生。

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

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

    【讨论】:

    • 非常感谢,这很有帮助。我发现很难找到任何常用的最佳实践,所以我会考虑所有这些要点。
    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    相关资源
    最近更新 更多