ブロック暗号動作モード

この章では、ブロック暗号のさまざまな動作モードについて説明します。これらは、一般的なブロック暗号の手続き規則です。興味深いことに、モードが異なると、基礎となるブロック暗号のセキュリティが強化されるさまざまなプロパティが実現されます。

ブロック暗号は、固定サイズのデータ​​ブロックを処理します。通常、メッセージのサイズはブロックサイズよりも大きくなります。したがって、長いメッセージは一連の連続したメッセージブロックに分割され、暗号はこれらのブロックを一度に1つずつ操作します。

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

このモードは、順番にリストされた一連のメッセージブロックを処理する最も簡単な方法です。

操作

  • ユーザーは平文の最初のブロックを取得し、それをキーで暗号化して暗号文の最初のブロックを生成します。

  • 次に、平文の2番目のブロックを取得し、同じキーを使用して同じプロセスを実行します。

ECBモードは deterministicつまり、平文ブロックP1、P2、…、Pmが同じキーで2回暗号化されている場合、出力される暗号文ブロックは同じになります。

実際、特定のキーについて、技術的には、考えられるすべての平文ブロックの暗号文のコードブックを作成できます。暗号化では、必要な平文を検索し、対応する暗号文を選択するだけで済みます。したがって、この操作はコードブック内のコードワードの割り当てに類似しているため、正式な名前が付けられます-電子コードブック操作モード(ECB)。それは次のように示されています-

ECBモードの分析

実際には、アプリケーションデータには通常、推測できる部分的な情報が含まれています。たとえば、給与の範囲を推測することができます。ECBからの暗号文により、攻撃者は、平文メッセージが予測可能な範囲内にある場合、試行錯誤によって平文を推測することができます。

たとえば、ECBモードの暗号文が給与額を暗号化することがわかっている場合、試行回数が少ないと、攻撃者はその額を回復できます。一般に、決定論的暗号を使用することは望まないため、ほとんどのアプリケーションでECBモードを使用するべきではありません。

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

CBC動作モードは、暗号文を生成するためのメッセージ依存性を提供し、システムを非決定論的にします。

操作

CBCモードの動作を次の図に示します。手順は次のとおりです-

  • nビットの初期化ベクトル(IV)を最上位レジスタにロードします。

  • nビットのプレーンテキストブロックをトップレジスタのデータ値とXORします。

  • XOR演算の結果を、キーKを使用した基礎となるブロック暗号で暗号化します。

  • 暗号文ブロックを最上位レジスタにフィードし、すべての平文ブロックが処理されるまで操作を続行します。

  • 復号化の場合、IVデータは最初の暗号文ブロックが復号化されてXORされます。最初の暗号文ブロックも、次の暗号文ブロックを復号化するためにIVを置き換えるレジスタに供給されます。

CBCモードの分析

CBCモードでは、現在の平文ブロックが前の暗号文ブロックに追加され、結果がキーで暗号化されます。したがって、復号化は逆のプロセスであり、現在の暗号文を復号化してから、前の暗号文ブロックを結果に追加します。

ECBに対するCBCの利点は、IVを変更すると、同一のメッセージに対して異なる暗号文が生成されることです。欠点としては、連鎖効果により、復号化中に送信エラーがさらにいくつかのブロックに伝播されます。

CBCモードは、よく知られているデータ発信元認証メカニズムの基礎を形成していることは言及する価値があります。したがって、対称暗号化とデータ発信元認証の両方を必要とするアプリケーションには利点があります。

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

このモードでは、次の平文ブロックを暗号化するために、各暗号文ブロックが暗号化プロセスに「フィードバック」されます。

操作

