問題 67★★★

同じ値が繰り返し現れるデータを、AESで128ビットのブロックごとに独立して、同じ鍵で暗号化していた。 暗号文を見るだけで、どこに同じ値があるかが分かると指摘を受けた。 対策として最も適切なものはどれか。

正解:イ

各選択肢の解説

  1. ア鍵長を128ビットから256ビットに伸ばして、同じ方法で暗号化する。

    誤り。鍵長を伸ばすと総当たりで鍵を見つけにくくなりますが、同じ鍵で同じ平文ブロックを 独立に暗号化すれば、出てくる暗号文は同じです。指摘されたのは鍵の強さではなく、 同じ入力が同じ出力になる使い方です。

  2. イ初期値や前のブロックの結果を組み合わせ、同じ平文でも異なる暗号文になる方法で暗号化する。

    正解。ブロック暗号は暗号利用モードと組み合わせて使います。CBCモードのように 初期値(IV)や前のブロックの暗号文を混ぜると、同じ値が繰り返しても暗号文はそろわず、 暗号文から平文の並びを読み取られにくくなります。

  3. ウAESを3-key Triple DESに切り替えて、同じ方法で暗号化する。

    誤り。Triple DESも共通鍵のブロック暗号で、ブロックごとに独立して暗号化すれば同じ問題が 残ります。ブロック長が64ビットと短く、CRYPTREC暗号リストでは運用監視暗号リストに 置かれているので、切り替える先としても適しません。

  4. エ同じ鍵で暗号化した結果を、もう一度同じ鍵で暗号化する。

    誤り。同じ鍵での暗号化を重ねても、同じ入力からは毎回同じ結果が出ます。 1回目で同じだったブロックは、2回目の後も同じままです。回数を増やすことと、 入力ごとに結果を変えることは別の話です。

理解を深めるために

同じ判子を押せば、同じ跡が残る

AESのようなブロック暗号は、データを決まった長さ(AESは128ビット)のブロックに区切って 暗号化します。鍵が同じなら、同じブロックからは必ず同じ暗号文が出ます。 ブロックごとに独立して暗号化すると、同じ判子を同じ紙に押したように、 平文のどこが同じかが暗号文にそのまま写ります。中身は読めなくても、 繰り返しの模様から推測の手がかりを与えてしまいます。

暗号利用モードで模様を消す

ブロック暗号をどうつなげて使うかを決めるのが、暗号利用モードです。

  • ECBモード: 各ブロックを独立に暗号化する。同じ平文ブロックは同じ暗号文になる
  • CBCモード: 前のブロックの暗号文を次の平文に混ぜてから暗号化する。最初のブロックには初期値(IV)を使う
  • CTRモードやGCMモード: カウンタやノンス(使い捨ての値)から作った値を平文に混ぜる。 GCMは改ざんの検知も同時に行う

初期値やノンスを毎回変えれば、同じファイルを2回暗号化しても暗号文は異なります。 鍵を守ることに加えて、使い方まで決めて初めて暗号は期待した強さを発揮します。

混同しやすいものとの違い

対策 強くなる点 同じ値の模様は消えるか
暗号利用モードの変更(CBCなど) 同じ平文でも暗号文が変わる 消える
鍵長を伸ばす 鍵の総当たりへの強さ 消えない
Triple DESに切り替える なし(ブロック長が短い) 消えない
同じ鍵で二重に暗号化する なし 消えない

「同じ値が分かる」という指摘は、方式や鍵の強さではなく、ブロックのつなぎ方の問題です。

前の問題へ次の問題へ