彩虹桌?

use*_*949 6 security rainbowtable rainbowattack

有谁知道它为什么叫彩虹表?记得我们已经知道有一种叫做"字典攻击"的攻击.为什么不是字典?

osg*_*sgx 6

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

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

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

在此输入图像描述


小智 6

因为它包含了整个"光谱"的可能性.

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

mypassworddict = dict()

for password in mypassworddict:
    trypassword(password)
Run Code Online (Sandbox Code Playgroud)

然而,彩虹表的工作方式不同,因为它用于反转哈希.哈希的高级概述是它有多个bin:

bin1, bin2, bin3, bin4, bin5, ...
Run Code Online (Sandbox Code Playgroud)

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

彩虹表是对给定箱的所有可能性的计算,即该箱的所有可能的倒置,对于每个箱......这就是它最终如此大的原因.如果第一个bin值是0x1那么你需要有一个查找列表bin2,其中包含bin3的所有值和bin3的所有值,它们最终会为你提供一个值.

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

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

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

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

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

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

  • 有字典攻击的子类,它使用预先计算的字典. (2认同)