彩虹桌?

时间:2011-02-19 15:21:32

标签: security rainbowtable rainbowattack

任何人都知道它为何被称为彩虹表?记得我们已经知道有一种叫做“字典攻击”的攻击。为什么不是字典?

4 个答案:

答案 0 :(得分:6)

彩虹是字典攻击的一种变体(准确地说是预先计算的字典攻击),但它比完整字典占用的空间更少(以在表中查找密钥所需的时间为代价)。这种空间记忆权衡的另一端是全搜索(暴力攻击=零预计算,很多时间)。

在彩虹表中,预先计算的密钥密文字典被链式压缩。链中的每一步都是使用不同的压缩功能完成的。桌上有很多链条,所以它看起来像彩虹。

在此图片中,不同的压缩函数K1,K2,K3具有类似彩虹的颜色: 存储在文件中的表只包含第一列和最后一列,因为可以重新计算中间列。

enter image description here

答案 1 :(得分:6)

因为它包含了整个“频谱”的可能性。

字典攻击是一种只是尝试可能性的强力技术。像这样(python伪代码)

mypassworddict = dict()

for password in mypassworddict:
    trypassword(password)

但是,彩虹表的工作方式不同,因为它用于反转哈希。哈希的高级概述是它有多个容器:

bin1, bin2, bin3, bin4, bin5, ...

它对应于输出字符串的二进制部分 - 这就是字符串最终的长度。随着哈希的进行,它以不同的方式影响二进制位的不同部分。因此,第一个字节(或接受的任何输入字段)输入会影响(例如,简单地)二进制位3和4.下一个输入会影响2和6.依此类推。

彩虹表是对给定箱的所有可能性的计算,即该箱的所有可能的逆,对于每个箱......这就是为什么它最终如此之大。如果第一个bin值是0x1,那么你需要有一个bin2的所有值的查找列表,并且bin3的所有值都在向后通过哈希值,这最终会给你一个值。

为什么不称它为字典攻击?因为不是。

正如我已经看到您之前的问题,让我扩展您正在寻找的细节。加密安全散列理想情况下需要从小的输入大小到整个文件安全。要预先计算整个文件的哈希值将永远需要。因此,彩虹表是在一个很好理解的输出子集上设计的,例如所有字符a-z在10个字符的字段上的排列。

这就是为什么用于击败字典攻击的密码建议在这里工作的原因。您放入哈希输入的整个可能输入集的子集越多,彩虹表需要包含的搜索就越多。所需的数据大小最终变得非常大,搜索时间也是如此。所以,想一想:

  • 如果您的[a-z]个字符输入为5-8,那彩虹表就不算太差了。
  • 如果你将长度增加到42个字符,那就是一张巨大的彩虹表。 每个输入都会影响哈希,因此影响所述哈希的区间。
  • 如果您将数字输入搜索要求[a-z][0-9],那么您还可以进行更多搜索。
  • 同样[A-Za-z0-9]。最后,坚持[\w],即你能想到的任何可打印角色,再一次,你看着一张巨大的桌子。

因此,使密码长而复杂使得彩虹表开始采用蓝光大小的数据光盘。然后,根据您之前的问题,您开始添加salting和hash派生的函数,并且您可以通过硬件(er)进行哈希破解的一般解决方案。

这里的目标是保持领先于可用的计算能力。

答案 2 :(得分:1)

我不知道这个名字的来源,但不同之处是:

  • 字典包含一些选定的项目(例如英语单词),而彩虹表格包含所有可能的组合。
  • 字典仅包含输入,而彩虹表包含输入和输出。
  • 字典用于测试不同的输入以查看输出是否有效,而彩虹表用于e反向查找,即查找哪个输入提供特定输出。

答案 3 :(得分:1)

不幸的是,有些陈述不正确。与所发布的内容相反,彩虹表不包含给定键空间的所有可能性,也不包含我见过的生成使用的可能性。可以生成它们以覆盖99.9但是由于散列函数的随机性,没有任何保证可以覆盖每个明文。

每个链由链接或步骤组成,每个步骤由散列和缩小功能组成。如果您的链条长度为100个链接,那么您将使用该数量的哈希/减少函数,然后丢弃除开始和结束之外的所有内容。

要查找给定哈希的plain,您只需执行链的长度的减少/哈希x量。所以你运行一次步骤并检查端点,如果它是一个错过你会重复...直到你跨过链的整个长度。如果匹配,您可以从起点重新生成链,您可以找到平原。如果再生后它不正确那么这是一个误报警。这是由于减少散列函数引起的碰撞而发生的。由于该表包含许多链,因此您可以在每一步对所有链端点进行大量查找,这实际上是允许速度发生魔力的地方。这也会导致误报,因为您只需要重新生成具有匹配的链,通过跳过不必要的链来节省大量时间。

它们不包含词典....不过传统的表格中没有彩虹表的变体,但它们使用了字典。

就是这样。这个过程有很多方法可以优化,包括删除合并/重复链并创建完美的表格,并将它们存储在不同的包装中以节省空间和加载时间。