2010-11-14 31 views
1

Wikipedia page for rainbow tables说:维基百科彩虹表项

“这个使用多个减少功能大约增加一倍查找的速度。”

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

原始表运行它通过削减4和4个哈希和发现的结束链,然后查看它的另外5个哈希5减少...总计9个哈希9减少

彩虹表运行它通过Rk-1,Rk-2,Rk-3和Rk-4计算找到链的末端,然后另外5个散列5减少以获得明文:总共15个散列15个减少...

我在这里错过了什么?通过我的数学,唯一一次彩虹查找甚至与普通表相同的速度就是当散列正好在链的末端时......实际上,RT应该逐渐减慢,哈希在于...

与开头的哈希5K链应该是慢约2500倍比正常哈希表的彩虹表...

我缺少的东西还是没维基百科犯了一个错误? (paper referenced on that page(第13页)也是错误的,所以我倾向于前者)

+0

你不应该依靠维基百科的有效信息,那里的内容是用户创建的。 – RobertPitt 2010-12-06 21:18:48

+3

那么,这个网站上的所有内容是什么,你的观点是什么? ; P – 2010-12-29 20:19:29

回答

2

彩虹表的目的不一定是更快,但减少空间。 彩虹桌大小交易速度。

例如,对于所有可能的10位密码存储哈希将在磁盘空间方面过于昂贵。你还需要考虑到,由于字典空间非常大,它将需要大量的分页(非常慢的操作)。

彩虹表的CPU密度更高,但它们要小得多,所需磁盘空间更少,同时还允许在内存中存储更多潜在字典空间。请记住,由于分页较少(磁盘读取速度过慢),现实世界意味着在大型字典空间中具有更高的潜在性能。

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

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

+0

我指的是维基百科的报价,其中说彩虹表比其他*查找表快,特别是那些使用普通单减值函数散列链的表。 – 2010-11-15 15:31:32

+1

该声明具有误导性和含糊性。彩虹桌将采取多个步骤来确定比赛。如果给定无限量的记忆,彩虹表就会变慢。但是内存限制是真实的,访问磁盘的速度非常慢。然而受限于内存和实际磁盘速度的实际限制,彩虹表** CAN **最终速度更快,尽管每个按键需要多次查找。它取决于可用内存与字典空间的大小。较小的空间(如查找短通用密码)不太有用的彩虹 – 2010-11-15 15:41:25

+0

你可以向我解释这个吗?彩虹表的哪些因素会随着变化而变化?正如我在OP中所说的那样,通过我的数学,RT甚至等于可比查找表的唯一时间就是它的长度** 1 **。什么弥补了差异?链数?链长? – 2010-11-15 16:07:59

0

所有答案都在原始论文中。首先,你必须看到,你必须将一张彩虹表与t古典表进行比较,t是一个链中元素的数量。事实上,彩虹桌中的每一列就像一个古典桌子一样(例如,如果彩虹桌的一列中必须有相同的元素,那么将会有一个合并,如果在古典表中有两个相同的元素,合并)。 然后你会发现,如果你必须通过所有的表(t表链长度为t),那么在t古典表中搜索时需要t^2操作。如果在单个彩虹表中搜索,则需要1 + 2 + 3 + ... + t操作,这等于t^2/2。所以在最糟糕的情况下,如果你没有找到密码,你会快两倍。现在,如果密码显示出来后,你通过了一半的表或列,那么它会快4倍。如果您希望获得高成功率(例如99%),那么在10%的表格之后平均会出现一个密码,使彩虹表格快20倍。