MD5:从全球最流行的哈希算法,到内核里最后一个优化实现也被砍掉,走了整整 30 年。
━━━ ━━━ ━━━
原文:Phoronix——*\"Linux 7.2 Gets Rid Of The Last Optimized MD5 Implementation\"*
作者:Michael Larabel
发表日期:2026年6月18日
━━━ ━━━ ━━━
一、原文翻译
Linux 内核已经删除了最后一个架构专用的优化 MD5 哈希算法实现。
虽然 MD5 曾广泛用于数据完整性校验,但其已知的碰撞漏洞已经存在了很多年——更准确地说,是几十年。值得庆幸的是,大多数软件已经弃用了 MD5,转而使用更安全的算法。对于那些仍在使用 MD5 的遗留场景,现代处理器上的通用代码路径已经足够高效,架构专用的实现已经没什么价值了。
去年,MIPS 和 SPARC 架构的 MD5 优化实现已被移除,理由是\"不值得保留了\"。PowerPC 当时也被标记为待移除,但一位 PowerPC 用户指出,他的组织仍在使用 MD5,并且从中获得了性能收益。不过那部分使用是通过 AF_ALG 接口和 libkcapi-hasher 实现的。
但随着 Linux 7.2 因安全原因加速弃用 AF_ALG,PowerPC 上优化 MD5 代码的使用场景也就不再适用了。对于那些想在更新的 Linux 内核上获得更快 MD5 的 PowerPC 用户来说,优化的内核实现不包含任何特权指令,完全可以在用户空间中无痛携带。
因此,随着 Linux 7.2 的加密库更新现已合并,PowerPC MD5 代码被删除——\"最后一款架构专用的 MD5 实现\"。
MD5 支持仍在内核中,只是作为通用实现继续存在——对于现代硬件和遗留用途来说已经\"足够好了\",且适用于所有 CPU 架构。
━━━ ━━━ ━━━
二、深度解读:为什么砍掉 MD5 优化实现是个历史性时刻?MD5 的 30 年兴衰简史
| 时间 | 事件 |
|---|---|
| 1992 | Ronald Rivest 设计 MD5,成为互联网事实标准 |
| 1996 | 首次发现压缩函数的碰撞------专家开始建议弃用 |
| 2004 | 王小云团队破解完整 MD5------一小时找到碰撞 |
| 2005 | 可在几小时内构造碰撞,US-CERT 建议停用 |
| 2007 | 可构造两个不同行为的可执行文件共享同一 MD5 |
| 2008 | 利用碰撞伪造 SSL 证书------MD5 正式\"密码学破灭\" |
| 2013 | 普通电脑不到一秒即可找到碰撞 |
| 2025 | Linux 砍掉 MIPS/SPARC 优化 MD5 |
| 2026 | Linux 7.2 砍掉 PowerPC MD5------最后一块阵地失守 |
这背后的三件事值得关注
1. 这其实是一个\"拖了 20 年的清理\"
MD5 的碰撞漏洞早在 1996 年就被发现。2004 年王小云团队已经能在一小时内构造碰撞。但直到 2026 年,Linux 内核里还留着最后一款优化实现。
这说明什么?\"知道不安全\"和\"真正停止使用\"之间,差了整整二十年。 即使是最活跃的开源项目,技术债务的清零也需要巨大的动力才能触发。
2. PowerPC 用户的坚持是故事最有意思的部分
去年砍 MIPS 和 SPARC 时,PowerPC 本来也在名单上。但一个有说服力的用户站了出来:他的组织确实还有 MD5 的需求。这不是什么\"还在用 Windows 95\"的段子——大企业的遗留系统就是这样,只要还能跑,没人愿意动。
而推动它最终被删的不是 MD5 本身的安全性,是 AF_ALG 接口的安全问题——一个更底层、更危险的接口。
3. AF_ALG 的死亡才是真正的推手
AF_ALG 是 Linux 内核的一个密码学套接字接口,2010 年引入。它让用户空间可以直接调用内核加密算法。听起来很美好,但实际上这是一个安全噩梦——内核开发者现在承认它是一个\"设计错误\"。
2026 年 4 月爆出的 CVE-2026-31431(Copy Fail),允许无权限的本地用户通过 AF_ALG 的 algif_aead 模块获得 root 权限,影响自 2017 年以来构建的所有内核。
这就是蝴蝶效应:一个给 AF_ALG 的致命漏洞 → AF_ALG 被弃用 → PowerPC 用户的 MD5 用例消失 → 最后的优化 MD5 实现被砍。
现在还在用 MD5 的,都是谁?
理论上,MD5 已经\"密码学破灭\"了,但某些场景仍然在用:
- 旧版软件兼容:一些企业级 ERP、银行系统的文件校验
- 非安全场景:非对抗性环境下的数据去重、一致性检查
- BT 种子/磁力链接:某些旧版协议仍依赖 MD5
说白了,在没有人故意攻击的环境里,MD5 依然\"够用\"——但这就像家里不上锁的门,平时没事,但一旦有人想进来,就毫无防备。
通用实现 vs 优化实现:有什么区别?
砍掉的是架构特定的优化实现(手写汇编代码,针对特定 CPU 做了调优),而不是 MD5 算法本身。
通用实现是 C 语言写的,现代 CPU 上跑 1GB/s 级吞吐量很容易——对于 MD5 仅存的使用场景来说绰绰有余。保留架构优化代码还需要维护,牵涉内核子系统的耦合,收益已经趋近于零。
━━━ ━━━ ━━━
三、一句话总结
Linux 7.2 砍掉最后一个架构专用 MD5 优化实现,不是因为 MD5 不安全——这件事大家知道 20 年了——而是因为它依附的 AF_ALG 接口自己先死了。
这才是内核开发的真实写照:技术债不会因为你\"想清理\"就被清理,它需要一个外部的引爆点。
━━━ ━━━ ━━━
*本文基于 Phoronix 2026年6月18日文章 \"Linux 7.2 Gets Rid Of The Last Optimized MD5 Implementation\",结合 MD5 历史演变和 AF_ALG 安全事件整理。*
Linux 内核"紧急阻断开关"(Killswitch)提案与 CopyFail/Dirty Frag 危机
【Debian 上安装 boost 编译出 fastcoll:生成两个相同 md5 值的二进制文件-哔哩哔哩】 https://b23.tv/DX6klY0