【古典暗号入門編】シーザー・ヴィジュネル・換字式の崩し方|CTF思考フレームワーク #50
こんにちは、アンペンです!
ここから新章、暗号(Cryptography)編に入ります。最初は古典暗号(Classical Cipher)。シーザー・ヴィジュネル・換字式といった、文字単位で置き換える昔ながらの暗号を扱います。
現代の暗号は数学の塊で難しいですが、古典暗号は『文字をずらす・入れ替える』だけなのでウォームアップにぴったりです。
『もう使われていないのに、なぜ学ぶの?』——もっともな疑問です。答えはシンプルで、“破られる様子”を自分の目で見ておくと、現代暗号がなぜあんなに複雑なのかが一発で腹落ちするから。古典暗号があっさり解けてしまう体験は、『じゃあ本当に安全にするには何が要るんだ?』という問いへの、最高の入り口になります。しかもCTFのウォームアップ常連なので、サッと解ければそのまま得点源にもなりますよ。

古典暗号って、もう使われてないんだよね?なんで勉強するの?

『どうやって解読されるか』を体験すると、現代暗号がなぜ複雑なのかが腹落ちするんだ。CTFでもウォームアップで頻出だから、瞬殺できると武器になるよ。
ここからは暗号編。といっても、いきなり難しい数式は出てきません。最初は古典暗号——大昔、ローマの将軍や中世の王様が『敵に読まれたくない手紙』をやりとりするために使った、いわば暗号の原点です。仕組みはとても素朴で、『文字をちょっとずらす』『文字を入れ替える』程度。だからこそ、“どう作って、どう破るか”を手で動かして体験するのに、いちばん向いた教材なんです。
古典暗号の代表3つはシーザー(単純シフト)・ヴィジュネル(鍵長付きシフト)・換字式(1対1置換)です。いずれも頻度分析で簡単に破られるため、現代では使われません。CTFではROT13→Caesar総当たり→頻度分析の順で攻めれば瞬殺できます。守りとしては『古典暗号を使わない』が結論で、現代の暗号(AES/RSA等)を使いましょう。
この記事で分かること
- 古典暗号の代表3種類
- 頻度分析の原理
- CTFでの攻略順序
- なぜ現代暗号が必要になったか
📖 はじめてのWebセキュリティ #50|古典暗号入門編
シーザー・ヴィジュネル・換字式の崩し方を扱います。 シリーズ一覧を見る →
⚠️ 大事なお約束
他者の通信や保護されたデータを無断で解読する行為は、業務上の権限や法律に違反します。CTFや公開された練習問題のみで確認してください。
古典暗号の基本3種類
古典暗号は『文字を別の文字に置き換える(換字)』か『文字の順番を入れ替える(転置)』のどちらか、あるいは両方の組み合わせです。CTFで遭遇するのは換字系がほとんどです。
ここで出てきた2つの言葉を、ざっくり押さえておきましょう。『換字(かえじ)』は、文字を別の文字に“化けさせる”こと。A→D、B→E…のように置き換えます。『転置(てんち)』は、文字そのものは変えずに“並び順をシャッフルする”こと。アナグラムみたいなものですね。古典暗号は、この2つの操作の組み合わせでできています。CTFで出会うのは、ほとんどが前者の換字系だと思っておけば大丈夫です。
図解:3種類の動きを比べる
シーザー・ヴィジュネル・換字式の3つを並べて見ると、『鍵の自由度』が違うことが分かります。自由度が高いほど解読は難しくなりますが、それでも頻度分析の前には無力です。
『鍵の自由度』という言葉がカギになります。要は“何通りの設定があり得るか”。シーザーはずらす量を選ぶだけなので、たった25通り。ヴィジュネルは複数の文字でずらすので、鍵が長いほど通り数が増える。換字式は26文字の対応を自由に決められるので、天文学的な通り数になります。直感的には『通り数が多い=強そう』ですが——次に出てくる頻度分析の前では、その自由度もあまり意味を持たないんです。

シーザー暗号は『1つのダイヤル錠』。25通り試せば必ず開きます。ヴィジュネル暗号は『複数のダイヤルを並べた錠』。鍵長が分かれば各ダイヤルを別々に総当たりできます。換字式は『26個のダイヤルを別々に設定できる』錠ですが、頻度分析で1つずつ正解が分かっていきます。要するに、どれもダイヤルの組み合わせに過ぎないのです。

