MD5 的耐人寻味案例
MD5 是一种已有数十年历史的密码学哈希函数,长期以来在安全上被认为“已经坏掉”,但在数字取证、法律、基因组学和云存储等领域仍被广泛用于文件识别和完整性校验。评论者争论这种做法是否可接受,因为 MD5 容易受到碰撞攻击(两个不同输入共享同一哈希),但通常仍被认为对更苛刻的第二原像攻击有抵抗力;同时也指出,许多现实工作流更依赖法律程序和上下文,而不是密码学保证。另一些人则认为,在更快、更强且经过 NIST 认可的替代方案如 SHA‑2、SHA‑3 或 BLAKE3 已经普遍可用且易于采用的情况下,继续使用 MD5 只是多余的技术债务。
MD5 当今的角色
- 许多评论者仍然把 MD5 当作一种快速、无处不在的 128 位校验和,用于文件完整性、去重和 ID,明确地 不是 作为密码学哈希。
- 也有人认为,“校验和”这类用途会随着时间悄悄变得与安全相关,因此默认使用现代密码学哈希更稳妥。
碰撞、生日界限与原像攻击
- 反复有人澄清,MD5 在抗碰撞方面已经严重破坏(很容易构造两个不同输入得到相同哈希),并且有大量实际演示(PDF/NES 混合体、图像“quine”等)。
- 强调了以下区别:
- 碰撞攻击:攻击者同时控制两个消息。
- 第二原像攻击:攻击者必须为 给定 的消息寻找一个新的、与之碰撞的消息;这类攻击要困难得多,目前对 MD5 仍然不实用。
- 对生日问题存在一些混淆(128 位碰撞到底需要约 2^64 还是 2^128 次尝试);多条回复解释了标准的 2^64 生日界限,同时也指出在实践中真正 找到 碰撞还会受到存储和算法限制。
性能与替代哈希
- 一些帖子声称 MD5 更快;另一些则反驳说,在带有 SHA 指令的现代 CPU 上,SHA‑256 可以与 MD5 持平甚至更快,尤其是在使用 OpenSSL 的常见工具链中。
- 按使用场景提出的替代方案:
- SHA‑256(以及截断的 SHA‑256)可作为近乎直接替换的方案,支持广泛,并且符合 NIST。
- SHA‑3 和 BLAKE2/BLAKE3 适合需要更强性质或并行性的场景,不过 SHA‑3 缺乏广泛的硬件加速。
- 非加密校验和(CRC32、Adler32)只被认为适合短程错误检测,不适合大规模文件识别。
法律与取证背景
- 许多法律/取证从业者把 MD5 视为更广泛证据流程中的一个环节;证据保全链主要由法律规则而非数学来保障。
- 普遍共识是,伪造证据更多取决于人为因素、系统访问权限和叙事可信度,而不只是哈希选择本身。
- 也有人认为,MD5 已知的弱点可能削弱其在证据上的说服力,而未来的攻击或开创先例的案件可能迫使仓促迁移;另一些人则认为现实风险很小且可控。
固化、可用性与务实主义
- MD5 仍然存在于基因组学、盗版档案、去重工具、Azure Blob 完整性检查,甚至某些软件的密码存储中。
- 迁移成本、兼容性,以及 MD5 较短的 32 位十六进制输出,都是它持续存在的实际原因。
- 几位评论者认为:既然安全哈希“便宜得足够用”,而且错误威胁模型很常见,最简单的规则就是停止为 MD5 辩护,直接在任何地方使用现代哈希。