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)
- 1. Executive Summary (执行摘要)
- 2. Terminology and Notation (术语和符号表示)
- 3. MD5 Algorithm Description (MD5 算法描述)
- 3.1 Step 1. Append Padding Bits (步骤1. 追加填充位)
- 3.2 Step 2. Append Length (步骤2. 追加长度)
- 3.3 Step 3. Initialize MD Buffer (步骤3. 初始化 MD 缓冲区)
- 3.4 Step 4. Process Message in 16-Word Blocks (步骤4. 以16字块处理消息)
- 3.5 Step 5. Output (步骤5. 输出)
- 4. Summary (总结)
- 5. Differences Between MD4 and MD5 (MD4 和 MD5 之间的差异)
- References (参考文献)
附录 (Appendices)
其他章节 (Additional Sections)
相关资源 (Related Resources)
- 官方原文: RFC 1321
- 官方页面: RFC 1321 DataTracker
- 勘误表: RFC Editor Errata
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 之间的差异:
-
添加了第四轮.
-
每个步骤现在都有一个唯一的加法常数.
-
第 2 轮中的函数 g 从 (XY v XZ v YZ) 更改为 (XZ v Y not(Z)), 以使 g 不那么对称.
-
每个步骤现在都加入前一步骤的结果. 这促进了更快的"雪崩效应 (avalanche effect)".
-
在第 2 轮和第 3 轮中访问输入字的顺序已更改, 以使这些模式彼此不太相似.
-
每轮中的移位量已经过近似优化, 以产生更快的"雪崩效应". 不同轮次中的移位是不同的.
Security Considerations (安全考虑)
本备忘录中讨论的安全级别被认为足以实现基于 MD5 和公钥密码系统 (public-key cryptosystem) 的非常高安全性的混合数字签名方案.