Security 彩虹表使用的缩减函数是如何工作的?

Security 彩虹表使用的缩减函数是如何工作的?,security,hash,passwords,rainbowtable,Security,Hash,Passwords,Rainbowtable,我仔细地读了一遍,一件东西也找不到。为了构建哈希链,使用了一个缩减函数。它是一个以某种方式将哈希映射到密码的函数。说归约函数不是散列的逆函数,它只是一些映射 我不明白-一个甚至不是哈希函数的逆函数的映射有什么用?这种映射实际上应该如何工作并帮助推断密码?还原函数不是哈希的倒数的原因是哈希的真正倒数不是函数(请记住,“函数”的实际定义要求一个输入对应一个输出) 哈希函数生成的字符串比其相应的输入短。根据鸽子洞原理,这意味着两个输入可以有相同的输出。如果可以对任意长的字符串进行散列,那么实际上,无限

我仔细地读了一遍,一件东西也找不到。为了构建哈希链,使用了一个缩减函数。它是一个以某种方式将哈希映射到密码的函数。说归约函数不是散列的逆函数,它只是一些映射


我不明白-一个甚至不是哈希函数的逆函数的映射有什么用?这种映射实际上应该如何工作并帮助推断密码?

还原函数不是哈希的倒数的原因是哈希的真正倒数不是函数(请记住,“函数”的实际定义要求一个输入对应一个输出)

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


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

不管它生成的是否是密码:您将得到的也将用作密码,并且您可以使用该密码以及原始密码登录。

rainbow表是“just”一种用于预计算哈希的大表的智能压缩方法。其思想是,当且仅当在表构造过程中考虑了相应的输入时,表才能“反转”散列输出

每个表行(“链”)都是一系列哈希函数调用。诀窍在于,每个输入都是根据链中的前一个输出确定计算的,因此:

  • 通过存储链的起点和终点,您可以“道德地”存储完整的链,您可以随意重建该链(在这里,彩虹表可以被视为一种压缩方法)
  • 可以从散列函数输出开始链重建
归约函数是将哈希函数输出转换为适当输入(例如,看起来像真正密码的字符串,仅由可打印字符组成)的粘合剂。它的作用主要是在给定要处理的随机数据(并且哈希输出将是可接受的随机数据)的情况下,能够以或多或少一致的概率生成可能的哈希输入。缩减函数不需要有任何特定的结构,特别是关于散列函数本身如何工作的结构;缩减功能必须只允许继续构建链,而不会产生太多虚假碰撞