因为它包含了所有可能性的“光谱”。
字典攻击是一种暴力破解技术,只是尝试各种可能性。就像这样(Python伪代码)
mypassworddict = dict()
for password in mypassworddict:
trypassword(password)
然而,彩虹表的工作方式不同,因为它是用于反向哈希。 哈希的高级概述是它具有许多 bin:
bin1, bin2, bin3, bin4, bin5, ...
它们对应于输出字符串的二进制部分 - 这就是字符串最终长度的原因。随着哈希的进行,它以不同的方式影响不同部分的容器。因此,第一个字节(或接受的任何输入字段)影响(比如说,简单地说)容器3和4。下一个输入会影响2和6。依此类推。
彩虹表是给定二进制数的所有可能性的计算,即每个容器的所有可能逆转,对于每个容器……这就是为什么它最终变得如此庞大。如果第一个容器值为0x1,则需要拥有所有bin2的值和所有bin3的值的查找列表,通过哈希向后工作,最终给出一个值。
为什么它不被称为字典攻击?因为它不是。
正如我看过你之前的问题一样,让我扩展一下你正在寻找的细节。加密安全哈希需要在理想情况下从小输入大小到整个文件都是安全的。要预先计算整个文件的哈希值将永远需要很长时间。因此,彩虹表是设计在一个小而且易于理解的输出子集上的,例如a-z上所有字符的置换超过10个字符的字段。
这就是为什么打败字典攻击的密码建议在这里起作用。您将更多的整个可能输入集合子集放入哈希的输入中,彩虹表需要包含更多内容来搜索它。所需的数据大小变得非常大,搜索时间也很长。所以,请考虑一下:
- 如果您的输入是5-8个字符的[a-z],那不算太糟糕的彩虹表。
- 如果您将长度增加到42个字符,那就是一个巨大的彩虹表。每个输入都会影响哈希和其容器。
- 如果你在你的搜索要求中加入数字[a-z][0-9],你需要进行更多的搜索。
- 同样地,[A-Za-z0-9]。最后,加入[\w],即任何您可以想到的可打印字符,再次,您正在查看一个巨大的表格。
因此,使密码变得又长又复杂会使彩虹表开始采取蓝光大小的数据。然后,根据您之前的问题,您开始添加盐和哈希派生函数,并使哈希破解的一般解决方案变得更加困难。
这里的目标是保持领先于可用的计算能力。