本文へスキップ
ecdsa.com

HKDF

RFC 5869 で規定された HMAC ベースの抽出・拡張型の鍵導出関数で、ECDH の出力などの共有秘密を、コンテキスト文字列に結び付いた一様にランダムな 1 つ以上の鍵に変換します。
別表記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 で同じ 2 段階の構成を承認しています。

HKDF はパスワードハッシュではありません。設計上高速なので、エントロピーの低いパスワードを入力しても推測に対する保護にはなりません。パスワードには Argon2id、scrypt、PBKDF2 のいずれかを、エントロピーの高い秘密情報には HKDF を使ってください。

規格と参考文献

すべての用語