有多少个素数(可用于 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 加密)?的主要内容,如果未能解决你的问题,请参考以下文章