理解彩虹表攻击

什么是彩虹桌?

null

计算机系统中的密码不是直接以明文形式存储,而是通过加密进行散列。哈希函数是单向函数,这意味着它不能被解密。每当用户输入密码时,就会将其转换为哈希值,并与已存储的哈希值进行比较。如果值匹配,则对用户进行身份验证。 彩虹表是一个数据库,用于通过破解密码哈希来获得身份验证。它是一个预计算的明文密码及其相应哈希值字典,可用于找出哪个明文密码产生特定哈希。由于多个文本可以生成相同的哈希,所以知道原始密码的真实内容并不重要,只要它生成相同的哈希即可。

彩虹桌攻击是如何工作的?

彩虹表的工作原理是快速有效地进行密码分析。与bruteforce攻击不同,bruteforce攻击的工作原理是计算每个字符串的哈希函数,计算它们的哈希值,然后在每一步将其与计算机中的哈希值进行比较。彩虹表攻击通过计算大量可用字符串的散列来消除这种需求。这其中有两个主要步骤:

创建表 在这里,对字符串进行哈希运算,然后进行缩减以创建一个新的字符串,该字符串将再次重复缩减。例如,让我们创建一个最常用密码表, 12345678 ,在前8个字符上使用MD5哈希函数:

  • 首先,我们获取字符串并将其传递给md5哈希函数。
hashMD5(12345678) = 25d55ad283aa400af464c76d713c07ad
  • 我们通过只取前8个字符来减少散列。然后,我们把它搞砸了。
hashMD5(25d55ad2) = 5c41c6b3958e798662d8853ece970f70
  • 重复此操作,直到输出链中有足够的散列。这表示一个链,从第一个纯文本开始,到最后一个散列结束。
  • 在获得足够的链条后,我们将它们储存在一张桌子上。

破解密码 从散列文本(密码)开始,检查其是否存在于数据库中。如果是这样,请转到链的开头并开始散列,直到找到匹配项。一旦获得匹配,过程就会停止,身份验证就会被破解。以下流程图说明了这些步骤:

图片[1]-理解彩虹表攻击-yiteyi-C++库

彩虹表攻击的优缺点

优势:

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

缺点:

  1. 存储表需要大量存储空间。
  2. 由于已经计算了所有的值,所以它被简化为对表进行简单的搜索和比较操作。

防御彩虹桌攻击

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

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

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享