CFBモードの動作を次の図に示します。たとえば、現在のシステムでは、メッセージブロックのサイズは「s」ビットで、1 <s <nです。CFBモードでは、初期ランダムnビット入力ブロックとして初期化ベクトル(IV)が必要です。IVは秘密である必要はありません。操作の手順は次のとおりです。

  • IVをトップレジスタにロードします。

  • キーKを使用して、基になるブロック暗号を使用して最上位レジスタのデータ値を暗号化します。

  • 暗号化プロセスの出力の最上位ビット(左ビット)の「s」個のみを取得し、それらを「s」ビットの平文メッセージブロックとXORして、暗号文ブロックを生成します。

  • すでに存在するデータを左にシフトして暗号文ブロックを最上位レジスタにフィードし、すべての平文ブロックが処理されるまで操作を続行します。

  • 基本的に、前の暗号文ブロックはキーで暗号化され、結果は現在の平文ブロックにXORされます。

  • 復号化についても同様の手順に従います。事前に決定されたIVは、復号化の開始時に最初にロードされます。

CFBモードの分析

CFBモードはECBモードとは大きく異なり、特定の平文ブロックに対応する暗号文は、その平文ブロックとキーだけでなく、前の暗号文ブロックにも依存します。言い換えれば、暗号文ブロックはメッセージに依存しています。

CFBには非常に奇妙な機能があります。このモードでは、ユーザーはブロック暗号の暗号化プロセスのみを使用して暗号文を復号化します。基礎となるブロック暗号の復号化アルゴリズムは使用されません。

どうやら、CFBモードはブロック暗号を一種のストリーム暗号に変換しているようです。暗号化アルゴリズムは、最下位レジスタに配置されるキーストリームを生成するためのキーストリームジェネレータとして使用されます。次に、このキーストリームは、ストリーム暗号の場合と同様に平文とXORされます。

CFBモードは、ブロック暗号をストリーム暗号に変換することにより、ブロック暗号の有利な特性を保持しながら、ストリーム暗号の有利な特性のいくつかを提供します。

反対に、ブロックの変更により送信エラーが伝播します。

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

これには、基礎となるブロック暗号からの連続する出力ブロックをフィードバックすることが含まれます。これらのフィードバックブロックは、CFBモードの場合のようにキーストリームジェネレーターとして機能する暗号化アルゴリズムに供給するビットの文字列を提供します。

生成されたキーストリームは、プレーンテキストブロックとXORされます。OFBモードでは、最初のランダムなnビット入力ブロックとしてIVが必要です。IVは秘密である必要はありません。

操作は次の図に示されています-

カウンター(CTR)モード

これは、フィードバックのないCFBモードのカウンターベースバージョンと見なすことができます。このモードでは、送信者と受信者の両方が信頼できるカウンターにアクセスする必要があります。このカウンターは、暗号文ブロックが交換されるたびに新しい共有値を計算します。この共有カウンターは必ずしも秘密の値ではありませんが、問題は、双方がカウンターの同期を維持する必要があることです。

操作

次の図に、CTRモードでの暗号化と復号化の両方を示します。操作の手順は次のとおりです。

  • 最上位レジスタへの初期カウンタ値のロードは、送信側と受信側の両方で同じです。CFB(およびCBC)モードのIVと同じ役割を果たします。

  • カウンタの内容をキーで暗号化し、結果を最下位のレジスタに配置します。

  • 最初の平文ブロックP1を取得し、これを最下位レジスタの内容にXORします。この結果がC1です。C1を受信機に送信し、カウンターを更新します。カウンターの更新により、CFBモードの暗号文フィードバックが置き換えられます。

  • 最後の平文ブロックが暗号化されるまで、この方法を続けます。

  • 復号化は逆のプロセスです。暗号文ブロックは、カウンター値の暗号化されたコンテンツの出力とXORされます。各暗号文ブロックカウンターの復号化後、暗号化の場合と同様に更新されます。

カウンターモードの分析

メッセージの依存関係がないため、暗号文ブロックは前の平文ブロックに依存しません。

CFBモードと同様に、CTRモードにはブロック暗号の復号化プロセスは含まれません。これは、CTRモードが実際にブロック暗号を使用してキーストリームを生成しているためです。キーストリームは、XOR関数を使用して暗号化されます。言い換えると、CTRモードはブロック暗号もストリーム暗号に変換します。

CTRモードの重大な欠点は、送信側と受信側に同期カウンターが必要なことです。同期が失われると、平文が正しく回復されません。

ただし、CTRモードにはCFBモードのほとんどすべての利点があります。また、伝送誤差を全く伝播しません。