【问题标题】:Wikipedia rainbow tables entry维基百科彩虹表条目
【发布时间】:2010-11-14 14:38:18
【问题描述】:

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页)也会错,所以我倾向于前者)

【问题讨论】:

  • 你不应该依赖*来获取有效信息,那里的内容是用户创建的。
  • 这个网站上的所有内容都是如此,你的意思是什么? ;P

标签: hash rainbowtable


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我指的是*的引述,它说彩虹表比 其他 查找表更快,特别是那些使用普通单归约函数哈希链的查找表。
  • 该声明具有误导性和模棱两可。彩虹表将采取多个步骤来确定匹配。给定无限量的内存,彩虹表会慢几个数量级。但是,内存限制是真实存在的,并且对磁盘的访问速度非常慢。然而,受实际内存限制和实际磁盘速度的限制,彩虹表 CAN 最终会更快,尽管它需要每个键进行多次查找。这取决于可用内存与字典空间的大小。空间越小(例如查找简短的常用密码),彩虹的用处就越小
  • 彩虹表的 N 时间总是较慢。然而,这忽略了必须从磁盘假脱机数据的现实世界(非常慢)。对于大型字典空间,内存中甚至不可能有很大一部分数据。例如
  • 使用常量归约函数的表(简单哈希链表)会被合并。合并的链变得模棱两可。为了避免这种情况,需要限制链的长度,这需要多个查找表。必须跨多个表查找会增加成本。这是专门为解决彩虹表而创建的问题。通过使每个归约都具有唯一性,可以消除合并的可能性,使用单个统一表并使用更长的链。
  • 更清楚。为每个步骤单独减少是允许更长的链而不会发生冲突/合并。虽然更长的链确实会导致更多的步骤,但最好需要多个表(简单的哈希链)。由于每一步的 R 都是唯一的,因此一对链合并的唯一方法是两条链解析为相同的最终值。这是非常罕见的,但确实会发生。为了在创建彩虹表期间进行补偿,对链进行排序,并用新链替换重复的最终值(选择略有不同的起始键)。
【解决方案2】:

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

【讨论】: