【古典暗号入門編】シーザー・ヴィジュネル・換字式の崩し方|CTF思考フレームワーク #50
広告・PRを含みます。この記事にはアフィリエイトリンクが含まれます。掲載内容は編集方針に基づいて作成していますが、価格・在庫・キャンペーン内容はリンク先で最新情報を確認してください。

シーザー暗号とか、古典暗号って今でも使われるの?📜

実運用ではほぼ使われませんが、CTFでは『暗号入門』として定番出題。シーザー、ヴィジュネル、換字式――これらを崩せると、暗号の基本概念(鍵・頻度分析・既知平文攻撃)が体感できます。現代暗号の理解にも役立ちます。
古典暗号は紀元前から存在する暗号技術。シーザー暗号(紀元前1世紀)、ヴィジュネル暗号(16世紀)、換字式暗号、転置式暗号。現代の量子コンピュータでも数秒で破られますが、CTFでは『暗号思考』の第一歩として頻出。頻度分析・既知平文・カシスキーテストといった解読技法を学べます。

暗号の歴史から学ぶって、なんだか楽しそう。
この記事は、CTF思考フレームワーク第50回。古典暗号(シーザー・ヴィジュネル・換字式・転置式)の仕組みと、頻度分析・カシスキーテスト・既知平文攻撃などの古典的解読法を、CTF初心者向けに体系的に整理します。
📖 この記事はシリーズの一部です
「CTF思考フレームワーク」 #50 / 全86記事 → シリーズ一覧を見る →
🔡 シーザー、ヴィジュネル、換字式。古典暗号は「文字を別の文字に置き換える」発想の宝庫で、CTFのウォームアップ問題によく出ます。考古学のように、頻度分析と歴史的背景で解いていく楽しさ。
古典暗号の特徴は「鍵空間が小さい」「英文の頻度分布が崩れない」「人間の手でも解ける」。現代暗号の基礎概念(鍵・置換・転置)も全部ここに詰まっています。
シーザー・ヴィジュネル・換字式の崩し方を整理します🗝️

古典暗号はCTFのウォームアップ。頻度分析という基本武器を身につけよう🗝️
先に意味を押さえておくと読みやすい用語です。
- CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
- マルウェア: 情報を盗む、端末を壊す、勝手に操作するなど悪意あるソフトの総称です。
- 脆弱性: ソフトや仕組みにある弱点。攻撃者に悪用されると不正アクセスにつながります。
👀 観察フェーズ:まず何を見る?

暗号文を見たら文字頻度・繰り返し・長さを観察!それだけで方式が当たる🔍
暗号文を渡されたら、まず文字種・長さ・分布を観察。アルファベットだけならシーザー or 換字式、繰り返しパターンがあればヴィジュネル、空白がない長文なら転置式の可能性。
- 文字種(英大文字/小文字/数字/記号)の分布
- ETAOIN SHRDLU との頻度差
- 反復文字列(ヴィジュネルのKasiski test)
- 長さの素因数(転置式の幅候補)
- スペース有無・改行パターン
- タイトル・問題文のヒント(”caesar” “vigenere”等)

頻度分布を見るだけで「これシーザーかも」「ヴィジュネルかも」って当たりがつくんだね💡
🤔 仮説フェーズ:攻撃者は何を考える?

古典暗号の典型は4種。
🕶️ 出題者は「古典暗号らしい見た目」で誘導します。すべて大文字+スペースなしならシーザー、繰り返しパターンが見えるならヴィジュネル、文字数が完全平方数や整数積なら転置式。CyberChefでBruteforce ROTを一発、というのもCTFの定番ムーブです。
🔠 仮説①:シーザー暗号
全文字を一定数シフト。26通り総当たりで平文が現れる。
🔄 仮説②:換字式(単一)
各アルファベットを別の文字に置換。頻度分析+語彙パターンで解読。
🎯 仮説③:ヴィジュネル
鍵長分のシーザー暗号繰り返し。Kasiski法 / Index of Coincidenceで鍵長推定。
🪤 仮説④:転置式
文字の並びを入れ替える。列転置・レール柵などのパターン認識で。

古典暗号は「鍵を知らずに解ける」からこそ歴史的に滅んだんだね💡
🔬 検証フェーズ:どうやって確かめる?

cyberchefでシフト総当たり、quipqiupで換字式自動解読が便利🧪
頻度分析が王道。英語ならE/T/Aが多いという前提で、出現頻度トップを Eに当てて検証。CyberChefなら数十ステップを連結して試行錯誤が高速。
# Python: シーザー全シフト試行
ct = "KHOOR ZRUOG"
for s in range(26):
print(s, "".join(chr((ord(c)-65-s)%26+65) if c.isalpha() else c for c in ct))
# ヴィジュネル鍵長推定(Kasiski / IC)
# IC ≒ 0.066 (英) / 0.038 (ランダム)

