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

5.2. Stronger Mixing Functions (より強力な混合関数)

5.2. Stronger Mixing Functions (より強力な混合関数)

米国政府高度暗号化標準 [AES] は, 複数ビット量に対する強力な混合関数の例です。最大 384 ビットの入力 (128 ビットの "データ" と 256 ビットの "鍵") を取り, 128 ビットの出力を生成します。各出力ビットは, すべての入力ビットの複雑な非線形関数に依存しています。この特性を持つ他の暗号化関数, たとえば [DES] も, すべての鍵とデータ入力ビットを混合すると見なすことで使用できます。

別の良い混合関数ファミリーは, 米国政府セキュアハッシュ標準 [SHA*] や MD4, MD5 [MD4, MD5] シリーズなどの "メッセージダイジェスト" またはハッシュ関数です。これらの関数はすべて, 事実上無制限の量の入力を取り, すべての入力ビットを混合して比較的短い固定長の出力を生成します。MD* シリーズは 128 ビットの出力を生成し, SHA-1 は 160 ビットを生成し, 他の SHA 関数は最大 512 ビットを生成します。

メッセージダイジェスト関数は可変量の入力用に設計されていますが, AES や他の暗号化関数も任意の数の入力を組み合わせるために使用できます。128 ビットの出力で十分な場合, 入力を 128 ビットのデータ量と連続する AES "鍵" にパックでき, 必要に応じてゼロでパディングします。次に, 量は電子コードブックモードで AES を使用して "鍵" によって連続的に暗号化されます。または, 入力を 1 つの 128 ビット鍵と複数のデータブロックにパックし, CBC-MAC を計算できます [MODES]。

128 ビットを超える出力が必要で AES を使用したい場合 (ただし, 入れたよりも多くのビットの "ランダム性" を得ることは絶対に不可能であることに注意してください), より複雑な混合を使用する必要があります。たとえば, 入力が 3 つの量 A, B, C にパックされているとします。AES を使用して, B と C を鍵として A を暗号化し, 出力の最初の部分を生成し, 次に C と A で B を暗号化してさらに出力を生成し, 必要に応じて A と B で C を暗号化してさらに出力を生成できます。上記で与えられた鍵の順序を逆にすることで, さらに多くの出力を生成できます。ハッシュ関数でも同じことができ, 入力データのさまざまなサブセットまたは異なるプレフィックスおよび/またはサフィックスを持つ入力データの異なるコピーをハッシュして複数の出力を生成します。

強力な混合関数を使用する例として, それぞれがゼロに向かって 99% 偏っている 308 ビットの文字列のケースを再考します。セクション 4.1 で示されたパリティ技術は, これを 1 ビットに減らし, ゼロまたは 1 である可能性が等しいことから 1/1000 の逸脱のみです。しかし, セクション 2 で示された情報の式を適用すると, この 308 ビットの偏ったシーケンスには 5 ビットを超える情報が含まれています。したがって, SHA-1 でハッシュし, 結果の下位 5 ビットを取ると, 5 つの偏りのないランダムビットが得られ, 文字列のパリティを計算することによって得られる単一ビットではありません。または, 一部のアプリケーションでは, 5+ ビットのエントロピーのほぼすべてを 160 ビットの量に保持するために, ハッシュ出力全体を使用できます。