ここで覚える用語:頻度分析(Frequency Analysis)
言語ごとに『どの文字がよく使われるか』の統計を利用して、暗号文の出現頻度を本来の言語と比較する解読技法。英語なら E が約13%、T が約9%、A が約8%……といった分布を覚えておくと、換字式やシーザーの解読が一瞬で進みます。日本語ローマ字なら『a, i, o』が多く、英語なら『E, T, A, O, I, N』の順、と覚えるだけでも実戦で役立ちます。
それぞれの動きと崩し方
シーザー暗号 / ROT13
各文字を一定数だけずらす『単純シフト暗号』。シフト量13の場合がROT13で、2回かけると元に戻る性質があります。鍵候補は最大25通りしかないため、総当たりか頻度分析で一瞬で解けます。
ポイントは『25通りしかない』という一点です。鍵の候補が25個しかなければ、片っ端から全部試しても一瞬で終わります。これがいわゆる“総当たり(ブルートフォース)”。人が手で25回ずらしても数分、コンピュータなら文字どおり一瞬です。『鍵の数が少ない暗号は、それだけでもう終わっている』——この感覚は、のちのち現代暗号を理解するときにも効いてきます。
ヴィジュネル暗号
鍵となる『単語』を繰り返し当てて、文字ごとに違うシフトをかける方式。長いこと『破れない暗号』と呼ばれましたが、Kasiski法(繰り返しパターンから鍵長を推定)やFriedman法(一致指数から鍵長を統計推定)で鍵長が分かれば、シーザーの集合体として解けます。
ヴィジュネル暗号は、長いあいだ『解読不能の暗号』と呼ばれ、数百年ものあいだ人々を悩ませました。シーザーと違って、同じ文字が場所によって違う文字に化けるので、単純な頻度分析が効かないんです。でも——『鍵が何文字の長さか』さえ見抜ければ、あとは“ずらし量の違うシーザーがいくつか並んでいるだけ”に分解できる。鍵長を当てる、というたった一手で、難攻不落だった城がいっきに崩れるわけです。
換字式暗号 (Substitution Cipher)
26文字を任意の26文字に1対1で対応付ける方式。鍵空間は26! ≈ 10^26 と巨大ですが、頻度分析+単語パターンでほぼ自動で解けます。quipqiup のようなオンラインソルバが有名です。
ここで面白いのが、鍵の通り数が10^26という途方もない数なのに、実際にはあっさり解けてしまう、という点です。総当たりは到底ムリ。でも頻度分析を使えば話は別です。『暗号文でいちばん多く出てくる文字は、たぶん元のEだろう』と当たりをつけ、単語の形(“the”や“and”のパターン)と突き合わせていけば、芋づる式に対応がほどけていく。“数の暴力”ではなく“言語のクセ”で攻める——これが頻度分析の正体です。
CTFでの実戦的な攻略順序
暗号文を見せられたら、以下の順で試すと早いです。
- 1. Base64/Hex/16進などのエンコーディングを疑う(暗号でない場合も多い)
- 2. ROT13・ROT47を試す(CyberChefで一発)
- 3. Caesar全25通りを総当たり
- 4. 頻度分析(換字式か?)
- 5. ヴィジュネル(
dcode.fr等の自動解析) - 6. それでも駄目なら近代暗号を疑う
CyberChef 1枚で大半は処理できるので、ブラウザのブックマークに入れておきましょう。
なぜこの順番なのか、ひとことで言うと『軽くて当たりやすいものから』です。CTFのウォームアップ問題は、実は暗号ですらなく、ただのBase64やHexのエンコーディングだった、ということがよくあります。だからまずそこを潰し、次にコストの低いROT・Caesarを試し、ダメなら頻度分析、と段階を上げていく。いきなり重い手法から始めると時間を溶かすので、“安いものから順に”が鉄則なんです。

CTFでやってみよう:暗号文を瞬殺する練習
CyberChefとquipqiupで古典暗号を解く練習
目的は『順番に試して当てる』ワークフローを身体に染み込ませることです。
- 『FLAG{ctf_thinking_classical_cipher}』をROT13で暗号化(自作)
- CyberChefの
ROT13レシピで復号できることを確認 - 次にCaesarシフト 5 で暗号化し、
ROT13 Brute Forceで復号を試す - 適当な英文をAffineやヴィジュネルで暗号化し、
dcode.fr等で解析 - 余裕があれば換字式の練習問題に
quipqiupをかけてみる
さて、攻め方を一通り見たところで、守る側の話に切り替えましょう。ここまで読めば、結論はもう見えていますよね——古典暗号は、現代の機密保護にはまったく使えない、ということです。
守る側:『古典暗号を使わない』が答え
古典暗号はすべて解読可能であり、現代の機密性要件には絶対に使えません。『独自暗号』『見たことない暗号』も避けるのが鉄則です。
- 機密性が必要ならAES-256 (GCMモード)等の業界標準を使う
- 鍵交換はRSA-OAEP / ECDHなどの公開鍵方式
- 『難読化』と『暗号化』を混同しない(難読化に機密性は無い)
- 独自暗号を作らない / 既知のライブラリ(libsodium等)に任せる
- 古典暗号はパズル・教育目的のみに限定

『見たことない暗号=安全』じゃないんだね。むしろ怪しい。

そう。『公開されて世界中で攻撃された結果生き残った』暗号だけを使うのが正解。次回はCTFのウォームアップ頻出のBase・XOR・エンコーディングを扱うよ。
ここまでをひと言でまとめると、古典暗号は『どんなに自由度を上げても、言語のクセで破られる』。だからこそCTFでは“瞬殺ジャンル”であり、実務では“使ってはいけない過去の遺物”です。この両面を押さえておけば、暗号編の最初の一歩としては十分ですよ。
まとめ:『シーザー→ヴィジュネル→換字式』を瞬殺
- 古典暗号3種はシーザー・ヴィジュネル・換字式
- すべて頻度分析で破られる
- CTFの攻略順:エンコ→ROT→Caesar→頻度→ヴィジュネル
- 守りは業界標準を使う / 独自暗号を作らない
今日の持ち帰りは『見慣れない暗号=安全、ではない』。むしろ、世界中の専門家に殴られ続けて生き残った“枯れた標準暗号”こそが信頼できる、という逆説です。古典暗号は、その大切さを“破られる側”から教えてくれる、またとない練習台なんです。
次回はCTFのウォームアップで超頻出のBase・XOR・エンコーディング。暗号ではないけど『パッと見で分かるかどうか』が問われる、瞬殺ジャンルを扱います。
