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

8.2. Errors (エラー)

8.2. エラー

この文書で指定されている高レベルの公開 HPKE API はすべて失敗する可能性があります。これには Setup 関数とすべての暗号化コンテキスト関数が含まれます。例えば, カプセル化されたキー enc が無効な場合 Decap() は失敗する可能性があり, 暗号文の復号化が失敗した場合 Open() は失敗する可能性があります。この仕様全体で生成される明示的なエラーと, 各エラーにつながる条件は次のとおりです:

  • ValidationError: KEM 入力または出力の検証失敗; セクション 4.1。

  • DeserializeError: 公開鍵または秘密鍵のデシリアライゼーション失敗; セクション 4。

  • EncapError: Encap() の失敗; セクション 4。

  • DecapError: Decap() の失敗; セクション 4。

  • OpenError: Context AEAD Open() の失敗; セクション 4 および 5.2。

  • MessageLimitReachedError: Context AEAD シーケンス番号のオーバーフロー; セクション 4 および 5.2。

  • DeriveKeyPairError: 鍵ペア導出の失敗; セクション 7.1.3。

暗黙的なエラーも発生する可能性があります。例えば, 特定のクラスの失敗, 例えば不正な形式の受信者公開鍵は, 明示的なエラーを生成しない可能性があります。例えば, この仕様で説明されている DHKEM バリアントの場合, 無効な受信者公開鍵が与えられると Encap() アルゴリズムは失敗します。しかし, 他の KEM アルゴリズムには公開鍵の有効性を検証するための効率的なアルゴリズムがない可能性があります。その結果, 同等のエラーは受信者での AEAD 復号化まで現れない可能性があります。別の例として, DHKEM の AuthDecap() 関数は, 間違った送信者公開鍵が与えられると無効な出力を生成します。このエラーは, 後続の AEAD 復号化まで検出できません。

この文書のエラーは実装者のガイドとして意図されています。これらは実装が発する可能性のあるすべてのエラーの網羅的なリストではありません。例えば, 将来の KEM には内部失敗ケースがある可能性があり, または実装がメモリ不足になる可能性があります。

これらのエラーが API でどのように表現されるか, またはアプリケーションによってどのように処理されるかは, 実装固有の詳細です。例えば, 一部の実装は, 無視できる確率でのみ発生するため, DeriveKeyPairError 失敗時に中止またはパニックする可能性がありますが, 他の実装は失敗した DeriveKeyPair 操作を再試行する可能性があります。詳細については, セクション 7.1.3 を参照してください。別の例として, この文書で指定されている DHKEM の一部の実装は, DH() からの ValidationError を Encap() または Decap() からの EncapError または DecapError に変換することを選択する可能性がありますが, 他の実装は ValidationError を変更せずに発生させることを選択する可能性があります。

HPKE API を使用するアプリケーションは, ここにあるエラーが完全であると仮定してはならず, また特定のクラスのエラーがすべての暗号スイートで常に同じ方法で現れると仮定してはなりません。例えば, この文書で指定されている DHKEM は, KEM 公開鍵が無効な場合に DeserializationError または ValidationError を発行します。しかし, 新しい KEM には公開鍵が有効かどうかを判断するための効率的なアルゴリズムがない可能性があります。この場合, 無効な公開鍵は代わりに暗号文を復号化しようとするときに OpenError を生成する可能性があります。