草稿:HKDF
您所提交的草稿仍需改善。在2026年9月11日由Didaictor (留言)审阅。
如何改善您的草稿
|
| 您所提交的草稿仍需改善。在2026年8月30日由Lemonaka (留言)审阅。 如何改善您的草稿
|
HKDF 是一种基于HMAC讯息认证码(message authentication code)的多用途金钥衍生函式(KDF)。HKDF 采用“先提取后扩展”(extract-then-expand)架构[1],其逻辑上由两个部分组成:第一阶段从输入的金钥材料中“提取”出固定长度的伪随机金钥;第二阶段则将该金钥“扩展”为多个彼此独立的伪随机金钥,作为 KDF 的输出。
运作原理
[编辑]HKDF 由两个函数组成:HKDF-Extract(提取)和 HKDF-Expand(扩展)[2]:
HKDF-Extract
[编辑]说明
[编辑]HKDF-Extract()接收“输入金钥材料”或“来源金钥材料”( 或 ,例如使用迪菲-赫尔曼金钥交换产生的共享秘密),以及可选的、非秘密的随机或伪随机盐值(),并产生称为 (“伪随机金钥”,pseudorandom key)的密码学金钥。HKDF-Extract 的作用相当于一个“随机性提取器”:它接收一个具有足够最小熵的输入值,即使该值的分布可能不均匀。经过处理后,它会产生一个伪随机值。从计算上而言,该伪随机值与均匀随机值不可区分。[3]随机性提取器假设攻击者的计算能力受到限制,且来源的熵可能仅在计算意义下存在。[4]这类提取器可以在适当的假设下利用密码学函数建构;在一般情况下可使用通用杂凑函数(universal hash function)[5],而在受限场景(如弱熵源)下则可使用随机预言机(random oracle)进行建模。[6]
盐值()可作为“与来源无关的提取器”(source-independent extractor),增强 HKDF 的安全性。随机盐值可以使输入金钥材料()的来源与提取器彼此独立。只要盐值不是由攻击者选择或操纵,即使在多次使用 HKDF 时使用固定的公开盐值也是安全的。理想情况下,盐值应为随机字串,且长度等于杂凑函数的输出长度;即使盐值的熵较低或长度较短,仍能对输出金钥材料()的安全性提供额外保障。若没有盐值,或盐值的熵很低,而攻击者又能影响 的来源,则 HKDF-Extract 可能无法抵御底层杂凑函数所遭受的特定攻击。因此,在可能的情况下使用随机盐值可以增强 HKDF 的安全性。[7]
HKDF-Extract 是以 为金钥、以 为讯息计算 HMAC 的结果;如果未提供 ,则使用长度等于底层杂凑函数输出长度的全零字串作为金钥。[2]HKDF-Extract 所使用的底层杂凑函数可以与 HKDF-Expand 所使用的不同。建议 HKDF-Extract 使用应用程序可用的最强杂凑函数,因为它主要是“集中” 中已有的熵,而不一定会增加熵。攻击者被假设已掌握部分 的资讯(例如 Diffie-Hellman 中公开的资讯),或能够部分控制其内容(例如熵池)。[1]
如果 本身就是密码学上足够强的金钥,则可以省略 HKDF-Extract,直接将其视为 。不过,为了与一般情况保持一致,仍建议执行 HKDF-Extract,尤其是在应用程序可以提供 的情况下。[2]
计算方式
[编辑]HKDF-Extract 的计算方式为:
其中, 为盐值, 为输入金钥材料,而 为产生的伪随机金钥。如果未提供盐值,则使用长度等于底层杂凑函数输出长度的全零字串作为 。[2]
HKDF-Expand
[编辑]说明
[编辑]HKDF-Expand()接收 (如果省略 HKDF-Extract,则可直接使用其他密码学上安全的金钥)、可选的上下文资讯 ()以及所需的输出长度 ,并产生长度为 的输出金钥材料()。使用不同的 可以从同一个 产生多组彼此独立的输出金钥材料; 应与 HKDF-Extract 使用的 保持独立。
HKDF-Expand 可以视为一个以 为金钥、具有可变输出长度的伪随机函数()。它以 和从 1 开始的 8 位元计数器 作为输入计算 HMAC;后续计算会将前一次 HMAC 的输出加入输入,形成链式结构,直到产生足够长度的 。
每次 HMAC 计算产生的输出长度取决于底层杂凑函数。例如使用 SHA-256 时,每次产生 256 位元的输出,因此 的最大长度为:
实际输出则截取至所要求的长度 。如果 本身已经至少与所需的 一样长,则可以省略 HKDF-Expand;不过,仍建议执行 HKDF-Expand,以进一步对输出金钥材料进行“平滑化”(smoothing)。[2]
计算方式
[编辑]HKDF-Expand 使用 作为 HMAC 的金钥,并依序计算:
其中, 为第 次 HMAC 计算的输出, 为可选的上下文资讯, 为以 8 位元表示的计数器。计算从 开始,将各次产生的 依序串接,并截取前 个字节作为输出金钥材料 。最多可以计算 255 个区块,因此 不得超过 。[2]

