暗号セキュリティ理論と開発パート 2 — 対称暗号化ブロック暗号モード

目次

1ブロックパスワード

1.1 ブロック暗号とは何ですか?

1.2 ブロック暗号の方式は何ですか?

1.3 平文のグループ化と暗号文のグループ化

2 ECB モード (非推奨であり、Golang にはインターフェイスが提供されていません)

3 CBCモード

3.1 初期化ベクトル

3.2 暗号化および復号化モード

4 CFBモード

4.1 暗号化および復号化モード

 4.2 CFB モードとストリーム暗号

5 OFBモード

5.1 暗号化と復号化のプロセス

 5.2 CFBモードとOFBモードの比較

6 CTRモード

6.1 暗号化と復号化のプロセス

 6.2 カウンタ生成アルゴリズム

6.3 OFBモードとCTRモードの比較

6.4 CTRモードの機能

7 まとめ

事前知識 -ビット単位の排他的論理和 (XOR) 

1ブロックパスワード

1.1 ブロック暗号とは何ですか?

ブロック暗号アルゴリズムは固定長ブロックのみを暗号化できますが、暗号化する必要がある平文の長さがブロック暗号のブロック長を超える場合があります。この場合、すべてのブロックを暗号化するにはブロック暗号アルゴリズムを繰り返す必要があります。長い平文。この反復方式をブロック暗号のモードと呼びます

前回の記事で紹介したDESと AES はどちらもブロック暗号であり、固定長の平文しか暗号化できません。任意の長さの平文を暗号化する必要がある場合は、ブロック暗号を反復する必要があります。ブロック暗号の反復方法は、ブロック暗号の「モード」と呼ばれます。

ブロック暗号には多くのモードがあり、モードを適切に選択しないと機密性が保証されません。たとえば、ECB モードが使用されている場合、平文内のいくつかのパターンは暗号文を通じて識別できます。

ブロック暗号の主なモード (ECB、CBC、CFB、OFB、CTR)、そして最後にどのモードを使用するべきかを検討しましょう。

1.2 ブロック暗号の方式は何ですか?

ここで、多くの読者は、「平文が非常に長い場合は、平文をいくつかのグループに分割して、それぞれを 1 つずつ暗号化したほうがよいのではないか?」と言うかもしれませんが、実際には、それほど単純ではありません。平文を複数のグループに分けて一つずつ暗号化する方式をECBモードと呼びますが、このモードには大きな弱点があります(後述)。パスワードについてあまり詳しくないプログラマは、暗号化ソフトウェアを作成するときに ECB モードを使用することがよくありますが、これを行うと誤ってセキュリティ ホールが発生する可能性があるため、ECB モードを使用しないように注意する必要があります

モードにはさまざまな種類がありますが、ブロック暗号の主なモードは次のとおりです。

  • ECBモード: 電子コードブックモード

  • CBCモード:Cipher Block Chainingモード(暗号ブロック連鎖モード)

  • CFBモード:Cipher FeedBackモード(暗号文フィードバックモード)

  • OFBモード:Output FeedBackモード(出力フィードバックモード)

  • CTRモード:カウンターモード(カウンターモード)

1.3 平文のグループ化と暗号文のグループ化

パターンを紹介する前に、2 つの用語を学びましょう。

平文ブロック:ブロック暗号アルゴリズムで暗号化オブジェクトとして使用される平文を指します。平文ブロックの長さは、ブロック暗号アルゴリズムのブロック長と同じです。

暗号文グループ化:ブロック暗号アルゴリズムを使用して平文グループを暗号化した後に生成される暗号文を指します。

 **図の複雑化を避けるため、今後「ブロック暗号アルゴリズムによる暗号化」を「暗号化」と略記し、鍵の説明を省略します。 

2 ECB モード (非推奨であり、Golang にはインターフェイスが提供されていません)

ECB (Electronic Code Book、電子コードブック) モードは最も単純な暗号化モードで、平文メッセージを固定サイズのブロック (グループ) に分割し、各ブロックを個別に暗号化します。各ブロックの暗号化と復号は独立しており、同じ暗号化方式を使用しているため並列計算が可能ですが、この方式でブロックを解読すると、すべての平文データを同じ方式で復号できるため、セキュリティが向上します。比較的貧しい。データが少ない状況に適しており、暗号化する前に平文データをブロック サイズの整数倍に埋める必要があります。

 

 

