【Base・XOR・エンコーディング編】CTF頻出ウォームアップを瞬殺する|CTF思考フレームワーク #51
広告・PRを含みます。この記事にはアフィリエイトリンクが含まれます。掲載内容は編集方針に基づいて作成していますが、価格・在庫・キャンペーン内容はリンク先で最新情報を確認してください。

Base64やXORって、暗号というより『エンコーディング』だよね?CTFで何見るの?🔄

そう、暗号ではなく『可逆変換』。でもCTFのウォームアップ問題で必ず出ます。Base64の特徴、XOR鍵の繰り返し検出、複数回エンコーディングの剥がし方――これらは『見抜く力』のトレーニングです。
Base64・Base32・Base58、URLエンコード、ROT13、XOR――これらは厳密には暗号ではなく『可逆エンコーディング』。CTF ではウォームアップ問題として頻出します。複数回エンコーディングを重ねた問題、XOR鍵の長さ推定、Base64末尾の=数からの推測などのテクニックがあります。

見た目で『これBase64だ』ってわかるようになるんだ…
この記事は、CTF思考フレームワーク第51回。エンコーディング系問題(Base*・XOR・ROT*)の見分け方、CyberChef での解析、自動判定ツール、CTF典型問題のパターンを整理します。
📖 この記事はシリーズの一部です
「CTF思考フレームワーク」 #51 / 全86記事 → シリーズ一覧を見る →
🔢 Base64を見ても暗号と勘違いしないこと、それがCTFのCryptoカテゴリ最初の関門。Base・XOR・エンコーディングは「暗号化ではなく符号化」、見分けがつくと一気に視界が開けます。
Base16/32/58/64/85、XOR(単純鍵・繰り返し鍵)、URL/HTML/Unicodeエスケープ。問題文を眺めて「これは符号化、これは暗号、これは難読化」と素早く分類するのがCryptoの初動。
CTF頻出のウォームアップを瞬殺できるようになります⚡

Base64やXORはCTFの定番ウォームアップ。瞬殺できるようになろう⚡
先に意味を押さえておくと読みやすい用語です。
- CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
- マルウェア: 情報を盗む、端末を壊す、勝手に操作するなど悪意あるソフトの総称です。
- JWT: ログイン状態や権限情報を安全に渡すために使われるトークン形式です。
👀 観察フェーズ:まず何を見る?

見たら「これBase64かな?」「Hex?」「URLエンコード?」と即座にパターン認識🔍
まず文字集合と長さ。Base64は A-Za-z0-9+/=、Base32は A-Z2-7=、Base58は 1-9A-HJ-NP-Za-km-z。長さが4の倍数ならBase64確定の補助証拠。
- 使用文字(A-Z / a-z / 数字 / 記号)
- 長さの倍数性(Base64は4倍数、Base32は8倍数)
- 末尾パディング(
=の数) - 繰り返しパターン(同じバイトのXOR痕跡)
- エントロピー(高ければ暗号 or 圧縮、低ければ符号化)
- 区切り文字(hex の空白・コロンなど)

CyberChefのMagicレシピが自動判定してくれるから便利だね💡
🤔 仮説フェーズ:攻撃者は何を考える?