标准化
[编辑]HKDF 最初被提出作为各种通讯协定与应用程序的密码学构建模组,同时旨在避免不同应用程序各自采用不同的金钥导出机制。[2]
HKDF 于 2010 年正式定义于 RFC 5869,其设计与安全性分析则在 Krawczyk 于同年发表的论文。[1]
NIST 的 NIST SP 800-56C 也规范了可参数化的“先提取后扩展”(extract-and-expand)金钥导出方案,并指出 RFC 5869 中的 HKDF 是该方案的一种实例。[8]
应用
[编辑]HKDF 被广泛应用于各种密码学协定。例如,Signal Protocol 使用 HKDF 产生讯息金钥,并与三重椭圆曲线迪菲-赫尔曼(X3DH)金钥协议搭配使用。[9]HKDF 也是 Noise Protocol Framework、Message Layer Security 的重要组成部分[10][11],并应用于 IPsec 的互联网金钥交换(IKE)和 TLS 1.3 等协定。[12][13]
HKDF 的“多用途”设计旨在支援需要金钥提取、金钥扩展以及金钥阶层的应用,包括金钥封装、金钥交换、伪随机数生成器(PRNG)和基于密码的金钥导出函数(PBKDF)等。
参考文献
[编辑]- ^ 1.0 1.1 1.2 Krawczyk, Hugo, Rabin, Tal , 编, Cryptographic Extraction and Key Derivation: The HKDF Scheme 6223, Springer Berlin Heidelberg: 631–648, 2010 [2026-08-17], ISBN 978-3-642-14622-0, doi:10.1007/978-3-642-14623-7_34
- ^ 2.0 2.1 2.2 2.3 2.4 2.5 2.6 Hugo Krawczyk; Pasi Eronen. HMAC-based Extract-and-Expand Key Derivation Function (HKDF). Internet Engineering Task Force. 2010-05.
- ^ Dodis, Yevgeniy; Ostrovsky, Rafail; Reyzin, Leonid; Smith, Adam. Fuzzy Extractors: How to Generate Strong Keys from Biometrics and Other Noisy Data. SIAM Journal on Computing. 2008-01, 38 (1) [2026-08-17]. ISSN 0097-5397. doi:10.1137/060651380 (英语).
- ^ Goldreich, O.; Levin, L. A. A hard-core predicate for all one-way functions. ACM Press. 1989 [2026-08-17]. ISBN 978-0-89791-307-2. doi:10.1145/73007.73010 (英语).
- ^ Impagliazzo, R.; Levin, L. A.; Luby, M. Pseudo-random generation from one-way functions. ACM Press. 1989 [2026-08-17]. ISBN 978-0-89791-307-2. doi:10.1145/73007.73009 (英语).
- ^ Bellare, Mihir; Rogaway, Phillip. Random oracles are practical: a paradigm for designing efficient protocols. ACM Press. 1993 [2026-08-17]. ISBN 978-0-89791-629-5. doi:10.1145/168588.168596 (英语).
- ^ Fischlin, Marc; Janson, Christian; Mazaheri, Sogol. Backdoored Hash Functions: Immunizing HMAC and HKDF. IEEE. 2018-07 [2026-08-17]. ISBN 978-1-5386-6680-7. doi:10.1109/CSF.2018.00015.
- ^ Barker, Elaine; Chen, Lily; Davis, Richard. Recommendation for Key-Derivation Methods in Key-Establishment Schemes (PDF) (报告). National Institute of Standards and Technology. 2020-08-18. doi:10.6028/nist.sp.800-56cr2.
- ^ Specifications >> The X3DH Key Agreement Protocol. Signal Messenger. [2026-08-17] (英语).
- ^ Barnes, R.; Beurdouche, B.; Robert, R.; Millican, J.; Omara, E.; Cohn-Gordon, K. The Messaging Layer Security (MLS) Protocol (报告). Internet Engineering Task Force. 2023-07.
|issue=被忽略 (帮助) - ^ Specifications >> The X3DH Key Agreement Protocol. Signal Messenger. [2026-08-17] (英语).
- ^ Rescorla, E. The Transport Layer Security (TLS) Protocol Version 1.3 (报告). Internet Engineering Task Force. 2018-08.
|issue=被忽略 (帮助) - ^ Kaufman, C.; Hoffman, P.; Nir, Y.; Eronen, P.; Kivinen, T. Internet Key Exchange Protocol Version 2 (IKEv2) (报告). Internet Engineering Task Force. 2014-10.
|issue=被忽略 (帮助)