ECBモードの暗号化を使用すると、同じ平文グループは同じ暗号文グループに変換される、つまり「平文グループ→暗号文グループ」という巨大な対応表として理解できるため、ECBモードも同様です。電子コードブック モードと呼ばれ、最後の平文パケットの内容がパケット長に満たない場合、1 つのパケット長の値がパケット長と等しくなるように特定のデータをパディングする必要があります

ECB モードは、すべてのモードの中で最も単純です。ECBモードでは、平文グループと暗号文グループは1対1に対応するため、平文中に同一の平文グループが複数存在する場合、それらの平文グループは最終的に同じ暗号文グループに変換されます。このように、暗号文を観察するだけで、平文中にどのような組み合わせが繰り返されているかが分かり、パスワードを解読する手がかりとなるため、ECBモードには一定のリスクがあります。

3 CBCモード

CBC (Cipher Block Chaining)モードでは、各グループは最初に前のグループの暗号化されたデータと XOR 演算されてから、暗号化される必要がありますこのように、各暗号文ブロックはそのブロックの前のすべての平文ブロックに依存します。各メッセージを一意に保つために、最初のデータ ブロックは暗号化される前に初期化ベクトル IV と XOR される必要がありますCBC モードは最も一般的に使用される暗号化モードですが、その主な欠点は、暗号化が連続的で並列処理できないこと、および ECB と同様に、メッセージ ブロックをブロック サイズの整数倍まで埋める必要があることです。

3.1 初期化ベクトル

最初の平文群を暗号化する場合、「前の暗号文群」が存在しないため、「前の暗号文群」と置き換わる1ブロック長のビット列をあらかじめ用意しておく必要があります。このビット列を初期化ベクトル(初期化ベクトル)と呼びます。 )

通常、IV と略されます。一般に、暗号化のたびに異なるビット列が初期化ベクトルとしてランダムに生成されます。

平文グループは暗号化前に「前の暗号文グループ」とXORをとる必要があるため、平文グループ1と2の値が等しくても、暗号文グループ1と2の値は必ずしも等しいとは限りません。このように、ECB モードの欠点は CBC モードには存在しません。

3.2 暗号化および復号化モード

中国のイラスト:

英語のイラスト:

 

パケットの暗号化プロセスを分離すると、ECB モードと CBC モードの違いを簡単に比較できます。ECB モードは暗号化のみを実行しますが、CBC モードは暗号化の前に XOR を実行します。

4 CFBモード

CFBモードの正式名称はCipher FeedBackモード(暗号文フィードバックモード)です。CFB モードでは、前のグループの暗号文が暗号化され、現在のグループの平文と XOR 演算されて、現在のグループの暗号文が生成されます

ここでのいわゆるフィードバックとは、入力端末に戻すことを指します。つまり、前の暗号文グループが暗号アルゴリズムの入力端末に送り返されることになります。

CFB モードでの復号化プロセスと CBC モードでの暗号化プロセスは、実際には非常に似ています。

4.1 暗号化および復号化モード

 

ECB モードおよび CBC モードでは、平文グループは暗号アルゴリズムを通じて暗号化されますが、CFB モードでは、平文グループは暗号アルゴリズムを通じて直接暗号化されません。

上の図からわかるように、平文グループと暗号文グループの間には「暗号化」ステップはありません。CFB モードでは、平文ブロックと暗号文ブロックの間に XOR が 1 つだけ存在します。

CBC モードと CFB モードを比較すると、違いがわかります (以下に示すように)。CBC モードでは、平文のグループ化と暗号文のグループ化の間に XOR と暗号化アルゴリズムの 2 つのステップがありますが、CFB モードでは、平文のグループ化と暗号文のグループ化の間には XOR のみがあります。

 4.2 CFB モードとストリーム暗号

CFB モードは、「平文グループ」と「暗号アルゴリズムの出力」を XOR 演算することで「暗号文グループ」を生成します。

CFB モードでは、暗号アルゴリズムの出力はランダムなビット シーケンスと同等です。暗号アルゴリズムの出力は計算されたものであり、真にランダムではないため、CFB パターンは理論的には解読不可能ではありません。

CFB モードの暗号化アルゴリズムによって生成されるビット シーケンスは、キー ストリームと呼ばれますCFB モードでは、暗号アルゴリズムはキー ストリームの生成に使用される擬似乱数ジェネレーターに相当し、初期化ベクトルは擬似乱数ジェネレーターの「シード」に相当します。

   CFB モードでは、平文データをビットごとに暗号化できるため、CFB モードはブロック暗号を使用してストリーム暗号を実装する方法と考えることができます

5 OFBモード

