PR 本記事には広告(Amazonアソシエイト・もしもアフィリエイト・A8.net等)が含まれます。掲載情報の正確性には努めていますが、商品の詳細は必ずリンク先で最新情報をご確認ください。

【古典暗号入門編】シーザー・ヴィジュネル・換字式の崩し方|CTF思考フレームワーク #50

【古典暗号入門編】シーザー・ヴィジュネル・換字式の崩し方|CTF思考フレームワーク #50 アイキャッチ画像
安全に生きたい編集部

広告・PRを含みます。この記事にはアフィリエイトリンクが含まれます。掲載内容は編集方針に基づいて作成していますが、価格・在庫・キャンペーン内容はリンク先で最新情報を確認してください。

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

実運用ではほぼ使われませんが、CTFでは『暗号入門』として定番出題。シーザー、ヴィジュネル、換字式――これらを崩せると、暗号の基本概念(鍵・頻度分析・既知平文攻撃)が体感できます。現代暗号の理解にも役立ちます。

古典暗号は紀元前から存在する暗号技術。シーザー暗号(紀元前1世紀)、ヴィジュネル暗号(16世紀)、換字式暗号、転置式暗号。現代の量子コンピュータでも数秒で破られますが、CTFでは『暗号思考』の第一歩として頻出。頻度分析・既知平文・カシスキーテストといった解読技法を学べます。

暗号の歴史から学ぶって、なんだか楽しそう。

この記事は、CTF思考フレームワーク第50回。古典暗号(シーザー・ヴィジュネル・換字式・転置式)の仕組みと、頻度分析・カシスキーテスト・既知平文攻撃などの古典的解読法を、CTF初心者向けに体系的に整理します。

📖 この記事はシリーズの一部です
CTF思考フレームワーク#50 / 全86記事 → シリーズ一覧を見る →

🔡 シーザー、ヴィジュネル、換字式。古典暗号は「文字を別の文字に置き換える」発想の宝庫で、CTFのウォームアップ問題によく出ます。考古学のように、頻度分析と歴史的背景で解いていく楽しさ。

古典暗号の特徴は「鍵空間が小さい」「英文の頻度分布が崩れない」「人間の手でも解ける」。現代暗号の基礎概念(鍵・置換・転置)も全部ここに詰まっています。

難易度:★☆☆(入門)

シーザー・ヴィジュネル・換字式の崩し方を整理します🗝️

古典暗号はCTFのウォームアップ。頻度分析という基本武器を身につけよう🗝️

この記事で出てくる言葉

先に意味を押さえておくと読みやすい用語です。

  • CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
  • マルウェア: 情報を盗む、端末を壊す、勝手に操作するなど悪意あるソフトの総称です。
  • 脆弱性: ソフトや仕組みにある弱点。攻撃者に悪用されると不正アクセスにつながります。

👀 観察フェーズ:まず何を見る?

暗号文を見たら文字頻度・繰り返し・長さを観察!それだけで方式が当たる🔍

暗号文を渡されたら、まず文字種・長さ・分布を観察。アルファベットだけならシーザー or 換字式、繰り返しパターンがあればヴィジュネル、空白がない長文なら転置式の可能性。

  • 文字種(英大文字/小文字/数字/記号)の分布
  • ETAOIN SHRDLU との頻度差
  • 反復文字列(ヴィジュネルのKasiski test)
  • 長さの素因数(転置式の幅候補)
  • スペース有無・改行パターン
  • タイトル・問題文のヒント(”caesar” “vigenere”等)

英文の頻度TOP: E(12.7%) > T > A > O > I > N。日本語ローマ字なら母音(A,I,U,E,O)が突出します👀

頻度分布を見るだけで「これシーザーかも」「ヴィジュネルかも」って当たりがつくんだね💡

🤔 仮説フェーズ:攻撃者は何を考える?

古典暗号の典型は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の定石。

③ Kasiski法

ヴィジュネルで繰り返しパターンの距離から鍵長を推定し、シーザー解読に分解。

🛡️ 防御フェーズ:どう守る?

古典暗号は「使わない」のが正解!🛡️

実務で「古典暗号で守る」場面はないですが、レガシーシステムの監査では稀に発見されます。「なんとなく暗号化してる感」を出すだけで、実質ROT13というケースもあるのが現実。

  • パスワード保管に古典暗号は絶対使わない
  • ROT13や単純XORは難読化であって暗号化ではない
  • 監査時はバイナリ内文字列にROT/XORが疑わしいものを探す
  • レガシー独自暗号は早急に標準暗号(AES等)へ移行
  • 「自作暗号」を本番投入しない(Schneierの法則)
  • 教育用途と本番用途を厳密に分ける
🚫 古典暗号は機密用途で使用禁止

シーザー・換字・ヴィジュネルは機密データ保護には絶対NG。教育・パズル用途のみ。

✅ 標準化された現代暗号を使う

実務はAES-GCM・ChaCha20-Poly1305など標準アルゴリズム。

📚 暗号は自前実装しない

自作暗号は必ずどこかで穴がある。枯れたライブラリ(libsodium等)を使う。

「Don\u0027t roll your own crypto」は鉄則中の鉄則だね💪

⚠️ よくある落とし穴

  1. シーザーを「ROT13一択」と思い込み他のシフトを試さない
  2. ヴィジュネル鍵長推定でICが揃ったところで止め、複数候補を試さない
  3. 換字式で「単語頻度」を見ずに文字頻度だけ見る
  4. 転置式の列数候補を素因数分解で絞らず総当たりで時間切れ
  5. スペース・記号がそのまま残る暗号で、逆に位置情報を活用しない
  6. CyberChefのMagicに頼り切って手動検証を怠る

🧰 ツール早見表

ツール用途備考
CyberChefブラウザでなんでもMagic機能で自動推定
dCode.fr古典暗号の自動解読Web幅広い方式に対応
Quipqiup換字式自動解読英文ベース
cipher-tools / Vigenere SolverCLIツールスクリプト埋め込み可
Python collections.Counter頻度分析自作IC計算も簡単

🎓 本気で学びたい人へ

暗号技術を「趣味」から「仕事」に変えたい方へ。🎓 ササエルはセキュリティ・インフラを体系的に学べるスクールです。

PR / 広告

ササエル

📚 もっと深く学びたい人へ

体系的に攻撃と防御の両面を学びたいなら『ホワイトハッカー入門 第2版』が分かりやすい入口です📚

📚 次に読みたい

✍️ 学んだことを発信する

学んだことをWordPressブログでアウトプットしたい方は、ConoHa WINGから始めるのが手軽です。

PR / 広告

ConoHa WING

⚖️ 大事なお約束

必ず守ってね

この記事の手法は、必ず自分の環境か、許可されたCTF・脆弱性報奨金プログラム(HackerOne、Bugcrowd等)で試してください。他人のサービスに無断で攻撃を仕掛けるのは不正アクセス禁止法違反、立派な犯罪です。学んだ知識は守る側で活かしましょう🤝

この記事は合法な学習・防御目的での解説です。許可のないシステムへの攻撃は犯罪になります(不正アクセス禁止法ほか)。検証は必ず自分が管理する環境・CTF・公式ハンズオンで行ってください🙏

記事URLをコピーしました