对于 MD5,没有一个有信誉又有能力的人会在抗碰撞性很重要的环境中使用它。对于 SHA-1,它正在被逐步淘汰;SHA-1 中断在发布时并不实用,直到现在才考虑在需要抗碰撞性的地方逐步淘汰它变得很重要。事实上,它正在被淘汰;例如,带有 SHA-1 的长期 TLS 证书不再在 Chrome 中工作,以促使人们更改为 SHA-2。但是,它实际上还没有被破坏,所以现在可以接受。
之所以没有立即放弃所有内容,是因为安全性涉及权衡。您不会因为可能在十年内导致实际攻击的原因而放弃主要标准并使所有内容与庞大的安装基础不兼容。兼容性很重要。
此外,对于许多用途,MD5 和 SHA-1 根本没有破解。它们都有抗碰撞性的弱点,这意味着攻击者可以创建两条散列到同一事物的消息。既不能抵抗原像抵抗(给定哈希,找到产生该哈希的东西),也不能抵抗第二原像抵抗(给定消息,找到具有相同哈希的不同消息),或(它们的压缩函数)作为伪随机职能。这意味着像 HMAC-MD5 这样的结构仍然是安全的,因为它不依赖于被破坏的 MD5 的属性。当然,不太理想,但请参阅上面的“如果它仍然安全,兼容性很重要”。
无论如何,通过散列检查文件完整性几乎总是毫无意义的;除非散列是通过比文件更安全的通道发送的,否则您可以像篡改文件一样容易地篡改散列。但是,如果散列的发送比文件更安全,MD5 和 SHA-1 仍然能够保护文件完整性。因为攻击者对合法文件没有任何影响(并且需要零影响才能真正安全),所以创建具有相同哈希值的新文件需要破坏第二个原像抗性,而没有人对 MD5 或SHA-1。
请注意完整性检查和证书之间的区别。证书由 CA 从用户创建的 CSR 颁发;攻击者可以对实际的证书内容产生巨大的影响,因此碰撞攻击允许攻击者创建一个合法的和一个虚假的证书碰撞,获得合法的证书,并在伪造的证书上使用签名。相比之下,在文件完整性方面,攻击者通常对合法文件的控制为零,因此需要与给定文件发生冲突,这要困难得多(据我们所知,这不能用 MD5 完成)。