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

5. Hybrid Public Key Encryption (ハイブリッド公開鍵暗号化)

5. Hybrid Public Key Encryption (ハイブリッド公開鍵暗号化)

このセクションでは, いくつかの HPKE バリアントを定義します。すべてのバリアントは受信者の公開鍵と平文 pt のシーケンスを受け取り, カプセル化された鍵 enc と暗号文 ct のシーケンスを生成します。これらの出力は, skR の保持者のみが enc から鍵をカプセル解除し, 暗号文を復号化できるように構築されています。すべてのアルゴリズムは, 鍵の生成に影響を与えるために使用できる info パラメータ (例えば, ID 情報を組み込むため) と, 使用中の AEAD アルゴリズムに追加の認証データを提供する aad パラメータも受け取ります。

公開鍵への暗号化の基本ケースに加えて, 3つの認証バリアントを含めます: 事前共有鍵の所有を認証するもの, KEM 秘密鍵の所有を認証するもの, そして事前共有鍵と KEM 秘密鍵の両方の所有を認証するものです。すべての認証バリアントは, 暗号化操作に追加の鍵マテリアルを提供します。以下の1バイト値は, モードを区別するために使用されます:

| Mode (モード) | Value (値) | |============---|========---| | mode_base | 0x00 | | mode_psk | 0x01 | | mode_auth | 0x02 | | mode_auth_psk | 0x03 |

Table 1: HPKE Modes (表1: HPKE モード)

これらすべてのケースは, 同じ基本的な2ステップパターンに従います:

  1. 送信者と受信者の間で共有される暗号化コンテキストを設定します。

  2. そのコンテキストを使用してコンテンツを暗号化または復号化します。

context (コンテキスト) は, 使用中の AEAD アルゴリズムと鍵をエンコードし, 同じ nonce が複数の平文で使用されないように使用される nonce を管理する実装固有の構造です。また, 5.3節 で説明されているように, 秘密値をエクスポートするためのインターフェースも持っています。この構造とそのインターフェースの説明については, 5.2節 を参照してください。基礎となる AEAD 復号化が失敗すると, HPKE 復号化は失敗します。

ここで説明する構造は, 関連する非プライベートパラメータ (enc, psk_id など) が HPKE を使用するアプリケーションによって送信者と受信者の間で転送されることを前提としています。さらに, 複数の公開鍵を持つ受信者は, カプセル化操作にどの公開鍵が使用されたかを判断する何らかの方法が必要です。例として, アプリケーションは送信者から受信者への暗号文と共にこの情報を送信することがあります。このようなメカニズムの仕様はアプリケーションに委ねられています。詳細については第10節を参照してください。

一部の KEM は AuthEncap() または AuthDecap() をサポートしていない場合があることに注意してください。そのような KEM の場合, mode_base または mode_psk のみがサポートされます。新しい KEM を定義する将来の仕様では, これらのモードがサポートされているかどうかを示さなければなりません。詳細については7.1.5節を参照してください。

このセクションで説明される手順は, Python 風の擬似コードで示されています。使用されるアルゴリズムは暗黙的に残されています。

サブセクション