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

【ブロック暗号応用編】Bit-flip・Padding Oracle・Nonce再利用|CTF思考フレームワーク #55

【ブロック暗号応用編】Bit-flip・Length Extension・Nonce再利用|CTF思考フレームワーク #55 アイキャッチ画像
安全に生きたい編集部

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

ブロック暗号の応用攻撃って、Padding Oracle以外に何があるの?

(注: Length Extension は MAC編で扱います) Attack((MAC編参照))、Nonce再利用(GCM/CTRが完全に破れる)、Bit-Flip攻撃(CBCで暗号文を改ざんできる)――AESアルゴリズム自体は無事でも、運用で破れる。これがブロック暗号の現代攻撃の主戦場です。

ブロック暗号応用攻撃は、AES等のアルゴリズム自体を破るのではなく、運用・実装の穴を突くもの。Padding Oracle(CBCの典型)、(注: Length Extension は MAC編で扱います)(Merkle-Damgård系ハッシュ)、Nonce再利用(GCM/CTR壊滅)、Initial Vector の不適切設定。実際のWeb・APIで多数発見されています。

アルゴリズムが安全でも、運用ミスでこんなに壊れるんだ…

この記事は、CTF思考フレームワーク第55回。ブロック暗号応用攻撃(Bit-Flip・(注: Length Extension は MAC編で扱います)・Nonce再利用・Padding Oracle)の手口と、開発側の防御策(認証付き暗号AEAD・Nonce管理・IV検証)を整理します。

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

⚙️ Bit-flipping、(注: Length Extension は MAC編で扱います)、Nonce再利用。応用編はAES入門の隙間にもう一段深い穴を掘る話。「認証なし暗号」「同一nonce」「ストリーム暗号誤用」が三大死線です。

ブロック暗号応用は「暗号文を一部だけ書き換えて意味を変える」「認証鍵をすり抜ける」「鍵を一切知らずに既存の暗号化機能を悪用する」という、攻撃側目線が一段抽象化される領域。

難易度:★★★(上級)

Bit-flip・(注: Length Extension は MAC編で扱います)・Nonce再利用の応用攻撃を学びます🧨

ブロック暗号応用は「正しいプリミティブを誤った文脈で使う」ところに穴がある🧨

この記事で出てくる言葉

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

  • CTF: セキュリティの練習問題を解く競技。必ず許可された環境だけで試します。
  • 権限昇格: 一般ユーザーから管理者権限など、より強い権限を得ることです。
  • 脆弱性: ソフトや仕組みにある弱点。攻撃者に悪用されると不正アクセスにつながります。

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

まず「認証はどこにあるか」「IV/nonceの管理は誰が」を観察。設計の歪みを探す🔍

