彩虹表使用的缩减功能如何工作?

时间:2011-04-21 08:03:38

标签: security hash passwords rainbowtable

我仔细阅读了about rainbow tables并且无法得到一件事。为了构建哈希链,使用缩减函数。这是一个以某种方式将哈希映射到密码的函数。 This article说减少函数不是哈希的反转,它只是一些映射

我不明白 - 有什么地方的映射甚至不是哈希函数的反转?这种映射如何实际工作并有助于推断密码?

3 个答案:

答案 0 :(得分:8)

彩虹表是“仅仅”一种用于预先计算哈希的大表的智能压缩方法。这个想法是,当且仅当在表构造期间考虑了相应的输入时,表才能“反转”散列输出。

每个表行(“链”)是一系列散列函数调用。诀窍是每个输入是从链中的前一个输出确定性地计算出来的,所以:

  • 通过存储链的起点和终点,您“道德地”存储完整的链,您可以随意重建(这是彩虹表可以被视为压缩方法的地方);
  • 您可以从哈希函数输出开始链重建。

缩减功能是将散列函数输出转换为适当输入的粘合剂(例如,看起来像真正密码的字符串,仅包含可打印字符)。它的作用主要是能够在给定随机数据的情况下生成具有或多或少均匀概率的可能散列输入(并且散列输出将是可接受的随机)。缩减函数不需要具有任何特定结构,特别是关于散列函数本身如何工作;减少功能必须允许继续构建链而不会产生太多的虚假冲突。

答案 1 :(得分:6)

简化函数不是散列的倒数的原因是散列的真正倒数不是函数(记住,“函数”的实际定义需要一个输出一个输出)。

散列函数生成的字符串比相应的输入短。根据鸽子原理,这意味着两个输入可以具有相同的输出。如果可以对任意长的字符串进行哈希处理,那么无限个字符串的数量实际上可以具有相同的输出。然而,彩虹表通常只为每个散列保留一个输出 - 因此它不能是真正的反转。

大多数彩虹表使用的缩减功能是“存储具有此散列的最短字符串”。

答案 2 :(得分:2)

它产生的是 密码并不重要:你得到的东西也可以用作 密码,你可以用它来登录和原密码一样。