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 则用于高熵的秘密值。