12

I've carefully read about rainbow tables and can't get one thing. In order to build a hash chain a reduction function is used. It's a function that somehow maps hashes onto passwords. This article says that reduction function isn't an inverse of hash, it's just some mapping.

I don't get it - what's the use of a mapping that isn't even an inverse of the hash function? How should such mapping practically work and aid in deducing a password?

4

3 回答 3

10

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

每个表行(“链”)都是哈希函数调用的序列。诀窍是每个输入都是从链中的前一个输出确定性地计算出来的,因此:

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

归约函数是将散列函数输出转换为适当输入的粘合剂(例如,看起来像真正密码的字符串,仅由可打印字符组成)。它的作用主要是能够以或多或少的均匀概率生成可能的哈希输入,给定随机数据(并且哈希输出将是可接受的随机)。归约函数不需要有任何特定的结构,特别是关于散列函数本身的工作方式;归约函数必须只允许继续构建链而不会产生太多虚假碰撞。

于 2011-04-22T15:56:06.893 回答
7

归约函数不是散列逆的原因是散列的真正逆不是函数(请记住,“函数”的实际定义需要一个输出对应一个输入)。

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

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

于 2011-04-21T12:56:40.530 回答
4

它产生的是否是密码无关紧要:您将获得的也可以用作密码,并且您可以使用它登录,就像使用原始密码一样。

于 2011-04-21T19:44:50.113 回答