什么是彩虹攻击?

61

我在阅读与盐和密码哈希相关的几篇文章时,有些人提到了彩虹攻击。什么是彩虹攻击,以及防止它的最佳方法是什么?

7个回答

74

维基百科的文章有点难以理解。简言之,你可以将彩虹表视为一个预先计算了哈希和密码的大型字典。

彩虹表与其他字典的区别仅在于条目存储的方法。彩虹表是针对哈希和密码进行优化的,因此在保持良好查找速度的同时实现了极佳的空间优化。但本质上,它只是一个字典。

当攻击者窃取您的密码哈希的长列表时,他可以快速检查其中是否有任何一项在彩虹表中。对于那些存在的密码哈希值,彩虹表还会包含从哪个字符串进行哈希的信息。

当然,有太多哈希值无法全部存储在彩虹表中。因此,如果一个哈希值不在特定的表中,黑客就没有办法了。但如果您的用户使用简单的英文单词并且您只对它们进行了一次哈希运算,则很可能良好的彩虹表会包含这个密码。


2
虽然并不是很流行的选择,但这正是我所寻找的。我对盐和密码哈希有些经验,但出于某种原因,直到今天我才听说过彩虹表攻击。所有这些答案都真正帮助澄清了它。谢谢! - Dusty
“and you have hashed them just once”是什么意思?我可以理解给密码加盐的价值,但是递归地将它们哈希n次(就像我有时看到的那样)有什么好处呢? - Jeach
1
@Jeach - 逐个检查每个密码会使暴力破解变慢,并且您需要使用考虑到递归哈希次数的彩虹表。 - Vilx-

15

当有人使用彩虹表来破解密码时,这种情况就会出现。

如果您担心这个问题,可以使用盐值。此外,还有一个Stack Overflow问题可以帮助您更好地理解盐值,比维基百科更易懂一些...


9

2

虽然我来晚了,但是我也知道彩虹表是一种攻击散列/无盐密码的方法。然而最近在Twitter上分享了http://codahale.com/how-to-safely-store-a-password/,根据你的需求和关注点不同,你可能无法通过加盐的方式来安全地存储密码。

希望这对你有所帮助。


2
总的来说,你加密了大量可能的短明文字符串(例如密码),并将加密值与明文一起存储。这使得查找明文变得(相对)简单,只需使用加密值进行查找即可。
这对于弱密码和/或未加盐的密码哈希最为有用。一个流行的例子是LAN Manager hash,它被用于Windows XP及以下版本中存储用户密码。
需要注意的是,即使是像LM哈希这样简单的预计算彩虹表,也需要大量的CPU时间来生成,并占用相当数量的空间(我记得大约是数十GB)。

2
彩虹表基本上允许某人存储大量易于计算的哈希值。
这使得破解您的散列密码变得容易,因为他们不必执行一堆哈希函数,工作已经完成,实际上只需要进行数据库查找。
对抗此类攻击的最佳方法是在密码中使用盐(随机字符)。例如,存储md5(password + salt)而非md5(password),甚至更好的是md5(salt + md5(password))。
即使使用彩虹表,也几乎不可能存储所有可能的加盐哈希值。
顺便说一下,显然,您必须将盐与哈希一起存储,以便您可以验证用户。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接