エンコーディング系の典型は4種類。
🕶️ CTF出題者は「複数のエンコーディング段重ね」が大好物。Base64 → hex → reverse → Base85 みたいな多段がよくあります。XORは「鍵が短い繰り返し型」「ファイルヘッダ既知(PNG/PE)」のいずれかが多く、頻度+既知平文で素早く解けます。
📦 仮説①:Base64/Base32/Base58
長さが4の倍数で=パディングはBase64の典型。復号→中身確認を繰り返すと最終層に達する。
⚙️ 仮説②:XORエンコード
同じ鍵で繰り返しXOR。既知平文(flag{等)とXORすると鍵が出る。
🌐 仮説③:URL/HTML/Unicodeエンコード
%XX、&#NNN;、\\uXXXXのパターン。チェーンしてあると気づきにくい。
🔁 仮説④:多重エンコード(ROT→Base64→Hex)
CTFではよく3〜5層重ねた問題が出る。1層ずつ剥がす忍耐が必要。

「文字種・長さ・パディング」の3要素で大半は当てられるんだね💡
🔬 検証フェーズ:どうやって確かめる?

CyberChefのMagic recipeは強力。Pythonならcodecs.decodeでループ処理🧪
CyberChefの「Magic」機能でレシピ自動推定が王道。手動なら base64 → utf8 → 再判定 のループ。XORは xortool や xor-bruteforce で鍵長推定。
# Python: 多段デコード
import base64
x = b"S0RVe2V4YW1wbGV9"
for _ in range(3):
try:
x = base64.b64decode(x)
print(x)
except: break
# XOR:既知平文を使った鍵抽出
ct = bytes.fromhex("...")
known = b"FLAG{"
key = bytes(c ^ k for c, k in zip(ct[:len(known)], known))
print(key)

XORはxor.pyやxortoolで鍵長+鍵推定まで自動化できるんだね💡
⚔️ 攻撃フェーズ:実際の手口

エンコーディング系で詰む典型トップ3。
攻撃の典型:①Base64で隠した情報、②単純XORで「暗号化したつもり」、③繰り返しXORで鍵長=最頻周期、④HTMLエンティティ・URLエンコードで難読化、⑤Unicodeホモグリフ。
# 繰り返し鍵XOR:鍵長推定
from itertools import combinations
def hamming(a, b):
return sum(bin(x ^ y).count("1") for x, y in zip(a, b))
def key_length(ct, max_k=40):
res = []
for k in range(2, max_k):
chunks = [ct[i:i+k] for i in range(0, k*4, k)]
d = sum(hamming(a, b) for a, b in combinations(chunks, 2)) / (6 * k)
res.append((d, k))
return sorted(res)[:3]
XORで難読化された設定ファイルや通信は今でも普通に出くわします。マルウェア解析でもXOR + 文字列定数の組み合わせは超頻出パターン⚙️
Hexっぽく見えるBase64を間違えてHexで読むと永遠に解けない。長さチェックが大事。
鍵長を間違えると部分的に意味が通る偽平文が出てハマる。Index of Coincidenceで確認。
記号も含むならROT47/Atbash/Affineの可能性も。最初の頭の柔らかさが鍵。
🛡️ 防御フェーズ:どう守る?

エンコーディングは「秘匿ではなく転送」のため!🛡️
実務の観点:「Base64は暗号化ではない」と全社員が知っているだけで、誤運用のかなりの部分が消えます。秘密はAES等の認証付き暗号で守る、が原則。
- 機密情報をBase64・XORだけで守らない(暗号化ではない)
- AES-GCM等の認証付き暗号を使う
- XORで難読化されたマルウェア設定をDLPで検知(高エントロピー+ヘッダ既知)
- Base64 + JSONで送るAPIにメッセージ完全性(HMAC)を付ける
- URLエンコード・HTMLエンティティ二段デコードによるWAF Bypass対策
- Unicodeホモグリフ攻撃対策(IDN表示制限)
Base64は転送効率化のためのエンコーディング。秘匿性ゼロ。機密保護には暗号を使う。
使うとしてもストリーム暗号(ChaCha20等)の中の1要素として。鍵管理あってこその安全。
Base64+暗号化、Base64+JWT、Base64+TLSのように本物の暗号と組合せて使う。

「Encoding != Encryption」を絶対に忘れない💪
⚠️ よくある落とし穴
- Base64 = 暗号化と誤解し、機密をBase64保存
- 多段エンコードを「1回デコードして終わり」と判断
- XOR鍵長推定で最頻ハミング距離だけ見て、第2候補を試さない
- Base32とBase64を文字集合だけで誤分類
- URL/HTMLエスケープ多段で、WAFが復号後を見ていない
- Unicode正規化(NFKC等)の前後で同一文字判定をミス
🧰 ツール早見表
| ツール | 用途 | 備考 |
|---|---|---|
| CyberChef | 万能エンコーダ | Magic機能で自動判定 |
| xortool | 繰り返しXOR鍵推定 | ファイル種別ヒント可 |
| base58 / base85 cli | 少数派エンコード | BTC/Bitcoin系で使用 |
| Python codecs / base64 | 自作スクリプト用 | 多段ループに最適 |
| Burp Decoder | Web系の多段デコード | Burp内で完結 |
🎓 本気で学びたい人へ
暗号技術を「趣味」から「仕事」に変えたい方へ。🎓 ササエルはセキュリティ・インフラを体系的に学べるスクールです。
📚 もっと深く学びたい人へ
体系的に攻撃と防御の両面を学びたいなら『ホワイトハッカー入門 第2版』が分かりやすい入口です📚
📚 次に読みたい
✍️ 学んだことを発信する
学んだことをWordPressブログでアウトプットしたい方は、ConoHa WINGから始めるのが手軽です。
⚖️ 大事なお約束
この記事の手法は、必ず自分の環境か、許可されたCTF・脆弱性報奨金プログラム(HackerOne、Bugcrowd等)で試してください。他人のサービスに無断で攻撃を仕掛けるのは不正アクセス禁止法違反、立派な犯罪です。学んだ知識は守る側で活かしましょう🤝
この記事は合法な学習・防御目的での解説です。許可のないシステムへの攻撃は犯罪になります(不正アクセス禁止法ほか)。検証は必ず自分が管理する環境・CTF・公式ハンズオンで行ってください🙏


