中間一致攻撃

中間一致攻撃（ちゅうかんいっちこうげき、英：Meet-in-the-middle attack）とは、暗号理論において誕生日攻撃と同様に時間と空間のトレードオフを利用した攻撃方法の一種である。
概要.
誕生日攻撃では、ある関数formula_1についてformula_2となるような値formula_3を定義域中から見つけるのが目的であった。一方、中間一致攻撃では、ある合成関数formula_4についてformula_5となるようなformula_3を探すのが目的である。中間一致攻撃という名前は、合成関数formula_4の中間で作られる値が一致するものを探索することから付けられている。
この攻撃手法はブロック暗号に対する攻撃方法として、ディフィーとヘルマンにより1977年に開発された。ブロック暗号の安全性を高める方法として、二つの異なる暗号鍵で2回暗号化を行う（鍵の異なる2つの暗号化関数の合成関数を使用して暗号化を行う）という手段が考えられる。単純に考えると、2回の暗号化により暗号の安全性は2乗になるものと予想される。事実、全ての暗号鍵を試そうとすると、暗号鍵を一つだけ使用した場合はformula_8回の試行で済むのに対し、二つの鍵の組み合わせではformula_9回の試行が必要となる（鍵長がformula_10ビットの場合）。
これに対しディフィーとヘルマンは、時間と空間のトレードオフを利用することで、2つの鍵を使用した場合でも、1つの鍵を使用した場合と比較して試行回数を高々2倍で済ませる方法を開発した。 この攻撃方法では、平文に対して片方の鍵で暗号化を行い、暗号に対してもう片方の鍵で復号を行って、2つの暗号化処理の中間で突き合わせ（meet-in-the-middle）を行う。
攻撃方法.
攻撃者は平文formula_11とそれに対応する暗号文formula_12を知っているものとする。ここで、formula_13を暗号化関数、formula_14とformula_15をそれぞれ異なる鍵とすると、暗号化処理は以下のように記述できる。
まず、攻撃者は全ての鍵候補formula_14に対してformula_18を計算しておき、その結果をメモリ上に保存しておく。次に、攻撃者は全ての鍵候補formula_15を使って暗号文の復号を行い（formula_20を復号関数とすると、formula_21を計算する）、その結果をメモリに保存しておく。この2つの計算結果の中に合致するものがあれば、その計算に使用した2つの鍵formula_22がおそらく正しい鍵であると言える。この処理を高速化する方法としては、まずformula_18の結果と暗号化に使用した鍵formula_14のペアをインメモリのルックアップテーブルに保存しておき、次にformula_21の結果を使用してルックアップテーブルから鍵候補を検索する方法が考えられる。計算結果から合致するものが見つかったら、別の暗号文と平文を使用すれば検証が行える。
鍵のサイズをformula_10ビットとしたとき、この攻撃方法ではformula_27の試行回数で攻撃が行える（ただし、formula_28の記憶領域を必要とする）。一方、単純な攻撃方法ではformula_9回の試行を必要とする（記憶領域はformula_30で済む）。