CTFは「とりあえずCyberChef」って文化があるくらいだね😆
⚔️ 攻撃フェーズ:実際の手口

古典暗号の崩し技トップ3。
王道の攻略:①シーザー→26通り全試行、②ヴィジュネル→鍵長推定(IC・Kasiski)後にシーザー連鎖、③換字式→頻度+bigram解析、④転置式→列数の総当たり。
# ヴィジュネル鍵長推定(Index of Coincidence)
import collections
def ic(s):
n = len(s)
if n <= 1: return 0
c = collections.Counter(s)
return sum(v*(v-1) for v in c.values()) / (n*(n-1))
for klen in range(1, 20):
cols = [''.join(s[i] for i in range(j, len(s), klen)) for j in range(klen)]
avg = sum(ic(c) for c in cols) / klen
print(klen, round(avg, 4))
CTFでは「Atbash → Base64 → ROT13 → Reverse」のような多段がお決まりパターン。CyberChefのレシピ機能で連結試行するのが最速🍳
英文頻度との突き合わせで換字テーブルを復元。短い文ほど難しいが必ず効く。
flag{やCTF{のような既知の冒頭パターンから鍵を推定。CTFの定石。
ヴィジュネルで繰り返しパターンの距離から鍵長を推定し、シーザー解読に分解。
🛡️ 防御フェーズ:どう守る?

古典暗号は「使わない」のが正解!🛡️
実務で「古典暗号で守る」場面はないですが、レガシーシステムの監査では稀に発見されます。「なんとなく暗号化してる感」を出すだけで、実質ROT13というケースもあるのが現実。
- パスワード保管に古典暗号は絶対使わない
- ROT13や単純XORは難読化であって暗号化ではない
- 監査時はバイナリ内文字列にROT/XORが疑わしいものを探す
- レガシー独自暗号は早急に標準暗号(AES等)へ移行
- 「自作暗号」を本番投入しない(Schneierの法則)
- 教育用途と本番用途を厳密に分ける
シーザー・換字・ヴィジュネルは機密データ保護には絶対NG。教育・パズル用途のみ。
実務はAES-GCM・ChaCha20-Poly1305など標準アルゴリズム。
自作暗号は必ずどこかで穴がある。枯れたライブラリ(libsodium等)を使う。

「Don\u0027t roll your own crypto」は鉄則中の鉄則だね💪
⚠️ よくある落とし穴
- シーザーを「ROT13一択」と思い込み他のシフトを試さない
- ヴィジュネル鍵長推定でICが揃ったところで止め、複数候補を試さない
- 換字式で「単語頻度」を見ずに文字頻度だけ見る
- 転置式の列数候補を素因数分解で絞らず総当たりで時間切れ
- スペース・記号がそのまま残る暗号で、逆に位置情報を活用しない
- CyberChefのMagicに頼り切って手動検証を怠る
🧰 ツール早見表
| ツール | 用途 | 備考 |
|---|---|---|
| CyberChef | ブラウザでなんでも | Magic機能で自動推定 |
| dCode.fr | 古典暗号の自動解読Web | 幅広い方式に対応 |
| Quipqiup | 換字式自動解読 | 英文ベース |
| cipher-tools / Vigenere Solver | CLIツール | スクリプト埋め込み可 |
| Python collections.Counter | 頻度分析自作 | IC計算も簡単 |
🎓 本気で学びたい人へ
暗号技術を「趣味」から「仕事」に変えたい方へ。🎓 ササエルはセキュリティ・インフラを体系的に学べるスクールです。
📚 もっと深く学びたい人へ
体系的に攻撃と防御の両面を学びたいなら『ホワイトハッカー入門 第2版』が分かりやすい入口です📚
📚 次に読みたい
- タイムライン構築編|CTF思考フレームワーク #49
- Base・XOR・エンコーディング編|CTF思考フレームワーク #51
- マルウェア解析入門編|CTF思考フレームワーク #48
- RSA基礎編|CTF思考フレームワーク #52
✍️ 学んだことを発信する
学んだことをWordPressブログでアウトプットしたい方は、ConoHa WINGから始めるのが手軽です。
⚖️ 大事なお約束
この記事の手法は、必ず自分の環境か、許可されたCTF・脆弱性報奨金プログラム(HackerOne、Bugcrowd等)で試してください。他人のサービスに無断で攻撃を仕掛けるのは不正アクセス禁止法違反、立派な犯罪です。学んだ知識は守る側で活かしましょう🤝
この記事は合法な学習・防御目的での解説です。許可のないシステムへの攻撃は犯罪になります(不正アクセス禁止法ほか)。検証は必ず自分が管理する環境・CTF・公式ハンズオンで行ってください🙏


