MD5(消息摘要算法第5版)

MD5
Message-Digest Algorithm 5
⚠ 已被密码学破解
设计者
Ronald L. Rivest (MIT)
首次发布
1992年4月
类别
密码学哈希函数
输出长度
128 bit (16 字节)
分组大小
512 bit
结构
Merkle-Damgård
轮数
4 × 16 = 64
速度
~3.5 GB/s
标准
RFC 1321
前身
MD4 (1990)
安全状态
已破解

MD5(Message-Digest Algorithm 5)是由 MIT 教授 Ronald L. Rivest 于 1992 年设计的密码学哈希函数,能将任意长度的消息映射为 128 位(16 字节)的摘要值。MD5 是 MD 系列算法的最终版本,其前身 MD2 和 MD4 均已被破解。

⚠ 安全警告:MD5 已于 2004 年被王小云教授团队证明存在实用的碰撞攻击。2008 年,研究人员利用 MD5 碰撞伪造了 CA 数字证书。MD5 不应用于任何安全敏感场景,包括数字签名、SSL/TLS 证书和密码存储。
算法描述

MD5 的处理流程如下:

  1. 填充:将消息长度填充至 512 bit (64 字节) 的整数倍。先追加一个 1 位,再填充 0 位,最后在末尾附加原始消息的 64 位长度。
  2. 初始化:设置四个 32 位状态变量 A、B、C、D 为固定初始值。
  3. 压缩:对每个 512 位分组执行 64 步运算,分为 4 轮(每轮 16 步),每轮使用不同的辅助函数:
    • F(B,C,D) = (B∧C)∨(¬B∧D) — 第1轮
    • G(B,C,D) = (B∧D)∨(C∧¬D) — 第2轮
    • H(B,C,D) = B⊕C⊕D — 第3轮
    • I(B,C,D) = C⊕(B∨¬D) — 第4轮
  4. 输出:将最终的 A、B、C、D 值串联,得到 128 位摘要。
MD5("") = d41d8cd98f00b204e9800998ecf8427e MD5("abc") = 900150983cd24fb0d6963f7d28e17f72 MD5("hello") = 5d41402abc4b2a76b9719d911017c592 MD5("Hello") = 8b1a9953c4611296a827abf8c47804d7 128 bit → 表示为 32 个十六进制字符
安全性分析
安全属性状态说明
抗原像攻击理论可行2013年Sasaki等人提出 2123.4 的攻击,虽优于暴力但不可行
抗第二原像攻击理论可行长消息存在 2126 的攻击
抗碰撞攻击已破解2004年王小云团队实现 239 复杂度的碰撞攻击
破解历史
  • 1996年:Dobbertin 发现 MD5 的伪碰撞(相同消息不同初始值产生相同哈希)
  • 2004年:王小云团队在 CRYPTO 2004 上发布 MD5 完整碰撞攻击,复杂度约 239
  • 2006年:Vlastimil Klima 发布改进攻击,普通笔记本电脑 1 分钟内可找到碰撞
  • 2008年:Alexander Sotirov 等利用 MD5 碰撞伪造了 rogue CA 证书,可以冒充任何网站
  • 2012年:Flame 恶意软件利用 MD5 碰撞伪造微软数字签名
当前使用状况

尽管已被破解,MD5 仍被广泛使用于非安全场景:

  • 文件完整性快速校验(如 Linux 发行版的 ISO 校验)
  • 数据库中的数据去重和快速比较
  • 版本控制系统中的变更检测(如 Git 使用 SHA-1 而非 MD5)
  • 一些遗留系统的兼容性要求

推荐替代:SHA-256(安全场景)、BLAKE2b-256(高性能安全场景)、xxHash3(非安全场景)。

参考文献
  1. Rivest, R. (1992). "The MD5 Message-Digest Algorithm". RFC 1321. doi:10.17487/RFC1321.
  2. Wang, X., Yu, H. (2005). "How to Break MD5 and Other Hash Functions". EUROCRYPT 2005, LNCS 3494, pp. 19-35.
  3. Sotirov, A., Stevens, M., et al. (2008). "MD5 considered harmful today: Creating a rogue CA certificate". Chaos Communication Congress 25C3.
  4. Sasaki, Y., Aoki, K. (2009). "Finding preimages in full MD5 faster than exhaustive search". EUROCRYPT 2009.