首页/安全/加密与证书速查/HKDF 密钥派生(RFC 5869)
加密算法基础95 条

HKDF 密钥派生(RFC 5869)

两阶段通用 KDF:先从输入提取伪随机密钥(Extract),再按上下文标签扩展出多个子密钥(Expand);TLS 1.3 用它派生握手与记录层全部密钥。

加密与证书速查安全更新于 2026-10-12
阶段一Extract(salt, IKM) → PRK
阶段二Expand(PRK, info, L) → OKM
适用输入已具一定熵的共享秘密、DH 输出
不适用低熵口令(应先跑慢散列)

Python 示例(cryptography)

Python 示例(cryptography)
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.hkdf import HKDF

okm = HKDF(algorithm=hashes.SHA256(), length=32, salt=None, info=b'enc-key').derive(shared_secret)
TLS 1.3 的密钥调度使用 HKDF-Expand-Label,把握手上下文(Transcript-Hash)作为输入,实现每条记录密钥的独立派生。

易错点

  • HKDF 不慢化输入:对低熵口令直接使用会让暴力破解变得廉价
  • salt 传空是允许的,但同一 PRK 派生的多路密钥必须用不同 info 标签隔离

数据来源与参考

  • RFC 5869(HKDF)
  • RFC 8446 §7.1(TLS 1.3 密钥调度)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