几乎所有处理密码和散列的指南、操作方法和参考资料都有一个用大字或粗体字表示的警告,说明如下:
SHA-1 和 MD5不安全,不应使用。
很公平,使用 SHA-256 或其他东西并不麻烦。但是,是否有任何上述弱点实际上被成功用于攻击的例子?这些漏洞使算法变弱了多少?
几乎所有处理密码和散列的指南、操作方法和参考资料都有一个用大字或粗体字表示的警告,说明如下:
SHA-1 和 MD5不安全,不应使用。
很公平,使用 SHA-256 或其他东西并不麻烦。但是,是否有任何上述弱点实际上被成功用于攻击的例子?这些漏洞使算法变弱了多少?
我不知道任何已知的在 SHA-1 中使用碰撞的攻击,但 MD5 碰撞可能在 2010 年就已经在攻击中使用了。2012 年,发现来自 Flame 攻击的恶意软件具有来自 Microsoft 的有效签名,这可能是由于 MD5 碰撞攻击。有关更多信息,请参阅http://blogs.technet.com/b/srd/archive/2012/06/06/more-information-about-the-digital-certificates-used-to-sign-the-flame-malware.aspx细节。
至于将 MD5 或 SHA-1 与密码一起使用:使用 MD5 或 SHA-1 简单地散列一些琐碎的密码,然后用 google 查找散列。例子:
password: "secret"
md5 (hex): "5ebe2294ecd0e0f08eab7690d2a6ee69"
sha1 (hex): "e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4"
谷歌上第一次点击MD5 哈希会向您显示密码,搜索SHA1 哈希时的第一次点击也是如此。因此,只要哈希没有加盐,就可以很容易地检测到典型的密码。
除此之外,即使是 SHA-256 也是一个糟糕的密码选择。这种散列算法被设计为速度很快,只会让暴力破解密码更容易。有关此主题的更多详细信息,请参阅sha256 + salt hashes for password storage 的安全性。
尤其是 MD5,现在被认为已破解是有充分理由的:
早在 2012 年就劫持了 Windows Update 系统的 MD5 哈希碰撞攻击被复制,只需 65 美分的云计算费用
进行攻击大约需要 10 个小时的 CPU 时间。这种特殊的攻击使用了一个选择的前缀攻击,这意味着你可以格式化你的数据以防止攻击起作用,但是可以做到这一点的事实表明你的散列的安全性不再在散列算法中找到,而是在您正在散列的数据格式(这是放置安全保证的一个非常糟糕的地方)。
火焰恶意软件使用了使用 MD5 的伪造 Microsoft 更新签名。当涉及到安全更新和补丁时,有问题的服务器被忽略了,Flame(也称为 sKyWIper)恶意软件的创建者利用这一点将他们的命令和控制服务器伪装成合法的微软更新服务器。然后它用它的模块感染了计算机,其中一个模块在源代码中被称为 Flame,因此得名。Crysys 实验室的报告链接在这里。
SHA-1 绝对已在已知攻击中被成功利用。查看 Whitehatsec 网站上的这篇出色的博客文章,该文章利用 SHA-1 进行 URL 签名请求https://blog.whitehatsec.com/hash-length-extension-attacks/。
至于密码存储,我可以根据个人经验说,使用 OCLHashcat 从 LDAP/LDIF 转储中破解 SHA1 crypt linux 哈希是微不足道的。单个 AMD 5970 gpu 的当前基准测试将 nsldap ({SHA}) 暴力破解为 3418.0 M/s,nsldaps ({SSHA}) 暴力破解为 3401.1 M/s,我曾使用标准在数小时内暴力破解 8 个字符密码的哈希值密码掩码。