プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

情報セキュリティにおけるブロック暗号の5つの動作モード(ECB・CBC・OFB・CFB・CTR)を徹底解説

ブロック暗号とは、共有された秘密鍵を用いて、一定サイズのデータブロック単位で処理を行う共通鍵(対称鍵)暗号アルゴリズムです。暗号化の対象となる元のデータを「平文」と呼び、暗号化によって生成されたデータを「暗号文」と呼びます。そして、平文の暗号化にも暗号文の復号にも、同一の鍵を使用できるのが特徴です。

ブロック暗号には複数の「動作モード」が存在し、それぞれ仕組みや特性が異なります。本記事では、代表的な5つの動作モードについて詳しく解説します。

1. 電子コードブック(ECB)モード

ECBモードは、最もシンプルな動作モードです。平文を64ビットごとのブロックに分割し、各ブロックを独立して暗号化します。すべてのブロックに対して同一の鍵を使用でき、各ブロックは鍵によって個別に暗号化され、対応する暗号文ブロックが生成されます。

ECBモードでは、暗号関数が各平文ブロックに個別に適用され(復号時はその逆関数が適用される)、各ブロックが互いに依存しないため、複数のブロックを並列に暗号化・復号できます。この特性により、処理速度を大幅に向上させることが可能です。

2. 暗号ブロック連鎖(CBC)モード

CBCモードでは、各平文ブロックを暗号化する前に、直前の暗号文ブロックとの排他的論理和(XOR)を取ります。最初のブロックについては「初期化ベクトル(IV)」が使用され、送信者と受信者は事前に取り決めた同じIVを共有します。

CBCモードはメッセージの暗号化に広く利用されていますが、連鎖構造を持つため並列処理には不向きであり、ランダムアクセス型のファイルデータの暗号化・復号には適していません。

3. 出力フィードバック(OFB)モード

OFBモードはCFBモードとよく似ていますが、決定的な違いが一つあります。それは、暗号文の各ビットが直前のビットに依存しないという点です。この特性により、あるブロックで発生したエラーが別のブロックへ伝播すること(誤り伝播)を防げます。

この方式の利点は、伝送中に発生したビットエラーが拡散しないことです。一方で欠点として、CFBモードと比較してメッセージフロー改ざん攻撃に対して脆弱である点が挙げられます。

4. 暗号フィードバック(CFB)モード

CFBモードでは、データを8ビットなど小さな単位ごとに暗号化します。そのため、ストリーム暗号的な処理が必要なアプリケーションでの利用に適しています。

暗号化プロセスにおいては、各暗号文ブロックが次の平文ブロック処理への入力として供給されます。また、CFBモードはECBモードとも異なり、各暗号文ブロックの暗号化は、入力される平文ブロック・暗号鍵・直前の暗号文ブロックの3要素に基づいて行われる点が特徴です。

このように、CFBモードは主に、ブロック単位ではなくより小さなデータ単位で動作するよう設計されたアプリケーションで広く利用されています。

5. カウンタ(CTR)モード

CTRモードでは、平文ブロックと同じサイズの「カウンタ」を使用します。暗号化の際は、カウンタの値を暗号化し、それを平文ブロックとXORすることで暗号文ブロックを生成します。

復号の際も同様に、同じカウンタ値のシーケンスを使用し、暗号化された各カウンタを暗号文ブロックとXORすることで平文を復元できます。CTRモードは、ハードウェアおよびソフトウェアの両面で高い効率性を発揮し、事前処理の容易さ、機密性の保護、データ整合性の確保といった観点から、多くのシステムで採用されています。

まとめ

ブロック暗号の動作モードは、それぞれ得意な用途と弱点が異なります。ECBはシンプルだが安全性に課題があり、CBCは連鎖構造による高い安全性を持つ一方で並列処理が苦手、OFBとCFBはストリーム暗号的な用途に適し、CTRは高速かつ柔軟な現代的な選択肢です。用途や要件に応じて最適なモードを選択することが、情報セキュリティの実践において重要となります。

  1. 現代ブロック暗号の構成要素とは?Dボックス・Sボックス・循環シフトを徹底解説

    現代ブロック暗号とは現代のブロック暗号とは、mビットの平文ブロックを暗号化し、mビットの暗号文ブロックを復号する暗号方式です。暗号化および復号の処理にはKビットの鍵が使用され、復号アルゴリズムは暗号化アルゴリズムの逆操作として機能します。また、暗号化と復号の両方で同じ鍵が用いられます。ブロック暗号は、nビットの平文ブロックを入力としてnビットの暗号文ブロックを出力します。取り得る平文ブロックの組み合わせは複数存在するため、暗号化を可逆(=復号が可能)にするためには、それぞれの平文ブロックが一意の暗号文ブロックへ対応しなければなりません。このような変換は「可逆変換」または「非特異変換」と呼ばれま

  2. Java 9モジュールの3つのコンパイルモードとは?レガシー・シングル・マルチモードを解説

    モジュールとはパッケージを格納するコンテナであり、各モジュールにはモジュール記述子(module descriptor)が含まれています。この記述子には、モジュール名、依存する他のモジュールの名前、そして外部に公開するパッケージ名が定義されます。公開(exports)されたパッケージは、そのモジュールに依存関係を持つモジュールからのみ利用可能です。module com.tutorialspoint.app { /** com.tutorialspoint.app が依存するモジュール */ requires com.tutorialspoint.services; /*