彩虹表:你的密码的最糟糕的噩梦

不要让他们可爱的名字欺骗你,这些东西是可怕的。

虽然您可能会将彩虹桌想象成折衷主义色彩丰富的家具,但这些并不是我们将要讨论的。 我们谈论的彩虹表被用来破解密码,并且是黑客不断增长的武器库中的又一个工具。

彩虹桌怎么样? 怎么能有这样一个可爱和可爱的名字是如此有害?

彩虹桌后面的基本概念

我是一个刚插入服务器或工作站的拇指驱动器,重新启动它,并运行一个程序,该程序将包含用户名和密码的安全数据库文件复制到我的拇指驱动器。

该文件中的密码是加密的,所以我无法阅读它们。 我将不得不破解文件中的密码(或者至少是管理员密码),以便我可以使用它们访问系统。

什么是破解密码的选项? 我可以尝试使用蛮力密码破解程序,比如John the Ripper,它在密码文件中减掉了密码,试图迭代地猜测每个可能的密码组合。 第二个选项是加载包含数十万常用密码的密码破解字典,并查看它是否有任何匹配。 如果密码足够强大,这些方法可能需要几周,几个月甚至几年。

当对系统“尝试”密码时,使用加密 “散列” 密码,以便实际密码永远不会通过通信线路以明文形式发送。 这可以防止窃听者拦截密码。 密码的散列通常看起来像一堆垃圾,通常与原始密码的长度不同。 你的密码可能是“shitzu”,但密码的散列看起来像“7378347eedbfdd761619451949225ec1”。

为了验证用户,系统在客户端计算机上获取由密码散列函数创建的散列值,并将其与服务器上的表中存储的散列值进行比较。 如果哈希匹配,那么用户将被验证并授予访问权限。

散列密码是单向函数,这意味着您无法解密散列以查看密码的明文是什么。 创建哈希后,没有解密哈希的密钥。 如果你愿意,没有“解码器环”。

密码破解程序的工作方式与登录过程类似。 破解程序首先获取明文密码,通过散列算法(如MD5)运行它们,然后将散列输出与被盗密码文件中的散列进行比较。 如果它发现匹配,那么程序破解了密码。 正如我们之前所说,这个过程可能需要很长时间。

进入彩虹表

彩虹表基本上是大量预先计算的表格,其中填充了与预先匹配的可能的明文密码的散列值。 彩虹表实质上允许黑客反转散列函数以确定明文密码可能是什么。 有可能两个不同的密码导致相同的散列,因此找出原始密码是什么并不重要,只要它具有相同的散列即可。 明文密码甚至可能不是由用户创建的相同密码,但只要哈希匹配,那么它与原始密码的内容无关。

彩虹表的使用可以使密码在很短的时间内与强力方法相比被破解,然而,折衷是需要大量的存储空间(有时是Terabytes)来保存彩虹表本身,这些日子的存储是充足且便宜的,所以这种折衷不像十年前那样大,当时TB级驱动器不是您可以在当地百思买购买的东西。

黑客可以购买预先计算的彩虹表,以破解易受攻击的操作系统(如Windows XP,Vista,Windows 7以及使用MD5和SHA1作为其密码散列机制的应用程序(许多Web应用程序开发人员仍使用这些散列算法))的密码。

如何保护自己免受基于彩虹表的密码攻击

我们希望对每个人都有更好的建议。 我们想说一个更强的密码会有帮助,但这不是真的,因为密码的弱点不是问题,而是用于加密密码的哈希函数的弱点。

我们可以给用户的最好建议是远离将您的密码长度限制为短字符的Web应用程序。 这是脆弱的老派密码认证例程的明显迹象。 扩展的密码长度和复杂性可能有所帮助,但不是保证形式。 密码越长,Rainbow Tables就越需要破解密码,但拥有大量资源的黑客仍然可以实现这一目标。

我们关于如何防御彩虹表的建议真的适用于应用程序开发人员和系统管理员。 当涉及到保护用户免受这种攻击时,他们处于第一线。

以下是一些有关防御彩虹表攻击的开发人员提示:

  1. 请勿在密码散列函数中使用MD5或SHA1。 MD5和SHA1是过时的密码散列算法,并且大多数用于破解密码的彩虹表都是针对使用这些散列方法的应用程序和系统构建的。 考虑使用更现代的散列方法,如SHA2。
  2. 在密码散列例程中使用密码“Salt”。 将密码Salt添加到您的密码散列函数将有助于防止彩虹表在您的应用程序中用于破解密码。 要查看一些关于如何使用密码盐来帮助您的应用程序“防虹”的编码示例,请查看WebMasters By Design站点,该站点上有关于该主题的精彩文章。

如果你想看看黑客使用Rainbow Tables如何执行密码攻击,你可以阅读这篇关于如何使用这些技术来恢复自己的密码的优秀文章