暗号
鍵導出関数(KDF)
別称: KDF, 鍵導出
定義
パスワードや共有秘密、マスター鍵などの秘密入力から、1 つまたは複数の強力な暗号鍵を導出する暗号関数。
鍵導出関数(Key Derivation Function、KDF)は、パスワード、Diffie-Hellman 共有秘密、既存のマスター鍵などの秘密素材から、固定長で暗号学的に強い鍵を 1 つ以上生成する関数です。KDF は大きく 2 種類に分かれ、パスワードベース KDF は意図的に遅くメモリ消費型に設計されています(Argon2id、scrypt、bcrypt、PBKDF2 など)。一方、高エントロピー入力向けの extract-and-expand 型 KDF として HKDF(RFC 5869)があり、TLS 1.3、Signal、WireGuard、Noise などで HMAC を用いて 1 つの共有秘密から複数のセッション鍵を導出するのに広く使われています。優れた KDF はソルトと任意のコンテキスト文字列(info)を扱い、派生鍵のドメイン分離を実現することで、異なる用途間で鍵が関連付けられたり再利用されたりするのを防ぎます。
例
- TLS 1.3 はハンドシェイクとトラフィックの秘密値を HKDF-Extract+Expand で導出する。
- Argon2id はユーザーのパスフレーズから 32 バイトの AES 鍵を導出し、暗号化された保管庫の解錠に使う。
関連用語
Argon2
2015 年の Password Hashing Competition で優勝し、RFC 9106 に標準化された、メモリ消費型の最新パスワードハッシュ関数兼 KDF。
scrypt
2009 年に Colin Percival が設計し RFC 7914 で標準化された、メモリ消費型のパスワードベース KDF。パスワードハッシュや一部の暗号通貨の Proof-of-Work に利用される。
PBKDF2
PKCS #5 / RFC 8018 で定義されたパスワードベースの鍵導出関数で、設定可能な反復回数とソルトを用いて擬似乱数関数を繰り返し適用する。
HMAC
RFC 2104 と FIPS 198-1 で定義された、暗号学的ハッシュ関数を土台とする鍵付きメッセージ認証コード(MAC)構造。
暗号鍵
暗号アルゴリズムをパラメータ化し、データの暗号化・復号・署名・認証に用いる高エントロピーな秘密または公開値。
セッション鍵
1 回の通信セッションを保護するために使われ、終了後に破棄される短命の対称鍵。