共通鍵暗号とAES — 「同じ鍵」で守る現代の暗号
Wi-Fi も https もスマホの中身も、大量のデータを守っているのはほぼ全部 AES。閉めるのも開けるのも同じ鍵を使う共通鍵暗号のしくみを、いちばん単純な XOR から世界標準 AES の設計思想まで、動かしながらたどります。
1. 同じ鍵で閉めて、同じ鍵で開ける
暗号化と復号に同じ鍵を使う方式を共通鍵暗号(対称暗号)と呼びます。家の鍵と同じ発想なので直感的で、しかも圧倒的に高速。AES は CPU に専用命令(AES-NI)が載っているほどで、動画ストリーミングのような大量データの暗号化はすべてこの方式が担っています。
ただし弱点がひとつ。その鍵を、どうやって相手に安全に渡すのか? 鍵を送る通信こそ盗聴されたら終わりです。この「鍵配送問題」は次のレッスンで解決するとして、今回は「鍵さえ共有できていれば、どうやって守るのか」を見ていきます。
2. XORの魔法 — かけて、もう一度かけると消える
共通鍵暗号の最小部品が XOR(排他的論理和、記号 ⊕)です。2つのビットが「違えば1、同じなら0」。つまり鍵のビットが 1 の場所だけ平文のビットを反転させます。そして同じ鍵でもう一度反転させれば……元通り。暗号化と復号がまったく同じ操作になるのです。
3. ブロック暗号とモード — ECBの失敗に学ぶ
実用の共通鍵暗号には2つの流儀があります。ストリーム暗号は短い鍵から長い擬似乱数列(鍵ストリーム)を作って平文とXORする方式(ワンタイムパッドの実用版)。ブロック暗号は固定長のかたまり(AESなら128ビット)ごとに、鍵で決まる「ぐちゃぐちゃな変換」をかける方式です。
ブロック暗号で長いデータを暗号化するには、ブロックのつなぎ方=モードを決める必要があります。一番素朴な「各ブロックを独立に暗号化する」ECBモードには、致命的な欠陥があります。下のデモで確かめてください。
4. 混乱と拡散 — AESの心臓部
ブロック暗号の中身、「鍵で決まるぐちゃぐちゃな変換」の正体を覗いてみましょう。設計の指針はシャノンが挙げた2原則です。ひとつは混乱(confusion)——入出力の関係を複雑にすること。もうひとつは拡散(diffusion)——1ビットの影響を全体に広げること。
AES はこれを「換字(Sボックス)→ シャッフル(転置)→ 鍵混合(XOR)」という1ラウンドの流れ作業を10回以上繰り返す SPN構造で実現しています。下のデモは同じ構造のミニチュア版。入力をたった1ビット変えたとき、その影響がラウンドごとにどう広がるかを見てください。
5. まとめ
- 共通鍵暗号:暗号化と復号が同じ鍵。高速で大量データ向き。ただし鍵の受け渡しが課題(→次回)。
- XOR:同じ鍵を2回かけると消える。ワンタイムパッドは理論上無敵だが、鍵の使い回しは即座に破綻する。
- モード:ECB は絵柄が透けるので使わない。CBC や GCM のように前とつなぐ・認証を付けるのが実務の常識。
- AES:換字→シャッフル→鍵混合(混乱と拡散)を10ラウンド以上繰り返し、1ビットの違いを雪崩に変える。