【发布时间】:2009-06-18 13:49:05
【问题描述】:
我正在阅读一些关于盐和密码哈希的文章,一些人提到了彩虹攻击。究竟什么是彩虹攻击?预防它的最佳方法是什么?
【问题讨论】:
标签: cryptography saltedhash rainbowattack
我正在阅读一些关于盐和密码哈希的文章,一些人提到了彩虹攻击。究竟什么是彩虹攻击?预防它的最佳方法是什么?
【问题讨论】:
标签: cryptography saltedhash rainbowattack
维基百科的文章有点难以理解。简而言之,您可以将彩虹表视为一个包含预先计算的哈希值和计算它们的密码的大型字典。
Rainbow Tables 与其他字典的区别仅在于条目的存储方式。 Rainbow 表针对哈希和密码进行了优化,因此在保持良好查找速度的同时实现了极大的空间优化。但本质上,它只是一本字典。
当攻击者从您那里窃取一长串密码哈希时,他可以快速检查其中是否在彩虹表中。对于那些,Rainbow Table 也将包含它们是从哪个字符串进行哈希处理的。
当然,散列太多了,无法将它们全部存储在彩虹表中。因此,如果哈希不在特定表中,那么黑客就不走运了。但是,如果您的用户使用简单的英文单词并且您只对它们进行了一次哈希处理,那么好的彩虹表很有可能包含密码。
【讨论】:
当有人使用Rainbow table 来破解密码时。
如果你担心这个,你应该使用Salt。还有一个Stack Overlow question 可以帮助你比维基百科更好地理解盐......
【讨论】:
这是外行人士的useful article on Rainbow Tables。 (不是说你是外行,但写得很好,简洁。)
【讨论】:
一般来说,您加密了大量可能的短明文字符串(即密码),并将加密值与明文一起存储。当您拥有加密值时,这使得(相对)简单地查找明文。
这对于弱和/或未加盐的密码哈希最有用。一个流行的例子是LAN Manager hash,被 Windows 至 XP 的版本用来存储用户密码。
请注意,即使像 LM 哈希这样简单的东西,预先计算的彩虹表也需要大量的 CPU 时间来生成并占用相当多的空间(大约 10 千兆字节的 IIRC)。
【讨论】:
Rainbow Tables 基本上允许某人存储大量预先计算的哈希值。
这使得破解您的散列密码变得容易,因为无需执行一大堆散列函数,这项工作已经完成,他们实际上只需要进行数据库查找。
针对此类攻击的最佳保护措施是在密码中使用盐(随机字符)。即不是存储 md5(password),而是存储 md5(password + salt),甚至更好的 md5(salt + md5(password))。
由于即使使用彩虹表,也几乎不可能存储所有可能的加盐哈希。
顺便说一句,显然您必须将您的盐与您的哈希一起存储,以便您可以对用户进行身份验证。
【讨论】:
聚会迟到了,但我也知道 Rainbow Tables 是一种攻击散列/未加盐密码的方法。然而,最近在 Twitter 上分享了@987654321@,这取决于您的需求和顾虑。您可能无法安全地存储密码。
我希望这对你有用。
【讨论】:
维基百科是你的朋友:
【讨论】: