Cryptography 彩虹表作为大素数因子分解的解决方案

Cryptography 彩虹表作为大素数因子分解的解决方案,cryptography,public-key-encryption,rainbowtable,prime-factoring,Cryptography,Public Key Encryption,Rainbowtable,Prime Factoring,在我读到的关于公钥密码术的解释中,有人说一些大的数字是通过将两个极大的素数相乘得到的。由于分解大素数的乘积几乎是不可能的耗时,因此您具有安全性 这似乎是一个可以用彩虹表轻松解决的问题。如果您知道使用的素数的大致大小,并且知道有两个素数,您可以快速构建彩虹表。这将是一个巨大的表,但它可以完成,并且任务可以跨硬件并行化 为什么彩虹表不是击败基于大素数相乘的公钥密码的有效方法 免责声明:显然,数万疯狂聪明的安全意识强的人几十年来并不是碰巧错过了我在一个下午想到的东西。我想我误解了这一点,因为我读的是简

在我读到的关于公钥密码术的解释中,有人说一些大的数字是通过将两个极大的素数相乘得到的。由于分解大素数的乘积几乎是不可能的耗时,因此您具有安全性

这似乎是一个可以用彩虹表轻松解决的问题。如果您知道使用的素数的大致大小,并且知道有两个素数,您可以快速构建彩虹表。这将是一个巨大的表,但它可以完成,并且任务可以跨硬件并行化

为什么彩虹表不是击败基于大素数相乘的公钥密码的有效方法

免责声明:显然,数万疯狂聪明的安全意识强的人几十年来并不是碰巧错过了我在一个下午想到的东西。我想我误解了这一点,因为我读的是简化的外行解释(例如:如果使用了两个以上的数字),但我还不知道我的知识差距在哪里

编辑:我知道“彩虹表”与在查找表中使用预先计算的哈希有关,但上面的内容听起来像彩虹表攻击,所以我在这里使用这个术语


编辑2:正如答案中所指出的,没有办法只存储所有的素数,更不用说存储他们的所有产品了

  • 表示大约有这么多512位素数:((2^511)*1)/(512 log(2))=4.35×10151
  • 其重量为2×1030kg或2×1033g
  • 也就是说,每克太阳有2.17×10124个素数
  • 数量。一个千字节中可容纳的512位数字:1KB=1024字节=8192位/512=16
  • 可以容纳一个TB:16*1024*1024*1024=1.72×1010
  • PB:16*1024*1024*1024*1024=1.72×1013
  • Exabyte:16*1024*1024*1024*1024=1.72×1016

即使1Exabyte重1g,我们也远未达到2.17×10124的要求,以便能够将所有这些数字放入具有太阳质量的硬盘驱动器中

我认为主要的问题是,为某些算法预生成的彩虹表使用了一个相当“小”的范围(通常在128位的范围内)。这通常不会覆盖整个范围,但会加快暴力过程。它们通常会占用一些TB的空间

在素数分解中,素数要大得多(对于安全RSA,建议使用2048位)。因此,彩虹表不会“非常大”,但不可能存储在任何地方(占用了数百万TB的空间)


另外,rainbow表使用散列链的速度太快了(有很好的解释),这不能用于素数。

RSA和Diffie Hellman中使用的素数通常在2512左右。相比之下,已知宇宙中只有2256个原子。这意味着2512足够大,可以为宇宙中的每个原子分配2256个唯一的数字

根本没有办法存储/计算那么多数据



顺便说一句,我想你的意思是“一个大的素数表”——彩虹表是专门为散列定制的,在这里没有真正的意义。

来自我最喜欢的书之一,布鲁斯·施奈尔的《应用密码学》

“如果有人创建了一个包含所有素数的数据库,他会不会 能用那个数据库破解公钥算法吗? 是的,但他做不到。如果你能存储1GB 一个重达一克的驱动器上的信息,然后是一个列表 只有512位的素数会如此之重,以至于 将超过钱德拉塞卡极限并崩溃为 黑洞…所以你无论如何都无法检索数据“


换句话说,这是不可能或不可行的,或者两者兼而有之

最大的彩虹表是10个字符的字母数字表,大约是57位的安全性,没有接近128位的地方。好的,所以差别更大。谢谢你的澄清。FWIW,我最近没有称过磁盘驱动器的重量,但我刚刚放在笔记本电脑里的360GB驱动器比一磅(约400g)轻了很多,所以我们比每GB的克数做得更好。我想知道我们现在需要多少位长度的素数来创造一个黑洞,如果布鲁斯在他的最新著作中更新了这一点(有时间一定要买)。我想即使是每克1 TB,如果我的快速手指数学可信的话,它仍然会远远超过极限。你是对的。我做了数学运算并附加了原来的问题。但是密钥生成器生成素数不是也很难吗?密钥生成器必须使用某些算法,这些算法只能到达素数的某个子集IIRC。这意味着我们只需要将生成器可能生成的素数制成表格。我想知道这是否会大幅减少这个数字?很好的答案。。我和黛娜想的是同一个问题,看不出这有什么问题。。我很高兴答案是物理问题,而不是软件问题,因为这似乎有点太琐碎了,无法解决。我不明白你是如何从前面的两个数据中得到最终数据的。@Dinah:2^512个数字/2^256个原子=2^256个数字/atomhmm…但要有效地迭代这些素数,你只需要存储最多2^256个素数,其中约有6.5*10^74。您也不需要存储这些素数的每个二进制数字,有更好的编码。乐观地说,每个素数适合一个字节。如果每一个比特都存储在一个铁原子上,那么存储的重量将是
(55.847克/阿伏伽德罗数*6.5*10^74*8)
,谷歌称这是一个很酷的5*10^50千克,相当于银河系质量的4亿倍。嗯…这是很有趣的得到这种计算,但总有一个更聪明的方法…^-压缩,是关键。还有,黛娜,你只考虑了原料的储存,没有考虑。