暗号利用モード
暗号利用モード(あんごうりようモード、Block cipher modes of operation)とは、ブロック暗号を利用して、ブロック長よりも長いメッセージを暗号化するメカニズムのことである。
ECBモード(単純なブロック暗号の利用法)では、ある鍵で同一の平文を暗号化すると、同一の暗号文になる。したがって、長いメッセージ(画像データなど)のある部分が他の部分と同じであるかどうかが、暗号文の比較によって判断できてしまうので、他のモードが必要となった。
暗号利用モードには、秘匿用の利用モードと、認証用の利用モードとがある。
秘匿用の利用モード
秘匿用として多くの暗号利用モードが定義されており、これらのうち、ECB, CBC, OFB, CFBの4つは、FIPS, ANSIのほか、ISO、JISで規格化されている。またCTRは、AES制定の際に追加されたモードである。
代表的な暗号利用モードを以下に示す。以下の説明で、
ECBモードの欠点は、同じ鍵を用いた場合には、同じ平文ブロックを暗号化した結果の暗号文ブロックが常に同じとなることである。このため、データのパターンを隠蔽することができない。メッセージの機密性の保持には向かず、暗号化プロトコルにおける使用は推奨されない。同じ入力に対して常に同じ出力を返すことから、ECBモードは反射攻撃に対しても脆弱である。
ECBモードにおいてデータのパターンがどの程度残されるかを、ビットマップ画像の暗号化を用いて説明する。各々のピクセルの色情報を暗号化しても、暗号化処理後の画像にはピクセルごとの色情報のパターンが残留している。
Cipher Block Chaining (CBC)
CBC | |
---|---|
Cipher Block Chaining | |
暗号化処理の並列化: | 不可 |
復号処理の並列化: | 可 |
Random Read: | 可 |
CBCモード (Cipher Block Chaining Mode) は、1976年にIBMによって開発された[1]。CBCモードでは、平文の各ブロックは前の暗号文とのXORを取ってから暗号化される。すなわち、各々の暗号文ブロックはそれ以前のすべての平文ブロックに依存することとなる。メッセージごとのユニーク性を確保するため、最初のブロックの暗号化には初期化ベクトルが用いられる。
- 暗号化
CBCモードは、最も広く用いられている暗号利用モードであり、ECBモードの欠点を補うものである。このモードの主な欠点は、各ブロックの暗号化にその前のブロックの暗号化の結果を使用することから暗号化処理を並列化することができないことと、暗号文ブロックのサイズの整数倍となるようメッセージをパディングする必要があることである。後者の例の一つが、Ciphertext stealingと呼ばれるものである。CBCモードの暗号化においては、平文あるいは初期化ベクトルが1ビットでも変化すると、それ以降の暗号文すべてが変化することとなる。
不正な初期化ベクトルを用いて復号した場合、復号後の平文の最初のブロックは正しい結果とはならないが、それ以降のブロックは正しく復号される。これは、隣接する2つの暗号文ブロックから平文を回復することが可能なためである。これにより、CBCモードの復号処理は並列化が可能となる。CBCモードの復号においては、暗号文が1ビット変化した場合、その位置に対応するブロック全体および次のブロックにおける対応するビットの復号結果に影響を及ぼすが、それ以外のブロックには影響を及ぼさない。
Propagating Cipher Block Chaining (PCBC)
PCBC Propagating Cipher Block Chaining 暗号化処理の並列化: 不可 復号処理の並列化: 不可 Random Read: 不可 PCBCモード (Propagating Cipher Block Chaining Mode[2] あるいは Plaintext Cipher Block Chaining mode[3]) は、CBCモードの変法である。
- 暗号化
PCBCモードはケルベロス認証のバージョン4およびWASTEにおいて用いられているが、あまり一般的ではない。PCBCモードでは隣接する2つの暗号文ブロックを入れ替えたとしてもそれ以降のブロックの復号に影響しない[4]。このため、ケルベロス認証のバージョン5ではPCBCモードは採用されていない。
Cipher Feedback (CFB)
CFB Cipher Feedback 暗号化処理の並列化: 不可 復号処理の並列化: 可 Random Read: 可 CFBモード (Cipher Feedback Mode) は、CBCモードと類似しており、ブロック暗号を自己同期型のストリーム暗号として扱うものである。CFBモードの操作はCBCモードとよく似ており、特に復号処理はCBCモードでの復号処理をほぼそのまま逆転させたものとなる。
- 暗号化
上に示したもっとも単純なCFBモードでは、CBCモードのような自己同期型とはなっていない。1バイト、1ビットでも欠けた場合にはそれ以降の復号は不可能となる。そのような欠落の後も同期を続けるためには、1バイト、1ビットを同時に暗号化する必要がある。ブロック暗号の入力にシフトレジスタを組み合わせることで、CFBモードは自己同期型で利用することが可能となる。
CFBモードを任意のxの整数倍の欠落に対しても同期を維持することが可能な自己同期型のストリーム暗号として利用するためには、ブロックサイズと初期化ベクトルのサイズでシフトレジスタを初期化する必要がある。これはブロック暗号によって暗号化され、暗号化結果の上位xビットは平文のxビットとのXORを取られ、これがxビットの暗号文となる。これらxビットの出力はシフトレジスタにシフトされ、次のxビットの平文の処理に用いられる。復号も同様であり、初期化ベクトルから始まり、復号、復号結果の上位xビットと暗号文のxビットのXORによりxビットの平文となり、これが次のxビットの暗号文の処理に用いられる。このような処理はCFB-8あるいはCFB-1として知られている(シフト量の大きさによる)[5]。
まとめると次のようになる。ここで、Si は i 番目のシフトレジスタの状態、a << x は x ビットだけシフトした a、head(a, x) は a の上位 x ビット、n は初期化ベクトルのビット数である。
- 暗号化
各々の操作はそれ以前のすべての操作に依存していることから、暗号化、復号ともに処理の並列化は不可能である。しかし、平文あるいは暗号文は各操作の最後のXORにのみ用いられることから、ブロック暗号による操作を先行して処理しておき、XORのみを最後に連続して行うことは可能である。
入力として0が連続する文字列を定数としてCBCモードを使用することでOFBモードの鍵ストリームを生成することができる。これは、CBCモード向けの高速なハードウェア実装をOFBモードに流用することが可能であることを意味する。
CFBモードのようにブロックの一部をフィードバックに用いた場合、OFBモードにおける平均サイクル長は
その他
- CTS (Ciphertext stealing)
- 2DEM (2D Encryption Mode)
- ABC (Accumulated Block Chaining)
- IGE (Infinite Garble Extension)
- F8@3GPP
カテゴリ
アルゴリズム 理論 攻撃 標準化 セキュリティ要約 一般的関数 SHA-3最終候補 - BLAKE
- Grøstl
- JH
- Skein
- Keccak (勝者)
その他の関数 MACアルゴリズム 認証付き暗号モード 攻撃 設計 標準化 利用 - ソルト
- キーストレッチ
- メッセージ認証
パスワードハッシュ関数 カテゴリ:ハッシュ関数・メッセージ認証コード・認証付き暗号
カテゴリ
Cipher Block Chaining (CBC)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/04 04:43 UTC 版)
「暗号利用モード」の記事における「Cipher Block Chaining (CBC)」の解説
CBCモード (Cipher Block Chaining Mode) は、1976年にIBMによって開発された。CBCモードでは、平文の各ブロックは前の暗号文とのXORを取ってから暗号化される。すなわち、各々の暗号文ブロックはそれ以前のすべての平文ブロックに依存することとなる。メッセージごとのユニーク性を確保するため、最初のブロックの暗号化には初期化ベクトルが用いられる。 暗号化 C i = E K ( P i ⊕ C i − 1 ) , C 0 = I V {\displaystyle C_{i}=E_{K}(P_{i}\oplus C_{i-1}),C_{0}=IV} 復号 P i = D K ( C i ) ⊕ C i − 1 , C 0 = I V {\displaystyle P_{i}=D_{K}(C_{i})\oplus C_{i-1},C_{0}=IV} CBCモードは、最も広く用いられている暗号利用モードであり、ECBモードの欠点を補うものである。このモードの主な欠点は、各ブロックの暗号化にその前のブロックの暗号化の結果を使用することから暗号化処理を並列化することができないことと、暗号文ブロックのサイズの整数倍となるようメッセージをパディングする必要があることである。後者の例の一つが、Ciphertext stealing(英語版)と呼ばれるものである。CBCモードの暗号化においては、平文あるいは初期化ベクトルが1ビットでも変化すると、それ以降の暗号文すべてが変化することとなる。 不正な初期化ベクトルを用いて復号した場合、復号後の平文の最初のブロックは正しい結果とはならないが、それ以降のブロックは正しく復号される。これは、隣接する2つの暗号文ブロックから平文を回復することが可能なためである。これにより、CBCモードの復号処理は並列化が可能となる。CBCモードの復号においては、暗号文が1ビット変化した場合、その位置に対応するブロック全体および次のブロックにおける対応するビットの復号結果に影響を及ぼすが、それ以外のブロックには影響を及ぼさない。
※この「Cipher Block Chaining (CBC)」の解説は、「暗号利用モード」の解説の一部です。
「Cipher Block Chaining (CBC)」を含む「暗号利用モード」の記事については、「暗号利用モード」の概要を参照ください。
- Cipher Block Chainingのページへのリンク