彩虹是字典攻击的变体(准确地说是预先计算的字典攻击),但它比完整字典占用的空间更少(以在表中找到密钥所需的时间为代价).这种空间 - 记忆权衡的另一端是全搜索(暴力攻击=零预计算,很多时间).
在彩虹表中,对密钥 - 密文的预计算字典被链式压缩.链中的每一步都是使用不同的压缩功能完成的.桌上有很多链条,所以它看起来像彩虹.
在该图中,不同的压缩函数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字符,这不是太糟糕了彩虹表.[a-z][0-9]那么您还可以进行更多搜索.[A-Za-z0-9].最后,坚持下去,[\w]即你能想到的任何可打印的角色,再一次,你看着一张巨大的桌子.因此,使密码长而复杂使彩虹表开始采用蓝光大小的数据光盘.然后,根据您之前的问题,您开始添加salting和hash派生函数,并且您可以通过硬件(er)进行哈希破解的一般解决方案.
这里的目标是保持领先于可用的计算能力.
| 归档时间: |
|
| 查看次数: |
3356 次 |
| 最近记录: |