跳到主要内容

RFC 1321 - MD5 消息摘要算法 (The MD5 Message-Digest Algorithm)

  • 状态: Informational
  • 发布日期: April 1992
  • Stream: IETF
  • 勘误: 无勘误

本备忘录的状态 (Status of this Memo)​

本备忘录为互联网社区提供信息. 它不指定任何互联网标准. 本备忘录的分发不受限制.


致谢 (Acknowledgements)​

我们要感谢 Don Coppersmith, Burt Kaliski, Ralph Merkle, David Chaum 和 Noam Nisan 提供的众多有益的评论和建议.


目录 (Table of Contents)​

附录 (Appendices)​

其他章节 (Additional Sections)​




2. Terminology and Notation (术语和符号表示)​

在本文档中, "字 (word)" 是一个 32 位的量, "字节 (byte)" 是一个 8 位的量. 位序列可以自然地解释为字节序列, 其中每个连续的 8 位组被解释为一个字节, 每个字节的高位 (最高有效位) 在前. 类似地, 字节序列可以解释为 32 位字序列, 其中每个连续的 4 字节组被解释为一个字, 低位 (最低有效位) 字节在前.

令 x_i 表示 "x sub i". 如果下标是一个表达式, 我们用大括号将其括起来, 如 x_{i+1}. 类似地, 我们使用 ^ 表示上标 (幂运算), 因此 x^i 表示 x 的 i 次方.

令符号 "+" 表示字的加法 (即模 2^32 加法). 令 X <<< s 表示通过将 X 循环左移 (旋转) s 位位置获得的 32 位值. 令 not(X) 表示 X 的按位补码, 令 X v Y 表示 X 和 Y 的按位 OR. 令 X xor Y 表示 X 和 Y 的按位 XOR, 令 XY 表示 X 和 Y 的按位 AND.



4. Summary (总结)​

MD5 消息摘要算法易于实现, 并为任意长度的消息提供"指纹"或消息摘要. 据推测, 找到具有相同消息摘要的两个消息的难度约为 2^64 次操作, 而找到具有给定消息摘要的任何消息的难度约为 2^128 次操作. MD5 算法已经过仔细审查以发现弱点. 然而, 它是一个相对较新的算法, 进一步的安全性分析当然是合理的, 就像任何此类新提案的情况一样.



5. Differences Between MD4 and MD5 (MD4 和 MD5 之间的差异)​

以下是 MD4 和 MD5 之间的差异:

  1. 添加了第四轮.

  2. 每个步骤现在都有一个唯一的加法常数.

  3. 第 2 轮中的函数 g 从 (XY v XZ v YZ) 更改为 (XZ v Y not(Z)), 以使 g 不那么对称.

  4. 每个步骤现在都加入前一步骤的结果. 这促进了更快的"雪崩效应 (avalanche effect)".

  5. 在第 2 轮和第 3 轮中访问输入字的顺序已更改, 以使这些模式彼此不太相似.

  6. 每轮中的移位量已经过近似优化, 以产生更快的"雪崩效应". 不同轮次中的移位是不同的.



Security Considerations (安全考虑)​

本备忘录中讨论的安全级别被认为足以实现基于 MD5 和公钥密码系统 (public-key cryptosystem) 的非常高安全性的混合数字签名方案.