
暗号学において、スポンジ関数またはスポンジ構成とは、任意の長さの入力ビットストリームを受け取り、任意の長さの出力ビットストリームを生成する、有限の内部状態を持つアルゴリズムのクラスのことです。スポンジ関数には理論的にも実践的にも用途があります。暗号ハッシュ、メッセージ認証コード、マスク生成関数、ストリーム暗号、擬似乱数生成器、認証付き暗号化など、多くの暗号プリミティブをモデル化または実装するために使用できます。[ 1 ]
スポンジ関数は、次の3つのコンポーネントから構成されます。[ 2 ]
Sは2つのセクションに分割されます。1つはサイズr(ビットレート)のセクション、もう1つは残りのサイズc(容量)のセクションです。これらのセクションはそれぞれRとCで表されます。
fは、Sからの州。
Pは入力文字列に十分なビットを追加し、パディング後の入力の長さがビットレートrの整数倍になるようにします。つまり、入力はrビットのブロックに分割されます。
スポンジ関数は、(スポンジの比喩で言えば)パディングされた入力文字列のすべてのブロックを次のように「吸収」します。
スポンジ関数の出力は、以下のように生成(「絞り出す」)する準備が整いました。
出力すべきビット数がr未満の場合、 Rは切り捨てられます( Rの一部のみが出力されます)。
別の比喩では、状態メモリを「エントロピープール」と表現し、入力をプールに「注ぎ込む」こと、変換関数を「エントロピープールをかき混ぜる」ことと表現している。[ 3 ]
入力ビットは状態メモリのC部分にXOR演算されることはなく、 Cのビットが直接出力されることもありません。入力によってCがどの程度変更されるかは、変換関数fに完全に依存します。ハッシュアプリケーションでは、衝突攻撃や原像攻撃に対する耐性はCに依存し、そのサイズ(「容量」c)は通常、望ましい耐性レベルの2倍になります。
交互に吸収と圧縮を行うことも可能である。[ 1 ]この操作は二重化構成または二重化と呼ばれる。これは、シングルパス認証暗号化システムの基礎となる可能性がある。また、一部のプロトコルでは、Fiat-Shamir変換の効率的な変種としても使用されている。[ 4 ]
吸収中に XOR 演算を省略しても、選択したセキュリティ レベルを維持することが可能です。[ 1 ]このモードでは、吸収フェーズで、入力の次のブロックが状態のR部分を上書きします。これにより、ステップ間でより小さな状態を保持できます。R部分はいずれにせよ上書きされるため、事前に破棄することができ、C部分のみを保持する必要があります。
スポンジ関数には理論的用途と実用的用途の両方がある。理論暗号解読では、ランダムスポンジ関数は、 fが適切なランダム置換または変換であるスポンジ構成である。ランダムスポンジ関数は、広く使用されているランダムオラクルモデルよりも、暗号プリミティブの実用的制約、特に有限の内部状態をより多く捉えている。[ 5 ]
スポンジ構造は、実用的な暗号プリミティブを構築するためにも使用できます。たとえば、1600 ビットの状態を持つKeccak暗号スポンジは、 NISTによってSHA-3 コンテストの勝者として選ばれました。Keccak の強さは、その開発者によって開発された複雑なマルチラウンド順列fに由来します。 [ 6 ] Spritzと呼ばれるRC4の再設計では、アルゴリズムを定義するためにスポンジ構造を参照しています。
その他の例として、スポンジ関数は、認証付き暗号化と関連データ (AEAD) [ 3 ]やパスワードハッシュ方式[ 7 ]を構築するために使用できます。