有多少个素数(可用于 RSA 加密)?

Posted

技术标签:

【中文标题】有多少个素数(可用于 RSA 加密)?【英文标题】:How many prime numbers are there (available for RSA encryption)? 【发布时间】:2013-04-12 01:51:11 【问题描述】:

我是否错误地认为 RSA 加密的安全性通常受到已知素数数量的限制?

要破解(或创建)私钥,必须组合正确的素数对。

是否不可能发布 RSA 使用范围内所有素数的列表?还是该列表足够大以使这种蛮力攻击不太可能?不会有“常用”的素数吗?

【问题讨论】:

这个问题似乎跑题了,因为它与编程无关。 crypto.se上的相关问题:How many RSA keys before a collision? 还有:How are primes generated for RSA? 【参考方案1】:

RSA 不会从已知素数列表中进行选择:它会生成一个新的非常大的数字,然后应用一种算法来找到一个几乎可以肯定是素数的附近数字。见this useful description of large prime generation):

生成大素数的标准方法是采用所需长度的预选随机数,应用费马测试(最好使用以 2 为底的,因为它可以优化速度),然后应用一定数量的米勒-Rabin 测试(取决于长度和允许的错误率,例如 2−100)以获得一个很可能是素数的数字。

(你可能会问,为什么在这种情况下,当我们试图找到越来越大的素数时,我们没有使用这种方法。答案是已知最大的素数has over 17 million digits- 甚至远远超出通常非常大的数字用于密码学)。

至于是否可能发生冲突 - 现代密钥大小(取决于您所需的安全性)范围从 1024 到 4096,这意味着质数范围从 512 到 2048 位。这意味着您的质数大约为 2^512:长度超过 150 位。

我们可以使用1 / ln(n) 非常粗略地估计素数的密度(参见here)。这意味着在这些10^150 数字中,大约有10^150/ln(10^150) 素数,可以选择2.8x10^147 素数——当然比任何列表都多!!

所以是的——这个范围内的素数数量惊人地多,碰撞实际上是不可能的。 (即使你生成了一万亿个可能的素数,形成一个 septillion 组合,它们中的任何两个是同一个素数的机会都是10^-123)。

【讨论】:

还有足够多的素数从未发生过任何碰撞?我的意思是,它们必须足够“小”以适应 RAM 或类似的限制? @pinhead:查看我的最新更新。这种大小的素数可以非常容易地放入 RAM - 它们的范围为 1-4 kb。但是,即使您使用宇宙中的每一个原子来存储不同的位,可能的素数(上面估计约为 10^147)的 列表 也不适合。 “这意味着素数的范围从 512 到 2048” - 我认为你的意思是 512 到 2048 很好的答案。问题是它假设一个完美的 PRNG 来生成这么多的唯一数字来推导出素数。实际上,由于缺乏熵或由于错误的实现,PRNG 通常不如应有的那么好。因为 RSA 公钥包含生成日期,所以您已经知道熵的一部分,这进一步有助于限制可能的随机数的范围。这是一个很好的示例,表明 RSA 密钥可能比预期的要少:lwn.net/Articles/482089 许多公钥包含版本信息,以便您知道使用什么软件和版本生成密钥。如果此版本已知密钥生成漏洞,这可以进一步帮助您破解它。【参考方案2】:

随着新研究的出现,您的问题的答案变得更加有趣。在 David Adrian 等人最近在 2015 年 10 月 16 日访问的一篇论文“不完美的前向保密:Diffie-Hellman 如何在实践中失败”中发现@https://weakdh.org/imperfect-forward-secrecy-ccs15.pdf,研究人员表明,尽管可能有足够数量的素数可用于RSA 的 1024 位密钥集在整个集合中都有一些密钥组,由于实现,它们更有可能被使用。

我们估计即使在 1024 位的情况下,计算也是 考虑到民族国家的资源是合理的。少量固定或 数以百万计的服务器使用标准化组;表演 单个 1024 位组的预计算将允许被动 窃听 18% 的流行 HTTPS 站点,第二组会 允许对 66% 的 IPsec *** 和 26% 的 SSH 的流量进行解密 服务器。仔细阅读已公布的 NSA 泄密文件表明, 该机构对 *** 的攻击与实现这样的目标是一致的 休息。我们得出结论,转向更强大的密钥交换方法应该 成为互联网社区的优先事项。

研究还显示了 TLS 中的一个缺陷,该缺陷可能允许中间人攻击者将加密降级为 512 位。

因此,在回答您的问题时,纸上的 RSA 加密中可能有足够数量的素数,但实际上,如果您躲避某个民族国家,就会存在安全问题。

【讨论】:

【参考方案3】:

RSA 中使用的素数不仅很大。它必须是 10 位数字或可能是 100 位数字。我所指的不是数十亿或数万亿,而是难以表达甚至难以想象的东西。

所以要回答这个问题,这样的数字不可能是已知的素数。

【讨论】:

以上是关于有多少个素数(可用于 RSA 加密)?的主要内容,如果未能解决你的问题,请参考以下文章

rsa算法中p,q,n,e,d一般大小都为多少啊?

RSA 加密

leetcode实战—素数(埃拉托色尼筛选法包括证明哈希RSA)

RSA算法使用介绍

RSA算法

登录页面之RSA加密