跳到主要内容

1. Introduction (简介)

1. Introduction (简介)

密钥派生函数 (key derivation function, KDF) 是密码学系统的基本和必要组件。它的目标是从某个初始密钥材料源中派生出一个或多个加密强度高的秘密密钥。

本文档规定了一个简单的基于 HMAC [HMAC] 的 KDF, 名为 HKDF, 可以作为各种协议和应用中的构建块, 并且已经在几个 IETF 协议中使用, 包括 [IKEv2]、[PANA] 和 [EAP-AKA]。其目的是以通用的方式记录这个 KDF, 以促进未来协议和应用的采用, 并阻止多种 KDF 机制的扩散。它不是要求更改现有协议的号召, 也不会更改或更新使用此 KDF 的现有规范。

HKDF 遵循"提取-然后-扩展" (extract-then-expand) 范式, 其中 KDF 在逻辑上由两个模块组成。第一阶段获取输入密钥材料并从中"提取" (extract) 一个固定长度的伪随机密钥 K。第二阶段将密钥 K "扩展" (expand) 为若干个额外的伪随机密钥 (KDF 的输出)。

在许多应用中, 输入密钥材料不一定均匀分布, 攻击者可能对其有一些部分知识 (例如, 由密钥交换协议计算的 Diffie-Hellman 值) 甚至部分控制 (如在某些熵收集应用中)。因此, "提取"阶段的目标是将输入密钥材料可能分散的熵"集中"到一个短小但加密强度高的伪随机密钥中。在某些应用中, 输入可能已经是一个好的伪随机密钥; 在这些情况下, "提取"阶段是不必要的, 可以单独使用"扩展"部分。

第二阶段将伪随机密钥"扩展"到所需的长度; 输出密钥的数量和长度取决于需要密钥的特定加密算法。

请注意, 一些现有的 KDF 规范, 如 NIST Special Publication 800-56A [800-56A]、NIST Special Publication 800-108 [800-108] 和 IEEE Standard 1363a-2004 [1363a], 要么只考虑第二阶段 (扩展伪随机密钥), 要么没有明确区分"提取"和"扩展"阶段, 这通常会导致设计缺陷。本规范的目标是适应广泛的 KDF 需求, 同时最小化对底层哈希函数的假设。"提取-然后-扩展"范式很好地支持了这一目标 (有关设计原理的更多信息, 请参见 [HKDF-paper])。