B.1.1 HMAC-SHA-1
HMAC-SHA-1 是对应于基于 SHA-1 哈希函数 [NIST180] 的 HMAC 消息认证码 [RFC2104] 的伪随机函数.伪随机函数是计算消息认证码的同一函数, 具有全长输出.(伪随机函数 PRF 的第一个参数用作 HMAC 的 "key" (密钥), 第二个参数用作 HMAC 的 "text" (文本).在 PBKDF2 的情况下, "key" 因此是密码, "text" 是盐值.) HMAC-SHA-1 具有可变密钥长度和 20 个八位字节 (160 位) 的输出值.
尽管 HMAC-SHA-1 的密钥长度本质上是无界的, 但伪随机函数输出的有效搜索空间可能受到函数结构的限制.特别是, 当密钥长于 512 位时, HMAC-SHA-1 将首先将其哈希为 160 位.因此, 即使从密钥产生由几个伪随机函数输出组成的长派生密钥, 派生密钥的有效搜索空间最多也是 160 位.尽管其他密钥大小的具体限制取决于 HMAC 构造的细节, 但为了保守起见, 应该假设其他密钥大小的有效搜索空间也限制为 160 位.
(160 位的限制通常不应在基于密码的密码学的情况下构成实际限制, 因为密码的搜索空间不太可能大于 160 位.)
对象标识符 id-hmacWithSHA1 标识 HMAC-SHA-1 伪随机函数:
id-hmacWithSHA1 OBJECT IDENTIFIER ::= {digestAlgorithm 7}
在 AlgorithmIdentifier 中与此 OID 关联的参数字段应具有类型 NULL.此对象标识符在对象集 PBKDF2-PRFs (附录 A.2) 中使用.
注意: 尽管 HMAC-SHA-1 被设计为消息认证码, 但其安全性证明很容易修改以适应伪随机函数的要求, 在更强的假设下.在某些假设下, 哈希函数也可以满足伪随机函数的要求.例如, 直接将哈希函数应用于 "key" 和 "text" 的连接可能是合适的, 前提是 "text" 具有适当的结构以防止某些攻击.然而, 更可取的是 HMAC-SHA-1, 因为它将 "key" 和 "text" 视为单独的参数, 并且不需要 "text" 具有任何结构.
在 2004 年和 2005 年期间, 对 SHA-1 进行了许多攻击, 这些攻击将其对碰撞攻击的感知有效强度降低到 62 位而不是预期的 80 位 (例如, Wang 等人 [WANG], 由 M. Cochran [COCHRAN] 确认).然而, 由于这些攻击集中在寻找值之间的碰撞上, 因此它们在这里不是直接的安全考虑因素, 因为 HMAC 认证方案不需要抗碰撞特性.