5. 鍵導出関数
- 鍵導出関数 (KDFs)
[RFC9052] のセクション 8.4 には、鍵導出関数の一般的な説明が含まれています。このドキュメントでは、単一のコンテキスト構造と単一の KDF を定義します。これらの要素は、KDF プロセスを必要とするこのドキュメントで定義されているすべての受信者アルゴリズムで使用されます。これらのアルゴリズムは、セクション 6.1.2、6.3.1、および 6.4.1 で定義されています。
5.1. HMAC ベースの抽出および展開鍵導出関数 (HKDF)
HKDF 鍵導出アルゴリズムは、[RFC5869] および [HKDF] で定義されています。
HKDF アルゴリズムは、以下の入力を受け取ります。
secret: 秘密の共有値。秘密は、事前に共有されているか、Diffie-Hellman (DH) 鍵共有などの操作から導出される場合があります。
salt: 生成プロセスを変更するために使用されるオプションの値。ソルト値は、公開または非公開のいずれかです。ソルトが公開されており、メッセージに含まれている場合は、表 9 で定義されている "salt" アルゴリズムヘッダーパラメーターが使用されます。[RFC5869] は、ソルトの長さが基になるハッシュ値の長さと同じであることを推奨していますが、正のソルト長であれば、異なる鍵値が生成されるため、セキュリティが向上します。このパラメーターは、鍵計算に含まれることによって保護され、個別に認証する必要はありません。ソルト値は、送信されるメッセージごとに一意である必要はありません。
length: 生成する必要がある出力のバイト数。
context information: 結果の値が使用されるコンテキストを記述する情報。この情報を材料が使用されるコンテキストに固有のものにすることで、結果の材料が常にその使用法に結び付けられることが保証されます。このドキュメントの KDF は、セクション 5.2 で定義されているコンテキスト構造を使用します。
PRF: HKDF アルゴリズムで使用される基になる擬似ランダム関数。PRF は HKDF アルゴリズムの選択にエンコードされます。
HKDF は、基になる PRF として HMAC を使用するように定義されています。ただし、同じ構成で他の関数を使用して、制約のある世界により適した別の KDF を提供することも可能です。具体的には、抽出ステップではなく、展開ステップの PRF として AES-CBC-MAC を使用できます。正しい長さの適切なランダム共有秘密を使用する場合、抽出ステップはスキップできます。AES アルゴリズムバージョンの場合、抽出ステップは常にスキップされます。
秘密が一様にランダムでない場合(たとえば、ECDH 鍵共有ステップの結果である場合)、抽出ステップはスキップできません。これは、AES HKDF バージョンを ECDH とともに使用できないことを意味します。抽出ステップがスキップされた場合、"salt" 値は HKDF 機能の一部として使用されません。
このドキュメントで定義されているアルゴリズムは、表 8 に記載されています。
+==============+===================+========================+
| 名前 | PRF | 説明 |
+==============+===================+========================+
| HKDF SHA-256 | HMAC with SHA-256 | PRF として HMAC |
| | | SHA-256 を使用する HKDF|
+--------------+-------------------+------------------------+
| HKDF SHA-512 | HMAC with SHA-512 | PRF として HMAC |
| | | SHA-512 を使用する HKDF|
+--------------+-------------------+------------------------+
| HKDF AES- | AES-CBC-MAC-128 | PRF として AES-MAC を |
| MAC-128 | | 使用する HKDF (128 bit)|
+--------------+-------------------+------------------------+
| HKDF AES- | AES-CBC-MAC-256 | PRF として AES-MAC を |
| MAC-256 | | 使用する HKDF (256 bit)|
+--------------+-------------------+------------------------+
表 8: HKDF アルゴリズム