1

彩虹表的维基百科页面说:

“这种多重归约函数的使用使查找速度大约提高了一倍。”

假设链中的“平均”位置,我们取一个哈希并通过 9 次迭代链运行它......

原始表通过 4 次归约和 4 次哈希运行它并找到链的末端,然后查找另外 5 次哈希 5 次归约......总共 9 次哈希 9 次归约

彩虹表通过 Rk-1、Rk-2、Rk-3 和 Rk-4 计算来找到链的末端,然后再进行 5 次哈希 5 次归约以获得明文:总共 15 次哈希 15 次归约...

我在这里想念什么?根据我的数学计算,唯一一次彩虹查找甚至与普通表相同的速度是当哈希恰好位于链的最末端时......事实上,RT应该越接近开始越慢哈希谎言...

使用彩虹表的 5k 链在开始时应该比普通哈希表慢大约 2500 倍......

我错过了什么还是维基百科犯了错误?(该页面上引用的论文(第13页)也将是错误的,所以我倾向于前者)

4

2 回答 2

2

彩虹桌的目的不一定是为了更快,而是为了减少空间。彩虹表以速度换大小。

例如,存储所有可能的 10 位密码的哈希值在磁盘空间方面会非常昂贵。您还需要考虑,由于字典空间太大,因此需要大量分页(操作非常慢)。

彩虹表更占用 CPU,但它们要小得多,需要更少的磁盘空间,并且一次允许内存中更多的潜在字典空间。请记住,这意味着在现实世界中,由于分页较少(磁盘读取速度非常慢),大型字典空间的潜在性能更高。

这是一个更好的示例: http: //kestas.kuliukas.com/RainbowTables/

当然,这都是学术性的。彩虹桌对设计良好的安全系统没有任何价值。1) 使用加密安全算法(不要“自己动手”) 2) 使用密钥派生函数(具有数千次迭代)来减慢攻击者的哈希吞吐量。3)使用大(32 到 64 位)随机盐。彩虹表不能再被预先计算,该计算也不能用于任何其他系统(除非它们碰巧共享相同的盐。4)如果可能的话,每条记录使用不同的盐,从而使彩虹表完全无效。

于 2010-11-15T15:29:23.847 回答
0

所有答案都在原始论文中。首先,您必须看到您必须将单个彩虹表与 t 个经典表进行比较,t 是链中元素的数量。事实上,彩虹表中的每一列就像一个经典表(例如,如果你必须在彩虹表的一列中有相同的元素,你将有一个合并,如果你在一个经典表中有两个相同的元素,你也有一个合并)。然后您会看到,如果您必须遍历所有表(具有长度为 t 的链的 t 个表),则要在 t 个经典表中进行搜索,您将需要 t^2 次操作。如果您在单个彩虹表中搜索,您将需要 1+2+3+...+t 次操作,该操作等于 t^2/2。所以在最坏的情况下,如果你找不到密码,你会快两倍。现在,如果在您浏览了一半的表或列之后平均显示密码,那么它将快 4 倍。如果您想要成功的高概率(例如 99%),那么平均而言,密码会在 10% 的表之后出现,使彩虹表快 20 倍。

于 2010-12-06T21:15:14.820 回答