代码之家  ›  专栏  ›  技术社区  ›  Dusty

彩虹攻击到底是什么?[关闭]

  •  52
  • Dusty  · 技术社区  · 16 年前

    我读了一些关于盐和密码散列的文章,还有一些人提到彩虹攻击。彩虹攻击到底是什么?最好的预防方法是什么?

    7 回复  |  直到 10 年前
        1
  •  63
  •   laalto    16 年前

    维基百科的文章有点难理解。简而言之,你可以把彩虹表看作是一个大字典,里面有预先计算好的哈希值和密码。

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

    当攻击者从您那里窃取一长串密码散列时,他可以快速检查其中是否有任何一个在彩虹表中。对于那些是的,彩虹表也将包含从中散列出来的字符串。

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

        2
  •  15
  •   Community CDub    8 年前

    当有人使用 Rainbow table 破解密码。

    如果你担心这个,你应该用 Salt . 还有一个 Stack Overlow question 这可能有助于你比维基百科更好地理解salt…

        3
  •  9
  •   Kieran Hall    16 年前

    这是一个 useful article on Rainbow Tables 对于非专业人士。(不是说你是外行,而是写得很好,很简洁。)

        4
  •  2
  •   fergjo    14 年前

    参加派对很晚,但我也知道彩虹表是一种攻击哈希/未加安全保护的密码的方法。但是最近在Twitter上 http://codahale.com/how-to-safely-store-a-password/ 是共享的,取决于您的需要和关注。您可能无法用盐来保护密码存储的安全。

    我希望这对你有帮助。

        5
  •  1
  •   TWA    16 年前
        6
  •  1
  •   Colin Pickard    16 年前

    一般来说,您可以加密大量可能的短明文字符串(即密码),并将加密的值存储在明文旁边。这使得在拥有加密值的情况下简单地查找纯文本变得相对简单。

    这对于弱密码散列和/或未加保护的密码散列最有用。一个流行的例子是 LAN Manager hash ,由Windows版本至多XP用于存储用户密码。

    注意,即使是像lm散列这样简单的东西,一个预先计算的彩虹表也需要花费大量的CPU时间来生成并占用相当大的空间(大约10s的千兆字节IIRC)。

        7
  •  1
  •   Jonathan Maddison    16 年前

    彩虹表基本上允许人们可行地存储大量预先计算的哈希。

    这使得破解散列密码变得容易,因为这项工作已经完成,而不是执行一整堆散列函数,它们实际上只需要进行数据库查找。

    防止此类攻击的最佳保护是在密码中使用salt(随机字符)。也就是说,不存储MD5(密码),而是存储MD5(密码+salt),或者更好的MD5(salt+md5(密码))。

    因为即使有彩虹桌,也几乎不可能存储所有可能的盐散列。

    顺便说一句,显然您必须将盐存储在哈希表中,这样您就可以对用户进行身份验证。

    推荐文章