什么是彩虹桌?
计算机系统中的密码不会直接存储为纯文本, 而是使用加密进行哈希处理。哈希函数是一种1向函数, 这意味着它无法解密。每当用户输入密码时, 密码都会转换为哈希值, 并与已存储的哈希值进行比较。如果值匹配, 则对用户进行身份验证。
彩虹表是一个数据库, 用于通过破解密码哈希来获得身份验证。它是一个预先计算的明文密码及其对应的哈希值字典, 可用于查找哪种明文密码会产生特定的哈希值。由于一个以上的文本可以产生相同的哈希, 因此只要能产生相同的哈希, 知道原始密码的真实性就无关紧要。
Rainbow Table Attack如何工作?
彩虹表可以非常快速有效地进行密码分析。与蛮力攻击不同, 蛮力攻击通过计算与它们一起出现的每个字符串的哈希函数, 计算它们的哈希值, 然后在每一步将其与计算机中的哈希值进行比较来进行工作。彩虹表攻击通过已经计算大量可用字符串的哈希消除了这种需求。其中有两个主要步骤:
创建表格
在这里,一个字符串的散列被获取,然后被简化以创建一个新的字符串,这个字符串再次被重复地简化。例如,让我们创建一个最常见的密码表,12345678,使用MD5哈希函数对前8个字符::
- 首先, 我们获取字符串并将其通过md5哈希函数传递。
hashMD5(12345678) = 25d55ad283aa400af464c76d713c07ad
- 我们仅采用前8个字符来减少哈希。然后, 我们重新哈希它。
hashMD5(25d55ad2) = 5c41c6b3958e798662d8853ece970f70
- 重复此过程, 直到输出链中有足够的散列为止。这代表一个链, 该链从第一个纯文本开始, 到最后一个哈希结束。
- 获得足够的链后, 我们将它们存储在表中。
破解密码
从哈希文本(密码)开始, 检查其是否存在于数据库中。如果是这样, 请转到链的开头并开始哈希, 直到找到匹配项为止。一旦获得匹配, 该过程将停止并且认证将被破解。以下流程图说明了步骤:
Rainbow Table攻击的优缺点
优点:
- 与暴力破解不同, 执行哈希函数并不是这里的问题(因为所有内容都是预先计算的)。在已经计算出所有值的情况下, 它简化为对表的简单搜索和比较操作。
- 不需要知道确切的密码字符串。如果哈希值匹配, 则字符串不是密码本身也没关系。它将被认证。
缺点:
- 存储表需要大量存储。
- 在已经计算出所有值的情况下, 它简化为对表的简单搜索和比较操作。
彩虹表攻击可以很容易地通过使用防止盐技术, 它是与纯文本一起传递到哈希函数的随机数据。这样可以确保每个密码都有一个唯一的生成的哈希, 因此可以防止彩虹表攻击, 该攻击基于一个原则, 即多个文本可以具有相同的哈希值。
防止预计算攻击的另一种技术是密钥扩展。使用此功能, salt, 密码和一些中间哈希值将通过哈希函数多次运行, 以增加哈希每个密码所需的计算时间。另一种称为密钥加强的方法是使用随机的盐扩展密钥, 但随后(与密钥拉伸不同)安全删除该盐。这迫使攻击者和合法用户都对salt值执行暴力搜索。因此, 没有必要绕过盐渍。