什么是彩虹表(Rainbow Table)

彩虹表是一个数据库,用于通过破解密码哈希来获得身份验证。它是一个预先计算的明文密码及其对应的哈希值字典,可用于查找产生特定哈希值的明文密码。由于一个以上的文本可以产生相同的哈希值,因此知道原始密码的真实含义并不重要,只要它产生相同的哈希值即可。

计算机系统中的密码不是直接存储为纯文本,而是使用加密进行哈希处理。哈希函数是1向函数,这意味着它不能被解密。每当用户输入密码时,密码都会转换为哈希值,并与已存储的哈希值进行比较。如果值匹配,则对用户进行身份验证。

彩虹表如何运作?

彩虹表可以非常快速有效地进行密码分析。与蛮力攻击不同,蛮力攻击通过计算与它们一起出现的每个字符串的哈希函数,计算其哈希值,然后在每一步将其与计算机中的哈希值进行比较来进行工作。彩虹表攻击通过已经计算了大量可用字符串的哈希消除了这种需求。其中有两个主要步骤:

创建表

在这里,获取字符串的哈希值,然后将其减少以创建一个新的字符串,然后再次重复将其减少。例如,让我们使用前5个字符的MD5哈希函数创建最常用密码表12345678:

1.首先,我们获取字符串并将其通过md5哈希函数传递。

hashMD5(12345678)= 25d55ad283aa400af464c76d713c07ad

2.我们仅采用前8个字符来减少哈希。然后,我们重新哈希它。

hashMD5(25d55ad2)= 5c41c6b3958e798662d8853ece970f70

3.重复此过程,直到输出链中有足够的散列为止。这代表一个链,该链从第一个纯文本开始,到最后一个哈希结束。
4.获得足够的链后,我们将它们存储在表中。

破解密码

从散列文本(密码)开始,检查其是否存在于数据库中。如果是这样,请转到链的开头并开始哈希,直到找到匹配项为止。一旦获得匹配,该过程将停止并且认证将被破解。

优点:

1.与暴力破解不同,执行哈希函数并不是这里的问题(因为所有内容都是预先计算的)。由于已经计算了所有值,因此可以简化为对表的简单搜索和比较操作。
2.不需要知道确切的密码字符串。如果哈希值匹配,则字符串是否不是密码本身也没关系。它将被认证。

缺点:
1.存储表需要大量存储。
2.由于已经计算了所有值,因此可以简化为对表的简单搜索和比较操作。

防止彩虹表攻击

通过使用盐技术可以轻松地防止彩虹表攻击,该技术是将随机数据与纯文本一起传递到哈希函数中的方法。这样可以确保每个密码都有一个唯一的生成的哈希值,因此可以防止彩虹表攻击,该攻击原理是防止多个文本可以具有相同的哈希值。

防止预计算攻击的另一种技术是密钥扩展。使用此功能,salt,密码和一些中间哈希值将通过哈希函数多次运行,以增加哈希每个密码所需的计算时间。另一种称为密钥加强的方法是使用随机的盐扩展密钥,但随后(与密钥拉伸不同)安全删除该盐。这迫使攻击者和合法用户都对salt值执行暴力搜索。因此,没有必要绕过盐渍。

十大最受欢迎的Web开发JavaScript框架
每日科技资讯 | 20200820