引言
MD5曾是最常用的哈希函数之一,但随着密码学的发展,其安全性已被严重削弱。本文将详细阐述MD5被弃用的原因,包括已知的漏洞和攻击方式。
主要安全问题
1. 碰撞攻击
碰撞是指找到两个不同的输入,产生相同的哈希输出。2004年,王小云教授提出了一种高效的MD5碰撞攻击方法,可以在普通计算机上快速生成碰撞对。2007年,研究人员进一步改进了攻击,使得生成碰撞的时间缩短到秒级。这使得攻击者可以伪造数字签名、恶意软件与合法文件具有相同MD5值等。
2. 长度扩展攻击
MD5的设计使其易受长度扩展攻击:在知道 H(message) 但不知道 message 的情况下,攻击者可以计算出 H(message || padding || extra)。这对使用 H(secret || message) 构造的MAC(消息认证码)构成威胁。
3. 彩虹表与字典攻击
由于MD5计算速度快,且无内置加盐机制,攻击者可以预计算大量常见密码的哈希值(彩虹表),从而快速反向查找原始密码。虽然这不是MD5本身的数学弱点,但在密码存储场景中使其非常脆弱。
4. 已知碰撞示例
研究人员已构造出具有实际意义的碰撞实例,例如两个不同内容的可执行文件具有相同MD5值,或两个不同内容的X.509证书拥有相同MD5签名。这直接破坏了数字签名的可信基础。
行业弃用情况
- 2011年,RFC 6151明确建议停止在数字签名中使用MD5。
- 主流浏览器如Chrome、Firefox已不再接受使用MD5签名的SSL证书。
- NIST将MD5从FIPS标准中移除,推荐使用SHA-2或SHA-3。
- 许多软件包管理器和下载站点开始提供更安全的SHA-256校验和代替MD5。
结论
由于碰撞攻击的实际可行性,MD5已不适合任何需要抗碰撞性的安全场景,如数字签名、证书、密码存储等。对于完整性校验等非对抗性场景,虽然仍可使用,但建议迁移至更安全的哈希函数(如SHA-256、SHA-3)。