我正在阅读一些关于盐和密码哈希的文章,还有一些人提到彩虹攻击。什么是彩虹攻击以及防止它的最佳方法是什么?
答案 0 :(得分:63)
维基百科的文章有点难以理解。简而言之,您可以将Rainbow Table视为具有预先计算的哈希值的大型词典以及计算它们的密码。
Rainbow Tables和其他词典之间的区别仅在于如何存储条目的方法。 Rainbow表针对哈希和密码进行了优化,从而实现了极佳的空间优化,同时仍保持良好的查找速度。但实质上,它只是一本字典。
当攻击者从您那里窃取了一长串密码哈希值时,他可以快速检查是否有任何密码在Rainbow表中。对于那些,彩虹表也将包含他们被散列的字符串。
当然,有太多的哈希值可以将它们存储在彩虹表中。因此,如果哈希不在特定的表中,那么黑客就不走运了。但是如果你的用户使用简单的英文单词并且你只将它们哈希一次,那么好的彩虹表很可能会包含密码。
答案 1 :(得分:15)
当有人使用Rainbow table破解密码时。
如果您对此感到担心,则应使用Salt。还有一个Stack Overlow question可以帮助你比维基百科更好地理解盐......
答案 2 :(得分:9)
对于外行人来说这是useful article on Rainbow Tables。 (并不是说你是一个非专业人士,但它写得很好而且很简洁。)
答案 3 :(得分:2)
晚会但我也知道Rainbow Tables是一种攻击散列/无密码密码的方法。然而,最近在Twitter上http://codahale.com/how-to-safely-store-a-password/分享了{{3}},这取决于您的需求和担忧..您可能无法通过安全的密码存储方式。
我希望这对你有用。
答案 4 :(得分:1)
维基百科是你的朋友:
答案 5 :(得分:1)
一般来说,您加密了大量可能的短明文字符串(即密码),并将加密值存储在明文旁边。这样,当您拥有加密值时,只需简单地查找明文即可(相对)直接。
这对弱密码和/或无密码密码哈希最有用。一个流行的例子是LAN Manager hash,由Windows版本的XP用于存储用户密码。
请注意,即使像LM哈希这样简单的事情,预先计算的彩虹表也需要大量的CPU时间来生成并占用相当大的空间(大约10千兆字节IIRC)。
答案 6 :(得分:1)
Rainbow Tables基本上允许某人可行地存储大量预先计算的哈希值。
这样可以轻松破解散列密码,因为不是执行整堆哈希函数,而是已经完成了工作,他们实际上只需要进行数据库查找。
防止此类攻击的最佳方法是在密码中使用salt(随机字符)。即不存储md5(密码),而是存储md5(密码+盐),甚至更好的md5(salt + md5(密码))。
因为即使使用彩虹表,也几乎不可能存储所有可能的盐渍哈希。
BTW,显然你必须用你的哈希存储你的盐,以便你可以验证用户。