🗂

ECBモードとCBCモード

2023/06/29に公開

このページでは、ECBモード(Electronic Codebook)とCBCモード(Cipher Block Chaining)について記述します。

ブロック暗号の「モード」とは

プロック暗号(DES, AESなど)は、1ブロック分の平文を暗号化する。
1ブロックより長い平文を暗号化するには、ブロック暗号を繰り返す必要がある。
この繰り返す方法を モード(mode) という。

用語の定義
平文ブロック: ブロック暗号で暗号化する対象となる平文
暗号文ブロック: ブロック暗号で平文ブロックを暗号化した暗号文
どちらも長さは1ブロック。

ECBモード(電子コードブックモード:電子符号表モード)

ECBモードは、ブロック暗号の一種であり、暗号化されたデータを固定長のブロックに分割し、それぞれのブロックを独立して暗号化する方法です。各ブロックは同じ鍵で独立して暗号化されるため、同じ平文ブロックは常に同じ暗号文ブロックに変換されます。

利点:

  1. 並列処理が可能であり、暗号化や復号化の高速化に適しています。
  2. データの一部が損失した場合でも、その他のブロックは正常に復号化できます。

欠点:

  1. 同じ平文ブロックは常に同じ暗号文ブロックに変換されるため、パターンが露出する可能性があります。
  2. ブロックごとの独立性が高いため、データの相関性が失われる可能性があります。

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

CBCモードは、ECBモードの欠点を補うために開発されたモードです。各ブロックは前のブロックとのXOR演算を通じて暗号化されます。最初のブロックは初期化ベクトル(IV)とXOR演算され、その結果が次のブロックの暗号化に使用されます。この連鎖のため、平文の各ブロックは前のブロックの影響を受け、同じ平文でも異なる暗号文が生成されます。

利点:

  1. ブロック間の相関性が低くなり、パターンの露出が少なくなります。
  2. 暗号化されたデータの整合性を確認するために、MAC(メッセージ認証コード)を使用することができます。

欠点:

  1. 並列処理ができないため、ECBモードよりも処理速度が遅くなる可能性があります。
  2. データの一部が損失した場合、その後のブロックの復号化も影響を受ける可能性があります。

暗号化

復号化

初期化ベクトル

初期化ベクトルは、IV(initialization vector) と略されます。
Vは、暗号化アルゴリズムで使用されるランダムなビット列であり、ブロック暗号モード(例: CBCモード)において特に重要な役割を果たします。
長さは1ブロック分。

  1. ブロックの連鎖化:
    初期化ベクトルは、CBCモードにおいてブロックの連鎖を確立するために使用されます。最初のブロックはIVと平文ブロックのXOR演算を行うことで暗号化され、その結果が次のブロックの暗号化に使用されます。この連鎖化により、同じ平文ブロックでも異なる暗号文が生成されます。
  2. パターンの防止:
    初期化ベクトルは、ブロックごとの独立性を高めるために重要です。ECBモードのように同じ平文ブロックが常に同じ暗号文ブロックに変換される問題を回避するため、IVはランダム性を持つ必要があります。これにより、パターンが露出するリスクを減らし、暗号化の安全性を高めます。
  3. 暗号文の一意性:
    初期化ベクトルは、暗号文の一意性を確保するためにも重要です。異なるIVを使用することで、同じ平文でも異なる暗号文が生成されます。これにより、攻撃者が暗号文から平文の情報を推測することを困難にし、暗号化の強度を向上させます。
  4. 復号化の正確性:
    初期化ベクトルは、復号化プロセスにおいても重要な役割を果たします。暗号文を復号化する際に、正しいIVを使用することで、ブロックの正確な復号化が可能になります。誤ったIVを使用すると、ブロック間の整合性が崩れ、平文の正確な再構築ができません。

暗号化

復号化

CFBモード(Cipher Feedback Mode)

前の暗号文ブロックをフィードバックして暗号化します。
利点: ストリーム暗号の特性を持ち、リアルタイムの暗号化に適しています。
欠点: 連続したエラーが蓄積される可能性があり、同期の問題が発生する可能性があります。

OFBモード(Output Feedback Mode)

暗号化アルゴリズムの出力をフィードバックして暗号化します。
利点: ストリーム暗号の特性を持ち、同期の問題が発生しないため、通信エラーに強いです。
欠点: 暗号化アルゴリズムの出力に依存するため、出力予測攻撃に対して脆弱性があります。

CTRモード(Counter Mode)

カウンタ値と鍵を組み合わせて暗号化します。
利点: 並列処理が可能であり、高速な暗号化が可能です。同期の問題も発生しません。
欠点: 平文ブロックの重複がある場合に暗号文も重複する可能性があり、セキュリティ上の問題が発生する可能性があります。

結局どれを使うべき?

以上が一部のブロック暗号モードの特徴です。適切なモードを選択するためには、以下の考慮事項を念頭に置く必要があります。

  1. 暗号化の目的と環境:
    データの保護目標や使用環境に応じて、暗号化の目的を明確にしましょう。データの機密性、整合性、リアルタイム性などの要件に基づいて、適切なモードを選択します。
  2. パターンの露出とセキュリティ:
    同じ平文ブロックが同じ暗号文ブロックに変換されるECBモードのようなモードは、パターンの露出リスクがあるため、機密性の高いデータには適していません。パターンの露出を最小限に抑えるために、CBCモードなどのモードを選択することが推奨されます。
  3. 処理速度とリソース:
    並列処理が可能なモード(ECBモードやCTRモードなど)は高速な暗号化が可能ですが、セキュリティや同期の問題が発生する場合があります。処理速度やシステムリソースの制約を考慮し、モードの選択を行いましょう。
  4. 予測攻撃や認証の要件:
    暗号化の安全性や認証の要件に応じて、モードの選択を検討しましょう。特にストリーム暗号モード(CFBモードやOFBモード)は、予測攻撃に対して脆弱性がある場合があるため、適切な対策を講じる必要があります。

適切なブロック暗号モードの選択は、データの機密性とセキュリティの確保に重要です。具体的な要件と環境に合わせて適切なモードを選択し、暗号化の強度と効率性をバランスさせるようにしましょう。

参照

https://zenn.dev/kunosu/books/12fa489ef0821d803c4d/viewer/cbc
・chatGPT 3.5

Discussion