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