5.1.3 Authentication Using an Asymmetric Key (非対称鍵を使用した認証)
5.1.3 Authentication Using an Asymmetric Key (非対称鍵を使用した認証)
このバリアントは, 受信者が送信者が与えられた KEM 秘密鍵を所有していたことを認証できるようにすることで, 基本メカニズムを拡張します。これは, AuthDecap(enc, skR, pkS) が正しい KEM 共有秘密を生成するのは, カプセル化された値 enc が AuthEncap(pkR, skS) によって生成された場合のみであるためです。ここで skS は pkS に対応する秘密鍵です。言い換えれば, 最大で2つのエンティティ (DHKEM の場合は正確に2つ) がこの秘密を生成できたので, 受信者が最大で1つである場合, 送信者は圧倒的な確率でもう1つです。
基本ケースとの主な違いは, Encap() と Decap() への呼び出しが AuthEncap() と AuthDecap() への呼び出しに置き換えられることです。これらは送信者公開鍵を内部コンテキスト文字列に追加します。関数パラメータ pkR と pkS は公開鍵であり, enc はカプセル化された KEM 共有秘密です。
明らかに, このバリアントは AuthEncap() および AuthDecap() 手順を提供する KEM でのみ使用できます。
このメカニズムは送信者の鍵ペアのみを認証し, 他の識別子は認証しません。アプリケーションが HPKE 暗号文またはエクスポートされた秘密を送信者の別の ID (例えば, 電子メールアドレスまたはドメイン名) にバインドしたい場合, この識別子を info パラメータに含めて ID の誤バインディング問題 [IMB] を回避する必要があります。
def SetupAuthS(pkR, info, skS):
shared_secret, enc = AuthEncap(pkR, skS)
return enc, KeyScheduleS(mode_auth, shared_secret, info,
default_psk, default_psk_id)
def SetupAuthR(enc, skR, info, pkS):
shared_secret = AuthDecap(enc, skR, pkS)
return KeyScheduleR(mode_auth, shared_secret, info,
default_psk, default_psk_id)