9.6. Domain Separation (ドメイン分離)
9.6. ドメイン分離
HPKE は, DHKEM バリアント DHKEM(Group, KDF') と KDF を組み合わせることができ, 両方の KDF が同じ KDF によってインスタンス化されます。設計により, DHKEM 内部および HPKE の残りの部分での Extract() と Expand() の呼び出しは, 別々の入力ドメインを使用します。これにより, 同じ KDF によってインスタンス化された場合でも, それらを独立した関数としてモデル化することが正当化されます。DHKEM と HPKE の残りの部分の間のこのドメイン分離は, LabeledExtract() と LabeledExpand() でプレフィックスフリーな suite_id 値のセットを使用することによって達成されます (DHKEM では KEM..., HPKE の残りの部分では HPKE...)。セット内の要素が別の要素のプレフィックスでない場合, そのセットはプレフィックスフリーであることを思い出してください。
将来の KEM インスタンス化は, Extract() と Expand() が内部で使用される場合, HPKE の残りの部分での Extract() と Expand() の呼び出しから独立した関数としてモデル化できることを確保しなければなりません。これを確保する1つの方法は, セクション 4 で定義されているように suite_id を持つ LabeledExtract() と LabeledExpand() を使用することです。これにより, 上記のように入力ドメイン分離が確保されます。KEM が HPKE の Extract() または Expand() 内部で使用される関数を直接呼び出す場合, 特別な注意が必要です。例えば, HKDF の場合の Hash() と HMAC() などです。これらの呼び出しへの入力が Extract() または Expand() 内部でのこれらの関数の内部呼び出しへの入力と衝突しないことを確保しなければなりません。HPKE の KeySchedule() では, 任意長の入力 info と psk_id に対して Hash() の代わりに Extract() を使用することでこれを回避しています。
LabeledExtract() と LabeledExpand() で使用される文字列リテラル "HPKE-v1" は, HPKE で導出される秘密がスキームの名前とバージョンに結び付けられることを保証します。これは, 別のスキームやバージョンと同じ Diffie-Hellman または KEM 共有秘密から導出される可能性がある場合でも同様です。