暗号利用モードとは、
ブロック暗号を用いて、ブロック長よりも長いメッセージを
暗号化するための方式です。
ブロック暗号は固定長のデータを
暗号化しますが、実際のメッセージは多くの場合、ブロック長よりも長いため、
暗号利用モードが不可欠となります。
暗号利用モードには、主に秘匿用と認証用の2種類があります。
秘匿用の暗号利用モード
秘匿用の
暗号利用モードは、メッセージの内容を第三者から隠蔽することを目的とします。代表的なモードとして、ECB、CBC、CFB、OFB、CTRがあります。これらのうち、ECB、CBC、OFB、CFBは、FIPS、ANSI、ISO、JISなどの標準規格で規定されています。また、CTRモードは、AES(
Advanced Encryption Standard)の制定時に追加されました。
ECB (Electronic Codebook) モード
ECBモードは、最も単純な
暗号利用モードです。メッセージをブロックに分割し、各ブロックを独立して
暗号化します。同じ鍵で同じ
平文ブロックを
暗号化すると、常に同じ
暗号文ブロックが得られるため、パターンが可視化されてしまうという欠点があります。そのため、ECBモードは機密性の高い情報の
暗号化には推奨されません。特に、ビットマップ画像のようなパターンが重要なデータには不向きです。
CBC (Cipher Block Chaining) モード
CBCモードは、1976年に
IBMによって開発された、より安全なモードです。各
平文ブロックを
暗号化する前に、前の
暗号文ブロックとのXOR演算を行います。これにより、同じ
平文ブロックでも、前のブロックが異なれば異なる
暗号文ブロックが生成されます。最初のブロックの
暗号化には初期化ベクトル(IV)を使用します。CBCモードはECBモードの欠点を克服していますが、
暗号化処理を並列化できないという制約があります。
CBCモードの暗号化と復号
暗号化:
Cᵢ = Eₖ(Pᵢ ⊕ Cᵢ₋₁), C₀ = IV
復号:
Pᵢ = Dₖ(Cᵢ) ⊕ Cᵢ₋₁, C₀ = IV
ここで、Cᵢはi番目の
暗号文ブロック、Pᵢはi番目の
平文ブロック、Eₖは鍵Kによる
暗号化関数、Dₖは鍵Kによる復号関数、⊕はXOR演算、IVは初期化ベクトルを表します。
PCBC (Propagating Cipher Block Chaining) モード
PCBCモードはCBCモードの変形であり、各
平文ブロックと前の
平文ブロック、
暗号文ブロックのXORを取ってから
暗号化します。
ケルベロス認証バージョン4などで使用されていますが、一般的な利用は少なくなっています。
PCBCモードの暗号化と復号
暗号化:
Cᵢ = Eₖ(Pᵢ ⊕ Pᵢ₋₁ ⊕ Cᵢ₋₁), P₀ ⊕ C₀ = IV
復号:
Pᵢ = Dₖ(Cᵢ) ⊕ Pᵢ₋₁ ⊕ Cᵢ₋₁, P₀ ⊕ C₀ = IV
CFB (Cipher Feedback) モード
CFBモードは、
ブロック暗号を
ストリーム暗号のように扱うモードです。前の
暗号文ブロックを
暗号化し、その結果と
平文ブロックのXORを取って
暗号文を生成します。自己同期型
ストリーム暗号として機能させるために、
シフトレジスタを使用することが一般的です。
CFBモードの暗号化と復号
暗号化:
Cᵢ = Eₖ(Cᵢ₋₁) ⊕ Pᵢ, C₀ = IV
復号:
Pᵢ = Eₖ(Cᵢ₋₁) ⊕ Cᵢ, C₀ = IV
OFB (Output Feedback) モード
OFBモードも
ブロック暗号を
ストリーム暗号として扱うモードです。鍵ストリームを生成し、
平文ブロックとのXOR演算を行います。
暗号化と復号が同じ処理になるという特徴があります。OFBモードは、鍵ストリームの生成が以前のすべての操作に依存するため、並列化が困難です。
OFBモードの暗号化と復号
暗号化:
Cⱼ = Pⱼ ⊕ Oⱼ
復号:
Pⱼ = Cⱼ ⊕ Oⱼ
CTR (Counter) モード
CTRモードは、
ブロック暗号を同期
ストリーム暗号として使用します。カウンターと呼ばれる値を
暗号化して鍵ストリームを生成し、
平文とのXORを取って
暗号文を生成します。CTRモードは並列処理が可能で、OFBモードのような短いサイクルの問題もありません。
認証用の暗号利用モード
認証用の
暗号利用モードは、メッセージの完全性を保証し、改ざんを検出するために使用されます。代表的なモードとして、CCM、GCM、OCBがあります。
その他の暗号利用モード
上記以外にも、CTS、2DEM、ABC、IGE、F8@3GPPなど、さまざまな
暗号利用モードが存在します。
規格
暗号利用モードに関する規格は、FIPS PUB-81、ANSI X3.106、ISO 8372:1987、ISO/IEC 10116、JIS X 5052:1990、JIS X 5053:1998、RFC 3610などで規定されています。
まとめ
暗号利用モードは、
ブロック暗号の機能を拡張し、より柔軟で安全な
暗号化を実現するための重要な要素です。それぞれのモードには特性があり、用途に応じて適切なモードを選択することが重要です。