暗号学において、ドメイン分離とは、1つの基礎テンプレートのみを使用して複数の異なる機能を効率的に実装するために使用される構造です。[ 1 ]ドメイン分離は、機能のドメインを分割して、同じ機能の異なるアプリケーションに別々のサブドメインを割り当てることと定義できます。 [ 2 ]
例えば、暗号プロトコルは一般的にランダムオラクル(RO、入力値によって完全に決定されるが、それ以外はランダムな値を返す関数)に依存しています。これらのプロトコルのセキュリティ証明は、ランダムオラクルがプロトコルに固有であるという仮定に基づいています。つまり、2つのプロトコルが同じROを共有する場合、証明の仮定はもはや満たされません。ROが必要になるたびに新しい暗号プリミティブをゼロから作成することは現実的ではないため、ベースオラクルROの入力に固有のドメイン分離タグ(DST、ドメインセパレータとも呼ばれる)を付加することで、複数のRO(例えばRO1とRO2)が生成されます。
ここで、「RO1」と「RO2」はそれぞれ固有のDSTを表す文字列であり、||は連結演算子である。[ 3 ]基礎となるRO関数が安全である場合(例えば、暗号ハッシュである場合)、RO1とRO2は統計的に独立している。[ 1 ]この手法は、 1993年にBellareとRogawayによって最初に提案された[ 4 ] 。 [ 5 ]
ドメイン分離構造は複数の目的に使用できます。
実用的な意味では、ドメイン分離はプログラミングにおける強い型付けに相当する「カスタマイズ」を提供することができます。つまり、異なるタスクに対して独立した計算を使用することを強制するため、ある計算の結果を知った攻撃者は、別の計算に関する情報を得ることができません。[ 9 ]
ドメイン分離は、異なる暗号化プリミティブを実装する関数で使用できます。
ドメイン分離はハッシュ関数で最も一般的に用いられます。ハッシュ関数の入力ドメインは実質的に無制限であり、例えばメッセージの先頭または末尾にDSTを追加することで、任意の数の派生関数に分割することが容易です。[ 10 ] [ 1 ]
ドメイン分離は、ハッシュ関数の実装において、同じ設計から複数の異なる関数を生成するために使用されます。[ 11 ]例えば、SHA-3では、ドメイン分離によって、異なる名前の関数( SHA3-512やSHAKE128など)が独立していることが保証されます。[ 9 ]
対称暗号とMACのセキュリティは、鍵が他の目的に使用されていないことに大きく依存します。アプリケーションが複数の鍵を必要とするものの、鍵生成材料のソースが1つしかない場合、通常は鍵導出関数を用いて鍵を生成します。KDFは通常、任意の長さの出力を生成できるため、任意の数の鍵を生成するために使用できます。[ 12 ]
また、ハッシュ関数と同様に、一部の対称暗号とMACは内部的にドメイン分離を使用しています。[ 13 ]
多くの場合、異なる目的のデジタル署名を生成するために、単一の署名鍵を使用することが望ましい。この場合、ある目的のために署名されたメッセージが他の目的に使用されないようにすることが重要です。これを実現する簡単な方法は、各メッセージに目的を示す識別子を付加し、識別子が一致しない場合はメッセージを拒否することです。[ 14 ]
この記事には、追加またはより具体的なカテゴリが必要です。(2024年1月) |