共通鍵暗号とAES — 「同じ鍵」で守る現代の暗号

Wi-Fi も https もスマホの中身も、大量のデータを守っているのはほぼ全部 AES。閉めるのも開けるのも同じ鍵を使う共通鍵暗号のしくみを、いちばん単純な XOR から世界標準 AES の設計思想まで、動かしながらたどります。

1. 同じ鍵で閉めて、同じ鍵で開ける

暗号化と復号に同じ鍵を使う方式を共通鍵暗号(対称暗号)と呼びます。家の鍵と同じ発想なので直感的で、しかも圧倒的に高速。AES は CPU に専用命令(AES-NI)が載っているほどで、動画ストリーミングのような大量データの暗号化はすべてこの方式が担っています。

ただし弱点がひとつ。その鍵を、どうやって相手に安全に渡すのか? 鍵を送る通信こそ盗聴されたら終わりです。この「鍵配送問題」は次のレッスンで解決するとして、今回は「鍵さえ共有できていれば、どうやって守るのか」を見ていきます。

2. XORの魔法 — かけて、もう一度かけると消える

共通鍵暗号の最小部品が XOR(排他的論理和、記号 ⊕)です。2つのビットが「違えば1、同じなら0」。つまり鍵のビットが 1 の場所だけ平文のビットを反転させます。そして同じ鍵でもう一度反転させれば……元通り。暗号化と復号がまったく同じ操作になるのです。

XORの往復 — 暗号化して、同じ鍵で元に戻す
①では平文「HI」(16ビット)が鍵とのXORで暗号文になり、同じ鍵をもう一度かけるとぴったり元に戻ります。②では同じ鍵を2通のメッセージに使い回すと、暗号文どうしのXORで鍵が消え、平文どうしの差(赤)が漏れてしまうことを確かめてください。
C = P ⊕ K  C ⊕ K = P ⊕ (K ⊕ K) = P ⊕ 0 = P 同じものをXORすると必ず0になり、0をXORしても何も変わらない。だから鍵を2回かけると元に戻る
POINT — ワンタイムパッドは「絶対に」破れない 鍵が「①真にランダム ②平文と同じ長さ ③一度きりの使用」を満たすなら、XOR暗号(ワンタイムパッド)は理論上どんな計算力でも破れないことをシャノンが証明している。暗号文だけからは、どの平文も等しくあり得るからだ。ただし「平文と同じ長さの鍵を安全に届ける」のが非現実的で、日常の暗号には使えない。
注意 — 鍵の使い回しは一発アウト 同じ鍵で2通を暗号化すると C1 ⊕ C2 = P1 ⊕ P2 となり、鍵が消えて平文どうしの関係がそのまま漏れる。冷戦期、ソ連がワンタイムパッドの鍵を使い回した通信は、米国の「VENONA計画」で実際に解読された。

3. ブロック暗号とモード — ECBの失敗に学ぶ

実用の共通鍵暗号には2つの流儀があります。ストリーム暗号は短い鍵から長い擬似乱数列(鍵ストリーム)を作って平文とXORする方式(ワンタイムパッドの実用版)。ブロック暗号は固定長のかたまり(AESなら128ビット)ごとに、鍵で決まる「ぐちゃぐちゃな変換」をかける方式です。

ブロック暗号で長いデータを暗号化するには、ブロックのつなぎ方=モードを決める必要があります。一番素朴な「各ブロックを独立に暗号化する」ECBモードには、致命的な欠陥があります。下のデモで確かめてください。

ECBの失敗 — 暗号化したのに絵柄が透ける
ECBでは「同じ絵柄のブロック→同じ暗号ブロック」なので、色は変わってもスマイルの模様が丸見え。CBCに切り替えると、前の暗号ブロックを混ぜてから暗号化する連鎖(オレンジの矢印)のおかげで完全なノイズになります。IVを変えると同じ絵でも毎回違うノイズに。
C1 = E(P1 ⊕ IV)  Ci = E(Pi ⊕ Ci−1) CBCモード: 前の暗号ブロックを混ぜてから暗号化する。先頭には使い捨ての初期値 IV を使う
注意 — ECBは使うな 暗号アルゴリズム(AES)自体がどれだけ強くても、モードの選択を誤れば台無しになる。ECBで暗号化したペンギン画像に模様が透けて残る「ECBペンギン」は暗号界の有名な教訓だ。実務では CBC や、改ざん検知も同時に行う GCM(認証付き暗号)を使う。

4. 混乱と拡散 — AESの心臓部

ブロック暗号の中身、「鍵で決まるぐちゃぐちゃな変換」の正体を覗いてみましょう。設計の指針はシャノンが挙げた2原則です。ひとつは混乱(confusion)——入出力の関係を複雑にすること。もうひとつは拡散(diffusion)——1ビットの影響を全体に広げること。

AES はこれを「換字(Sボックス)→ シャッフル(転置)→ 鍵混合(XOR)」という1ラウンドの流れ作業を10回以上繰り返す SPN構造で実現しています。下のデモは同じ構造のミニチュア版。入力をたった1ビット変えたとき、その影響がラウンドごとにどう広がるかを見てください。

混乱と拡散 — 1ビットの違いが雪崩になる(ミニSPN)
赤いマスは「入力の1ビットを反転しなかった場合と値が違う」ビット。Sボックス(S)が箱の中で非線形にかき混ぜ、シャッフルが別の箱へ運び、鍵を混ぜて次のラウンドへ。ラウンド数を増やすと変化が約半分(8/16前後)に飽和します — これが理想の姿です。
POINT — 雪崩効果(アバランシェ効果) 入力を1ビット変えただけで出力の約半分のビットがランダムに変わるのが良いブロック暗号の証。似た平文が似た暗号文になってしまうと、そこから鍵の手がかりが漏れる。混乱と拡散を何ラウンドも重ねるのは、この雪崩を確実に起こすためだ。
一歩先へ — AESが世界標準になるまで 前世代の標準 DES が鍵56ビットの短さで危うくなった1997年、米 NIST は次期標準を全世界からの公募で決めると宣言した。15方式が集まり、世界中の暗号学者が数年がかりで互いに攻撃し合う公開審査の末、2000年にベルギーの2人が設計した Rijndael(ラインダール)が選ばれ、2001年に AES として標準化された。「アルゴリズムは公開し、秘密は鍵だけに置く」——このケルクホフスの原理を体現した公開コンペこそが、AES への世界的信頼の源泉になっている。

5. まとめ