作者:Conrado Gouvêa
23 月 1 日,谷歌和 CWI 阿姆斯特丹研究中心的研究人员宣布计算出了 SHA-1 哈希函数的第一次碰撞。这篇文章将对哈希函数和 SHA-XNUMX 进行简要解释,以了解此消息的影响。
哈希函数
哈希函数是一种机制,它根据给定的任意一组数据(例如文件)计算出一个“加密摘要”:一个唯一标识该数据的短字节序列。例如,它用于数字签名:不是直接签署文档(由于签名方案的限制,这是不可能的,因为签名方案不接受非常大的数据),而是计算其哈希值,然后进行签署。只要哈希函数是安全的,这种方法就是安全的:也就是说,很难生成具有相同哈希值的不同文档(碰撞攻击),并且很难找到具有特定哈希值的文档(反转攻击)。例如,碰撞攻击会允许攻击者将您数字签名的合同交换为具有不同条款的另一个合同。
针对哈希函数的攻击
总是有可能通过暴力手段进行碰撞攻击。例如,对于大小为 256 位的哈希函数,可以通过 2^128 次计算进行暴力破解。然而,这是一个巨大的数字,这样的计算是完全不可行的。 SHA-1 长度为 160 位,因此暴力攻击需要 2^80 次计算。这样的努力虽然规模小得多,但仍然是不可行的。
2007 年发现针对 SHA-1 的碰撞攻击需要 2^69 次计算。在密码学中,当发现比暴力破解更有效的攻击时,通常认为该方案不安全。然而,当时并没有足够的资源来真正实施这次攻击,因此这仍然只是一次理论上的攻击。正因为如此,尽管研究人员警告说有必要迁移到其他哈希函数(例如 SHA-1 或 SHA-256),但 SHA-512 仍然在许多应用程序中继续使用,因为对于这些函数,没有比暴力破解更好的攻击方式,并且暴力破解攻击是完全不可行的。
现在,上述研究人员结合理论进步(将攻击的复杂度降低到 2^63 次计算)和技术进步(谷歌基础设施中可用的大量 CPU 和 GPU),最终能够在实践中执行攻击,生成两个具有相同 SHA-1 哈希值的 PDF 文件。这些计算需要 6500 个 CPU 和 110 个 GPU 连续工作一年。
MD5
为了理解与 SHA-1 相关的事件流程,值得回顾一下 MD5 的历史,MD128 是 SHA-1 的前身,是一个 2004 位哈希函数。 2005年,人们发现了一种碰撞攻击,但仍然只是理论上的。 2008年,研究人员在实践中进行了该攻击,生成了两个具有相同哈希值的证书。然而,攻击仍然受到限制,并且证书仅在公钥上有所不同,这在实践中不允许攻击。 2012 年,一种改进的攻击被披露,可以生成两个具有相同哈希值的证书,一个合法,一个恶意,并且该恶意证书能够颁发任何其他证书。最后,在 5 年,人们发现 Flame 恶意软件利用 MDXNUMX 碰撞破坏 Windows 更新机制来感染中东网络上的计算机。
因此,即使在第一次碰撞计算 7 年后(我们现在使用 SHA-1),仍然可以对 MD5 进行攻击,因为它仍然被许多系统接受。因此,可以合理地预测 SHA-1 将在相当长的一段时间内继续使用,并且在未来几年内将受到主动攻击;但预计从 MD5 中吸取的教训将减少开发人员的响应时间。
影响
如上所述,数字签名应用程序可能会受到伪造具有有效签名的文档的攻击。 SHA-1 碰撞演示利用 PDF 格式的可塑性,能够从任意两幅图像生成两个具有相同 SHA-1 的 PDF 文档,从而利用单次碰撞的优势。这样,就已经有一个在线 PDF 碰撞生成器: https://alf.nu/SHA1.
然而,在数字证书基础设施中,由于攻击的技术限制,影响并不是立即的:它能够在两个具有相同前缀和后缀的文档之间产生冲突,而仅在两个内部数据块上有所不同;要攻击证书,需要允许任意前缀的攻击。然而,攻击的完善只是时间问题。
SHA-1 的当前使用情况
一方面,由于事先了解到 SHA-1 的漏洞,许多应用程序已经从 SHA-1 迁移。此次迁移的一个重要因素是浏览器开发人员(Chrome、Firefox、Edge)决定不将使用 SHA-1 的连接标记为安全的。因此,目前最受欢迎的 1 万个网站中没有一个使用 SHA-XNUMX。 (https://www.trustworthyinternet.org/ssl-pulse/)
另一方面,许多其他应用程序仍然使用 SHA-1,例如 Git 文件版本控制系统。此类应用程序现在容易受到攻击,应尽快通过将 SHA-1 迁移到 SHA-256、SHA-512 或 SHA-3 来修复。在某些涉及硬件的情况下,迁移实际上是不可能的,例如某些处理器中使用的 TPM 芯片版本 1.2 可以获得安全启动等功能。当遇到冲突时,软件也会停止正常工作,这就是 SVN 文件版本控制系统发生的情况: https://arstechnica.com/security/2017/02/watershed-sha1-collision-just-broke-the-webkit-repository-others-may-follow/
该怎么办
作为最终用户:您只能希望应用程序能够得到更新。如上所述,浏览器已经拒绝将使用 SHA-1 的连接标记为安全;始终注意地址栏中的安全指示器。
作为开发人员:检查任何产品中是否正在使用 SHA-1 并计划迁移。调查是否有任何证书使用它;如果是这样;使用 SHA-256 或类似算法颁发新证书。攻击者还编写了能够检测碰撞尝试的软件,并指出攻击会在数据中留下可检测的痕迹(https://github.com/cr-marcstevens/sha1collisiondetection)。带有 SHA-1 的 HMAC 仍然被认为是安全的,因为它依赖于针对哈希反转攻击(仍然不可行)的安全性,而不是碰撞攻击;无论如何,我们始终建议迁移。