1. 简介 (Introduction)
在开放计算和通信的世界中, 提供一种检查通过不可靠介质传输或存储的信息完整性的方法是首要需求。基于密钥提供此类完整性检查的机制通常称为"消息认证码 (message authentication codes, MAC)"。通常, 消息认证码在共享密钥的两方之间使用, 以验证这两方之间传输的信息。在本文档中, 我们提出了一种基于密码散列函数的 MAC 机制。这种机制称为 HMAC, 基于作者的工作 [BCK1], 其中提出并进行了密码学分析。我们参考该工作以了解 HMAC 的原理和安全分析的详细信息, 以及与其他密钥散列方法的比较。
HMAC 可以与任何迭代密码散列函数结合使用。MD5 和 SHA-1 是此类散列函数的例子。HMAC 还使用密钥来计算和验证消息认证值。这种构造背后的主要目标是:
-
无需修改即可使用现有的散列函数。特别是在软件中性能良好且代码可免费广泛获取的散列函数。
-
保留散列函数的原始性能, 不产生显著的性能下降。
-
以简单的方式使用和处理密钥。
-
基于对底层散列函数的合理假设, 对认证机制的强度有充分理解的密码学分析。
-
允许在发现或需要更快或更安全的散列函数时轻松替换底层散列函数。
本文档使用通用密码散列函数 (用 H 表示) 规定了 HMAC。HMAC 的具体实例化需要定义特定的散列函数。此类散列函数的当前候选包括 SHA-1 [SHA]、MD5 [MD5]、RIPEMD-128/160 [RIPEMD]。HMAC 的这些不同实现将分别表示为 HMAC-SHA1、HMAC-MD5、HMAC-RIPEMD 等。
注意: 截至本文档撰写之日, MD5 和 SHA-1 是使用最广泛的密码散列函数。MD5 最近被证明容易受到碰撞搜索攻击 [Dobb]。这种攻击和其他目前已知的 MD5 弱点不会损害本文档中规定的 HMAC 中 MD5 的使用 (参见 [Dobb]); 然而, SHA-1 似乎是一个密码学上更强的函数。截至目前, 对于 MD5 的卓越性能至关重要的应用, 可以考虑在 HMAC 中使用 MD5。无论如何, 实现者和用户需要了解有关这些密码散列函数的可能密码分析发展, 以及最终需要替换底层散列函数的情况。(有关 HMAC 安全性的更多信息, 请参见第 6 节。)