OFBタイプの正式名称はOutput-Feedbackモード(アウトプットフィードバックモード)です。OFB モードでは、暗号アルゴリズムの出力が暗号アルゴリズムの入力にフィードバックされます。つまり、前のブロック暗号アルゴリズムの出力が現在のブロック暗号アルゴリズムの入力になります (下の図)。

OFBモードは、平文を直接暗号アルゴリズムで暗号化するのではなく、「平文群」と「暗号アルゴリズムの出力」をXOR演算して「暗号文群」を生成します。非常に異なる類似性。

5.1 暗号化と復号化のプロセス

 5.2 CFBモードとOFBモードの比較

OFB モードと CFB モードの違いは、暗号アルゴリズムの入力のみです。

CFB 式では、暗号アルゴリズムの入力は前の暗号文グループです。つまり、暗号文グループが暗号化アルゴリズムにフィードバックされるため、「暗号文フィードバック モード」と呼ばれます。

対照的に、OFB モードでは、暗号アルゴリズムの入力は暗号アルゴリズムの前の出力です。つまり、出力は暗号アルゴリズムにフィードバックされるため、「出力フィードバック モード」と呼ばれます。

グループを抽出し、CFB モードと OFB モードを比較した場合。それらの違いは簡単にわかります(下の図)。

CFB モードでは暗号文グループがフィードバックされるため、最初の平文グループから順に暗号化する必要があり、平文グループ 1 をスキップすることはできず、平文グループ 2 を最初に暗号化する必要があります。

対照的に、OFB モードでは、平文のグループ化に関係なく、XOR に必要なビット列 (キー ストリーム) を暗号アルゴリズムを通じて事前に生成できます。必要なキーストリームが事前に準備されている限り、平文から暗号文を生成する実際のプロセスで暗号アルゴリズムを使用する必要はありません。プレーンテキストとキー ストリームの XOR を実行するだけです。AES などの暗号化アルゴリズムと比較して、XOR 演算は非常に高速です。これは、キー ストリームが事前に準備されている限り、暗号化を迅速に完了できることを意味します。別の観点から見ると、キー ストリームの生成と XOR 演算の実行の操作は並列化できます。

6 CTRモード

CTRモードの正式名称はCounterモード(カウンターモード)です。CTRモードは、逐次蓄積されるカウンタを暗号化してキーストリームを生成するストリーム暗号です(下図)

CTR モードでは、各グループは連続的に蓄積されるカウンターに対応し、キー ストリームはカウンターを暗号化することによって生成されます。つまり、カウンタを暗号化して得られたビット列と平文群との排他的論理和をとることにより、最終的な暗号文群が得られる。

6.1 暗号化と復号化のプロセス

 

 6.2 カウンタ生成アルゴリズム

暗号化が行われるたびに、カウンタの初期値として異なる値(nonce)が生成されます。パケット長が128ビット(16バイト)の場合、カウンタの初期値は以下のような形になる。

 最初の8バイトはノンス(乱数)で、この値は暗号化するたびに異なり、最後の8バイトはグループのシーケンス番号であり、この部分が順次蓄積されていく。暗号化プロセス中に、カウンターの値は次のように変化します。

 上記の生成方法によれば、カウンタの値が毎回異なることを保証することができる。カウンタの値は毎回異なるため、グループごとにカウンタを暗号化して得られるキーストリームも異なります。言い換えれば、この方法はブロック暗号を使用して、ランダムなビット シーケンスの生成をシミュレートします。

6.3 OFBモードとCTRモードの比較

CTR モードは、OFB モードと同様、ストリーム暗号です。単一パケットの暗号化処理を取り出してみると、OFB モードと CTR モードの違いが分かりやすくなります(下図)。OFB モードは暗号化された出力を入力に反映しますが、CTR モードはカウンター値を入力として使用します。

6.4 CTRモードの機能

CTR モードの暗号化と復号化はまったく同じ構造を使用するため、プログラムへの実装が容易です。この機能は、同じくストリーム暗号である OFB モードと同じです。

また、CTRモードではパケットを任意の順序で暗号化および復号できるため、暗号化および復号に必要な「カウンタ」の値をノンスとパケットシーケンス番号から直接計算できます。このプロパティは OFB モードでは使用できません。

パケットを任意の順序で処理できるということは、並列コンピューティングが実現できることを意味します。並列コンピューティングをサポートするシステムでは、CTR モードは非常に高速です。

7 まとめ

 

おすすめ

転載: blog.csdn.net/weixin_41551445/article/details/126401736