ブロック暗号の簡単な解説

以下のキーワードの関係をできるだけ平易に説明します。

  • ブロック暗号
  • IV
  • パディング
  • ストリーム暗号
  • 暗号化モード

ブロック暗号

AES や DES と呼ばれる暗号はブロック暗号、特定の長さのデータを「鍵」と呼ばれるデータで暗号化する方式です。
データと鍵の組み合わせに対して暗号化されるデータは唯一定まります。このため鍵と暗号化データからもとのデータを解読(復号)できます。

ストリーム暗号

一般的な応用では、処理するデータの長さは暗号方式の要求する長さ(ブロック長)にならないので対象データをブロックに分割します。そして最後のブロックはぴったりの長さになるよう詰め物(パディング)をします。
ストリーム暗号とは、このようにして任意の長さのデータを暗号化できるようにしたブロック暗号のことです。

暗号化モード

さてストリーム暗号では一般に、暗号化するブロックに前段のブロックの暗号化結果をかき混ぜて簡単に解読されないようにします。 *1
けれど最初のブロックにはかき混ぜるべき前の暗号化結果がないので、暗号化開始時に IV (initial vector) と呼ばれるランダムなデータ列を生成して使います。
ストリーム暗号でのデータのかき混ぜ方は暗号化モードと呼ばれていて、主流のモードは前段の "CBC" です。

*1:というのはデータと鍵が同じなら暗号化結果が唯一定まるため、なにもしなければ解読者へのヒントになってしまうためです。たとえばプロトコルの最初の "HELO" が "IFMP" に写されるとして、メッセージのやりとりを継続的に盗聴している人は "IFMP" を "HELO" と解読できなくてもセッションの特定のメッセージが発せられたことはわかります。