跳到主要内容
ecdsa.com

HKDF

RFC 5869 定义的基于 HMAC 的“提取-扩展”密钥派生函数,可把 ECDH 输出等共享密钥转换为一个或多个绑定到上下文字符串的均匀随机密钥。
其他写法HMAC-based Key Derivation FunctionHKDF-ExpandHKDF-ExtractRFC 5869

Extract(提取)步骤用盐把输入密钥材料压缩为伪随机密钥 PRK = HMAC(salt, IKM);Expand(扩展)步骤再把它扩展为输出密钥材料 OKM = T(1) ‖ T(2) ‖ …,其中 T(i) = HMAC(PRK, T(i−1) ‖ info ‖ i),最多可达 255 个哈希长度(使用 SHA-256 时为 8,160 字节)。info 字符串把不同用途的密钥区分开,使同一个秘密值不会两次产生相同的密钥。

TLS 1.3 的整个密钥调度都是带标签的 HKDF(HKDF-Expand-Label,RFC 9846 §7.1);HPKE、Signal、Noise、MLS 和 QUIC 也使用它,NIST 在 SP 800-56C Rev. 2 中批准了同样的两步构造。

HKDF 不是密码哈希:它在设计上就很快,因此把低熵密码输入 HKDF 无法抵御猜测。密码要用 Argon2id、scrypt 或 PBKDF2 处理,HKDF 则用于高熵的秘密值。

标准与参考资料

全部术语