まず使われているモードと、認証(MAC/AEAD)の有無を確認。CBC/CTRに認証が付いていなければBit-flipping・MAC偽造の余地が大きく、GCMでもnonce再利用なら全壊。

  • モード(CBC / CTR / GCM / OCB / SIV)
  • 認証の有無(HMAC、Poly1305、AESのGCM/SIV)
  • IV/nonceの管理(ランダム / カウンタ / 静的)
  • パディング種別(PKCS#7 / ZeroPadding / Random)
  • 鍵スケジュール(毎セッション再生成 / 静的)
  • タイミングサイドチャネル(MAC比較の早期return等)

ブロック暗号応用攻撃の3要素: Bit-flip / (注: Length Extension は MAC編で扱います) / Nonce-reuse。それぞれ独立に致命的👀

応用攻撃って「鍵を知らないままできること」がメインなんだね😨

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

応用攻撃の典型は4パターン

🕶️ 攻撃者は「暗号文の一部だけ書き換えて、復号後の値を狙った値に変える」ことを考えます。CBCならbit-flip、CTRなら直接XOR、AES-GCMはnonce再利用でforbidden attack。(注: Length Extension は MAC編で扱います)は古典MD系MAC(Merkle-Damgard)の宿命。

🪞 仮説①:CBC Bit-flipping

CBCの構造特性で前ブロック暗号文を1bit変えると次ブロックの平文も同じビットが反転

🪶 仮説②:(注: Length Extension は MAC編で扱います)(MD5/SHA-1)

H(secret || data)のMACは追加データを付けたMACが計算可能。HMACなら防げる。

🎲 仮説③:Nonce再利用 in CTR/GCM

同じnonceで2つ平文を暗号化→XOR取ると平文XORが判明。GCMなら認証鍵漏洩で偽造可能。

⚠️ 仮説④:Padding Oracle 拡張

CBC暗号化APIに対する攻撃者制御の暗号化要求からも復号可能(Encryption Oracle)。

応用攻撃は「アルゴリズムと使い方の境界」に潜むんだね💡

🔬 検証フェーズ:どうやって確かめる?

これらはcryptopals challenge(Set 2-4)で全部訓練できる。CTFerなら必修🧪

実装を見て、bit-flip/nonce再利用/SIV未使用などの構造的弱点を炙り出す。MAC比較が == 演算子で早期returnしているとタイミング攻撃も成立。

# CBC bit-flip:認証なし'admin=0'を'admin=1'に
# C_{i-1}[byte] ^= old_value ^ new_value
# → P_i[byte] が書き換わる(前ブロックは壊れる)

# CTR nonce再利用検出(同一nonceで2つの暗号文)
ctxt1 ^ ctxt2  # = ptxt1 ^ ptxt2 の関係露呈

# Forbidden attack(AES-GCM nonce再利用)
# 認証鍵Hを多項式から復元できる

GCM nonce再利用については“forbidden attack”と呼ばれていて、Streamのスポンサー鍵が漏れるんだね😱

⚔️ 攻撃フェーズ:実際の手口

応用攻撃の代表トップ3

応用攻撃:①CBC Bit-flipping(認証なし時)、②CTR nonce再利用(XOR露呈)、③GCM forbidden attack(認証鍵漏洩)、④(注: Length Extension は MAC編で扱います)(MD5/SHA1のM-D構造)、⑤Padding Oracle拡張版(CBC-MAC等)。

# (注: Length Extension は MAC編で扱います)(MD5/SHA-1)
# H(secret || msg)が既知のとき H(secret || msg || pad || ext) を計算可能
# 攻撃ツール:hashpump
hashpump -s ORIG_HASH -d "user=alice" -k 16 -a "&admin=1"
# 16はsecretの推定長

# AES-GCM forbidden attack 概念
# 同一nonceで2つのct/tagを得ると、Hが多項式根として解ける

AES-SIV / AES-GCM-SIVはnonce再利用に耐性のある「Misuse-Resistant」モード。実装で nonce 管理に自信がない場合は SIV系を採用するのが現代の正解✨

① CBC Bit-flipで権限昇格

Cookieuser=guest&role=userrole=adminにbit-flip。MACがなければ即成立。

② (注: Length Extension は MAC編で扱います)で署名偽造

MD5(secret || msg)の値が分かっていればmsg||extraの正規MACを計算可。FlickrのAPI事故で有名。

③ GCM nonce再利用→鍵漏洩

同nonceの2暗号文+認証タグから認証鍵Hを復元。任意メッセージの偽造が可能になる。

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

応用攻撃を防ぐ3鉄則!🛡️

防御は「認証付き暗号を使う」「nonce重複を物理的に不可能にする」「MAC比較を定数時間で行う」の三本柱。標準ライブラリのAEAD一択で大半は防げます。

  • AEAD(GCM / ChaCha20-Poly1305 / SIV)を必ず使用
  • nonceは 96bit乱数 or 単調増加カウンタ
  • 鍵を 2^32ブロック使用したらローテ
  • MAC比較は constant_time_eq
  • (注: Length Extension は MAC編で扱います)に弱いMD5/SHA1ベースMACを廃止(HMAC使用)
  • nonce重複検知ログを運用に組み込み
✅ AEAD(GCM/ChaCha20-Poly1305)で完結

生のCBCやCTRを直接使わず、認証付き暗号を選ぶ。

🛡️ MACはHMAC必須

メッセージ認証はHMAC-SHA256以上。MD5/SHA-1の単純連結は禁止。

🎯 nonce/IV管理は独立変数で厳密に

カウンタやランダム生成で絶対に重複しない設計。鍵交換のたびにnonce空間をリセット。

「AEADがあれば応用攻撃のほとんどは死ぬ」。これが現代暗号の結論💪

⚠️ よくある落とし穴

  1. CBC + 自作CRCを「認証付き」と誤認
  2. CTR/GCMでnonceを乱数生成しつつ 誕生日攻撃のサイズ制限を考慮しない
  3. (注: Length Extension は MAC編で扱います)対策にHMACでなく単純連結MACを使う
  4. MAC検証を==で行いタイミング情報を漏らす
  5. AES-GCMのタグを切り詰めて高速化(forge容易になる)
  6. nonceに hostname や PIDを混ぜて「ユニーク」と思い込む

🧰 ツール早見表

ツール用途備考
hashpump(注: Length Extension は MAC編で扱います)自動化MD5/SHA1/SHA2系
cryptopals tools攻撃テクニック網羅学習にも実戦にも
PyCryptodome AEAD実装の参考GCM/ChaCha20-Poly1305
libsodium安全な高水準APInonce誤用を防ぐ設計
Project Wycheproofcrypto実装テストGoogle製テストベクター

🎓 本気で学びたい人へ

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

PR / 広告

ササエル

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

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

📚 次に読みたい

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

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

PR / 広告

ConoHa WING

⚖️ 大事なお約束

必ず守ってね

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

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

記事URLをコピーしました