

在一个标准的离线口令破解攻击中,攻击者拥有口令的散列值,并试图猜出创建它的口令。根据所使用的散列算沽,攻击者通常花费绝大部分时间对猜测进行哈希。如果加密过程没有使用盐(salt) ,这些攻击者生成的哈希值可以存储起来并被重用到以后的破解中,这是因为相同的猜栅散列值总是相同的。
这种预先计算攻击最简单的办法是创建一个数据库保存先前的猜测散列,而在以后新的口令破解会话,只需要查询创建的数据库。如果散列匹配,攻击者只要在数据库中找到它相应的明文,破解就完成了。这种查找很快(通常只需几秒),这大大减少了破解常见口令的时间花费。而这样的一个数据库被称为一个散列查找表。
散列查找表的最大问题是存储空间过大,以Church 的无线路由哈希查找表为例,总的密钥空间是十亿(1.000X 1.000.000) ,表的总大小约为33G。因此,如果加上更多的词组规则,表将变得太大而无法实现。
彩虹表可以看成是一种非常有效,但有损耗的压缩散列查找表的实现算法。它采用时空折中思路,引入hash 链的每一步的使用不同的还原函数井去除了辨识点的思想。其基本思路为:假设有一种口令哈希函数H 和一个有限口令集p ,目标是预先计算一个数据结构,对于任意的哈希函数输出缸,都能很快地在P 中定位p ,使得H(P)=h,或确定在P中有没有这么一个P 。
| 各省软考办 | ||||||||||