古典暗号と頻度分析 — 作るのは簡単、守り抜くのは難しい
手紙を運び屋に盗み見られても中身は知られたくない — 2000年前のカエサルも同じことを考えました。最古の暗号を実際に作り、そして統計の力で破ってみます。破り方を学ぶのは悪用のためではなく、「どこが弱いか」を知ることが強い暗号を作る唯一の道だからです。
1. 暗号の3点セット — 平文・暗号文・鍵
暗号の話は3つの言葉で始まります。守りたい元のメッセージが平文(ひらぶん)、変換後の読めない文字列が暗号文、変換のつまみにあたる秘密の数値が鍵です。
最も有名な古典暗号がシーザー暗号。アルファベットを鍵 k 文字ぶんだけ後ろにずらすだけです。下の円盤でシフト量 k を回して、平文が暗号文に化ける様子を見てください。
2. 統計で破る — 頻度分析
鍵を知らない攻撃者はどうやって破るのでしょうか。25通り全部試す総当たりも有効ですが、もっとエレガントな方法が9世紀の学者アル=キンディーが記した頻度分析です。
英語の文章では E が約13%、T が約9%…と、文字の出現率にははっきりした偏りがあります(覚え方は "ETAOIN SHRDLU")。シーザー暗号は文字を一律にずらすだけなので、暗号文でも同じ形の「山」が k 文字ずれた位置に現れるのです。
下のデモでは、秘密の鍵で暗号化された文章が与えられています。シフト量のスライダーを動かして、2つのヒストグラムの形が重なる(一致度が最大になる)点を探してください。見つからなければ「自動解読」で全シフトを走査できます。
3. 多表式への進化 — ヴィジュネル暗号
頻度分析への対抗策として16世紀に登場したのがヴィジュネル暗号です。鍵として単語(鍵語)を使い、文字の位置ごとに違うシフト量の円盤を使い回します。鍵語が SUN なら、1文字目は S(+18)、2文字目は U(+20)、3文字目は N(+13)、4文字目はまた S(+18)…という具合です。
同じ E でも位置によって別の文字に化けるため、頻度の山がならされて単純な頻度分析が効かなくなります。しかし鍵語の長ささえ推定できれば — 同じ円盤を使った文字だけを列として集めると、各列はただのシーザー暗号に戻ってしまいます。
4. まとめ
- 平文・暗号文・鍵が暗号の3点セット。シーザー暗号は「26文字の円環上で k ずらす」= C ≡ P + k (mod 26)。
- ケルクホフスの原理:しくみは公開でも、鍵さえ秘密なら安全であるべき。鍵候補25通りでは話にならない。
- 頻度分析:言語の統計的な偏りは暗号化後も生き残る。山の「ずれ」がそのまま鍵を教えてくれる。
- ヴィジュネル暗号は山をならして対抗したが、鍵長が割れると列ごとにシーザーに退化して敗北。
- シフト量の足し算は mod の世界の算術そのもの。次のレッスン「時計の算術」で、この円環の数学が現代暗号の錠前に化けるところまで進みます。