HKDF
HKDF (HMAC-based Key Derivation Function, RFC 5869) — стандартная KDF для вывода нескольких ключей из одного секретного материала. Основа современной криптографии.
Две фазы
Extract
PRK = HMAC(salt, IKM)
Из "сырого" ключевого материала (IKM — например, результат Diffie-Hellman) получаем равномерно распределённый ключ PRK.
Expand
OKM = HKDF-Expand(PRK, info, L)
Из PRK разворачиваем ключ нужной длины L, привязывая к контексту через info.
Info: разделение контекстов
Параметр info критичен: разные info → разные ключи из одного PRK. Обычно: имя протокола + версия + назначение ключа.
info = "TLS 1.3, client handshake traffic"
info = "TLS 1.3, server application traffic"
info = "Noise_XX_25519_ChaChaPoly_SHA256"
Где используется
- TLS 1.3 — все ключи выводятся через HKDF-Expand-Label
- Signal Protocol — X3DH, Double Ratchet
- WireGuard — ключи Noise IK
- HPKE (RFC 9180) — Hybrid Public Key Encryption
- Noise Protocol Framework
HKDF vs PBKDF2 vs Argon2
| HKDF | PBKDF2/Argon2 | |
|---|---|---|
| Вход | уже секретный ключ | слабый пароль |
| Цель | расширить ключ | усилить пароль |
| Скорость | быстро | намеренно медленно |
HKDF не для паролей. Для паролей — Argon2.