メインコンテンツまでスキップ

6. コンテンツ鍵配布方法

  1. コンテンツ鍵配布方法

[RFC9052] のセクション 8.5 には、コンテンツ鍵配布方法の一般的な説明が含まれています。このドキュメントでは、いくつかのコンテンツ鍵配布方法の識別子と使用法を定義します。

6.1. 直接暗号化

直接暗号化アルゴリズムは、[RFC9052] のセクション 8.5.1 で定義されています。COSE_Recipient 構造への入力方法に関する情報は、そこに詳しく記載されています。

6.1.1. 直接鍵 (Direct Key)

この受信者アルゴリズムは最も単純です。識別された鍵は、メッセージ内の次の層の鍵として直接使用されます。このアルゴリズムに定義されているアルゴリズムパラメーターはありません。アルゴリズム識別子の値は、表 11 に割り当てられています。

このアルゴリズムを使用する場合、"protected" フィールドは長さがゼロでなければなりません (MUST)。鍵タイプは "Symmetric" でなければなりません (MUST)。

  +========+=======+============================================+
| 名前 | 値 | 説明 |
+========+=======+============================================+
| direct | -6 | コンテンツ暗号化鍵 (CEK) の直接使用 |
+--------+-------+--------------------------------------------+

表 11: 直接鍵

6.1.2. KDF 付き直接鍵 (Direct Key with KDF)

これらの受信者アルゴリズムは、2 つの当事者間で共通の共有秘密を取得し、セクション 5.2 で定義されているコンテキスト構造を使用して HKDF 関数 (セクション 5.1) を適用して、共有秘密を CEK に変換します。"protected" フィールドは、ゼロ以外の長さにすることができます。HKDF の "salt" パラメーター (表 9) またはコンテキスト構造の "PartyU nonce" パラメーター (表 10) のいずれかが存在しなければなりません (MUST) (必要に応じて両方が存在してもかまいません)。"salt"/"nonce" パラメーターの値は、ランダムに生成することも、決定論的に生成することもできます。要件は、問題の共有秘密に対して一意の値であることです。

salt/nonce 値がランダムに生成される場合、ランダム値の長さは、HKDF の基になるハッシュ関数の出力と同じ長さにすることをお勧めします。一意であることを保証する方法はありませんが、一意である確率は高くなります。salt/nonce 値が決定論的に生成される場合は、一意であることが保証されるため、長さの要件はありません。

6.2. 鍵ラップ (Key Wrap)

鍵ラップは、[RFC9052] のセクション 8.5.2 で定義されています。COSE_Recipient 構造への入力方法に関する情報は、そこに詳しく記載されています。

6.2.1. AES 鍵ラップ (AES Key Wrap)

AES 鍵ラップアルゴリズムは [RFC3394] で定義されています。このアルゴリズムは、AES 鍵を使用して、64 ビットの倍数である値をラップします。そのため、このドキュメントで定義されているコンテンツ暗号化アルゴリズムのいずれかの鍵をラップするために使用できます。このアルゴリズムには、単一の固定パラメーター、初期値が必要です。これは、[RFC3394] のセクション 2.2.3.1 で指定されている値に固定されています。呼び出しごとに変化する公開鍵パラメーターはありません。保護されたヘッダーバケットは空でなければなりません (MUST)。

    +========+=======+==========+=============================+
| 名前 | 値 | 鍵サイズ | 説明 |
+========+=======+==========+=============================+
| A128KW | -3 | 128 | AES Key Wrap (128 bit 鍵) |
+--------+-------+----------+-----------------------------+
| A192KW | -4 | 192 | AES Key Wrap (192 bit 鍵) |
+--------+-------+----------+-----------------------------+
| A256KW | -5 | 256 | AES Key Wrap (256 bit 鍵) |
+--------+-------+----------+-----------------------------+

表 13: AES 鍵ラップアルゴリズム値

6.3. 直接鍵合意 (Direct Key Agreement)

直接鍵合意は、[RFC9052] のセクション 8.5.4 で定義されています。COSE_Recipient 構造への入力方法に関する情報は、そこに詳しく記載されています。

6.3.1. 直接 ECDH (Direct ECDH)

ECDH の数学は [RFC6090] にあります。このドキュメントでは、アルゴリズムが拡張され、[RFC7748] で定義されている 2 つの曲線で使用できるようになっています。

ECDH は以下によってパラメータ化されます。

Curve Type/Curve: 選択された曲線は、共有秘密のサイズだけでなく、共有秘密を計算するための数学も制御します。

Computed Secret to Shared Secret: 計算された秘密がわかったら、KDF を実行するために、結果の値をバイト文字列に変換する必要があります。

Ephemeral-Static or Static-Static: 鍵合意プロセスは、送信側の静的鍵または一時鍵のいずれかを使用して実行できます。

Key Derivation Algorithm: ECDH 鍵合意プロセスの結果は、一様にランダムな秘密を提供しません。そのため、使用可能な鍵を生成するには、KDF を介して実行する必要があります。

Key Wrap Algorithm: 鍵ラップアルゴリズムは使用されません。

このドキュメントで定義されている直接 ECDH アルゴリズムのセットは、表 14 に記載されています。