在我读过的关于公钥密码学的解释中,据说通过将两个非常大的素数相乘可以得出一些大数。由于分解大素数的乘积几乎不可能非常耗时,因此您有安全性。
这似乎是一个可以用彩虹表轻松解决的问题。如果您知道所用素数的大致大小并且知道其中有 2 个,您可以快速构建一个彩虹表。这将是一个非常大的表,但它可以完成并且任务可以跨硬件并行化。
为什么彩虹表不是基于乘以大素数来击败公钥加密的有效方法?
免责声明:显然,数以万计的疯狂智能安全意识的人并不是碰巧错过了几十年我在一个下午想到的东西。我认为我误解了这一点,因为我正在阅读简化的外行解释(例如:如果使用超过 2 个数字),但我还不够了解,不知道我的知识差距在哪里。
编辑:我知道“彩虹表”与在查找表中使用预先计算的哈希值有关,但上面听起来像是彩虹表攻击,所以我在这里使用这个术语。
编辑2:如答案中所述,没有办法只存储所有素数,更不用说它们的所有产品了。
- 这个网站说大约有这么多 512 位素数: ((2^511) * 1) / (512 log(2)) = 4.35 × 10 151
- 太阳的质量是 2 × 10 30 kg 或 2 × 10 33 g
- 每克太阳有2.17 × 10 124 个素数。
- 数量。可以容纳 1 KB 的 512 位数字:1 kb = 1024 字节 = 8192 位 / 512 = 16
- 可以容纳 1 TB:16*1024*1024*1024 = 1.72 × 10 10
- 拍字节:16*1024*1024*1024*1024 = 1.72 × 10 13
- 艾字节:16*1024*1024*1024*1024*1024 = 1.72 × 10 16
即使 1 艾字节重 1 克,我们也远未达到能够将所有这些数字放入具有太阳质量的硬盘驱动器所需的 2.17 × 10 124