暗号利用モードとは

あんごうりようもーど

ブロック暗号で、ブロック長より長いデータを暗号化するときの、ブロックの変換の組み合わせ方。各ブロックを独立に暗号化するECB、直前の暗号文ブロックとXORしてから暗号化するCBC、カウンタを暗号化した鍵ストリームとXORするCTR、CTRに認証を加えたGCMなどがある。ECBは同じ平文ブロックが同じ暗号文ブロックになるため、一般のデータには使わない。CBCやCTRでは、初期化ベクトルやナンスを正しく扱う必要がある。

「暗号利用モード」は、1分野の11問の練習問題に出てきます(暗号技術の基礎と応用など)。

この用語の分野: 暗号技術の基礎と応用

おもなモードの比較

ECBは並列に処理できますが、平文の模様が残ります。CBCはパディングが必要で、暗号化は前のブロックの結果を待つため並列化できませんが、復号は並列化できます。CTRはパディングが要らず、暗号化も復号も並列化でき、任意の位置から復号できます。ただし、CBCとCTRは暗号化だけを行い、改ざんの検出はできません。

認証付き暗号のモード

GCMやCCMは、暗号化と同時に認証タグを計算し、改ざんを検出できるモードです。TLS 1.3やIPsec、無線LANのWPA2・WPA3など、現在の主要なプロトコルは、このようなモードを使います。CBCとMACを組み合わせる方式は、組み合わせ方を誤るとパディングオラクル攻撃などを受けるため、新しい設計ではあまり使われません。

ディスクの暗号化

ディスクやSSDの暗号化では、セクタの位置ごとに異なる値を使い、暗号文が平文と同じ長さになるXTSモードがよく使われます。保存場所の大きさを変えられないので認証タグを付けられず、改ざんの検出はできません。

暗号利用モードの練習問題に挑戦

画像のデータをAESのECBモードで暗号化したところ、暗号化した後の画像でも、元の絵の輪郭が見分けられた。この原因として正しいものはどれか。

  1. AAESの鍵が短すぎて、一部のブロックが暗号化されずにそのまま残ったから
  2. BECBモードでは、ブロックごとに異なる鍵を自動で作るので、その鍵の模様が暗号化した後の画像に現れるから
  3. CECBモードでは、同じ平文ブロックが常に同じ暗号文ブロックになるので、同じ色の部分の模様が残るから
答えと解説を見る

正解:C. ECBモードでは、同じ平文ブロックが常に同じ暗号文ブロックになるので、同じ色の部分の模様が残るから

ECB(電子コードブック)モードは、各ブロックを同じ鍵でそれぞれ独立に暗号化するだけの方式です。そのため、平文の中に同じ内容のブロックがあると、暗号文でも同じブロックが同じ位置に現れます。背景のように同じ色が続く画像では、どこが同じ色かという情報が残り、ペンギンの画像を暗号化した例がよく知られています。このため、一般のデータの暗号化にはECBモードを使わず、同じ平文からでも毎回違う暗号文ができるCBCモード、CTRモード、GCMなどを使います。

AESをCBCモードで使うときの、初期化ベクトル(IV)の扱いとして適切なものはどれか。

  1. AIVは鍵と同じく秘密にし、すべてのメッセージで同じ値を使い続ける
  2. BIVは秘密にしなくてよいが、メッセージごとに、攻撃者が予測できないランダムな値を新しく選ぶ
  3. CIVは秘密にしなくてよく、相手と決めておいた同じ値(例えばすべて0)に毎回固定して使ってよい
答えと解説を見る

正解:B. IVは秘密にしなくてよいが、メッセージごとに、攻撃者が予測できないランダムな値を新しく選ぶ

CBCモードでは、各平文ブロックを直前の暗号文ブロックとXORしてから暗号化し、最初のブロックはIVとXORします。IVはふつう暗号文の先頭に付けて送るので、秘密にする必要はありません。しかし、毎回同じIVを使うと、先頭が同じメッセージは暗号文の先頭も同じになり、内容の一部が同じであることが漏れます。さらに、次に使われるIVを攻撃者が予測できると、選んだ平文を暗号化させて内容を推測する攻撃が成り立つことが知られています(TLS 1.0に対するBEAST攻撃など)。

よくある質問

どのモードを選べばよいですか?

特別な理由がなければ、AES-GCMやChaCha20-Poly1305のような認証付き暗号を使い、同じ鍵でナンスが重ならないようにします。ECBは使いません。自分でCBCやCTRとMACを組み合わせるより、ライブラリが用意する認証付き暗号を使う方が、誤りが起きにくくなります。

CTRモードでは、なぜパディングが要らないのですか?

CTRモードは、ブロック暗号で作った鍵ストリームを平文とXORするだけなので、最後のブロックの鍵ストリームを平文の長さで切って使えば済みます。ブロック暗号に通すのはカウンタの値で、平文そのものではありません。

解説の中の「暗号利用モード」

「暗号利用モード」が出てくる問題(11問)

  1. 画像のデータをAESのECBモードで暗号化したところ、暗号化した後の画像でも、元の絵の輪郭が見分けられた。この原因として正しいものはどれか。
  2. AESをCBCモードで使うときの、初期化ベクトル(IV)の扱いとして適切なものはどれか。
  3. AES(ブロック長16バイト)をCBCモードで使い、パディングにはPKCS#7方式を使う。PKCS#7方式では、足りないバイト数をnとして値がnのバイトをn個足し、平文の長さがちょうど16の倍数のときも、値が16のバイトを16個足す。96バイトの平文を暗号化したときの暗号文の長さ(IVは含めない)はどれか。
  4. CBCモードで暗号化したデータを受け取るサーバが、復号した後のパディングが正しくないときと、パディングは正しいが中身の検査に失敗したときとで、異なるエラーを返していた。この状況についての説明として、正しいものはどれか。
  5. ブロック暗号のCTRモード(カウンタモード)の特徴として、正しいものはどれか。
  6. CTRモードで、誤って同じ鍵と同じナンスを使い、2つのメッセージを暗号化した。ある位置のバイトについて、1つ目の平文 P₁ は 01001000(ASCIIの「H」)、その暗号文 C₁ は 01110100、2つ目の暗号文 C₂ は 01010101 である。攻撃者が P₁ を知っているとき、同じ位置の2つ目の平文 P₂ はどれか。
  7. 1 GiB = 2³⁰ バイト、1 EiB = 2⁶⁰ バイトとする。ブロック長が64ビットのブロック暗号(3DESなど)をCBCモードで使い、1つの鍵で大量のデータを暗号化する。暗号文ブロックをランダムな64ビットの値とみなすとき、誕生日のパラドックスにより、同じ暗号文ブロックの組が現れる確率が無視できなくなるデータ量の目安はどれか。
  8. 共通鍵暗号のうち、ブロック暗号とストリーム暗号の違いの説明として、正しいものはどれか。
  9. AES-GCMのような認証付き暗号(AEAD)が、1つの処理で提供するものとして正しいものはどれか。
  10. AES-GCMで使う96ビットのナンス(IV)についての説明として、正しいものはどれか。
  11. TLS 1.3(RFC 8446)で、TLS 1.2から変わった点として正しいものはどれか。

暗号技術の基礎と応用の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

認証付き暗号(AEAD) AES ナンス TLS 誕生日攻撃 Cookie 共通鍵暗号 メッセージ認証コード 前方秘匿性 RSA暗号

用語集の一覧へ