Symmetric Crypto
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
CTFsで確認すべき点
- Mode misuse: ECBパターン、CBCの可変性、CTR/GCMのnonceの再利用。
- Padding oracles: 不正なpaddingに対する異なるエラー/タイミング。
- MAC confusion: CBC-MACを可変長メッセージで使う、またはMAC-then-encryptのミス。
- XOR everywhere: ストリーム暗号やカスタム実装はしばしばkeystreamとのXORに還元される。
AESのモードと誤用
ECB: Electronic Codebook
ECB leaks patterns: equal plaintext blocks → equal ciphertext blocks. これにより次のことが可能になる:
- Cut-and-paste / ブロックの並べ替え
- ブロック削除(フォーマットが有効なままなら)
プレーンテキストを制御してciphertext(またはcookie)を観察できる場合は、繰り返しのブロック(例: 多数のA)を作成して繰り返しを探してみる。
CBC: Cipher Block Chaining
- CBCはmalleable:
C[i-1]のビットを反転するとP[i]の予測可能なビットが反転する。 - システムが有効なpaddingと無効なpaddingを区別して露出する場合、padding oracleが存在する可能性がある。
CTR
CTRはAESをストリーム暗号に変える: C = P XOR keystream。
同じkeyでnonce/IVが再利用されると:
C1 XOR C2 = P1 XOR P2(古典的なkeystream再利用)- 既知のplaintextがあれば、keystreamを回復して他を復号できる。
GCM
GCMもnonce再利用でひどく壊れる。same key+nonceが複数回使われると、通常次が発生する:
- 暗号化でのkeystream再利用(CTRと同様)、既知のplaintextがあれば復号可能。
- 整合性保証の喪失。露出するもの(同一nonce下の複数のmessage/tagペア)によっては、攻撃者がtagをforgeできる場合がある。
運用上の指針:
- AEADでの “nonce reuse” を重大な脆弱性として扱う。
- 同一nonce下で複数のciphertextがある場合は、まず
C1 XOR C2 = P1 XOR P2のような関係を確認する。
ツール
- CyberChef for quick experiments: https://gchq.github.io/CyberChef/
- Python:
pycryptodomefor scripting
ECBの利用パターン
ECB (Electronic Code Book) は各ブロックを独立に暗号化する:
- equal plaintext blocks → equal ciphertext blocks
- これが構造を露出し、cut-and-paste型の攻撃を可能にする
![]()
検出アイデア: token/cookieのパターン
何度かログインして常に同じcookieが返るなら、ciphertextが決定的(ECBまたは固定IV)な可能性がある。
長い繰り返し文字などでほぼ同一のplaintextレイアウトを持つ2つのユーザを作成し、同じオフセットで繰り返しのciphertextブロックが見られるなら、ECBが有力な疑い。
利用パターン
ブロック全体の削除
トークン形式が <username>|<password> のようでブロック境界が整う場合、adminブロックが整列するようにユーザを作り、前のブロックを削除して有効なadminトークンを得られる場合がある。
ブロックの移動
バックエンドがpaddingや余分なスペース(admin vs admin )を許容するなら:
adminを含むブロックを整列させ- そのciphertextブロックを別のトークンへ差し替え/再利用する
Padding Oracle
それが何か
CBCモードでは、サーバが復号されたplaintextがPKCS#7 paddingとして有効かどうかを(直接または間接に)明らかにする場合、多くの場合:
- keyなしでciphertextを復号できる
- 選択したplaintextを暗号化(ciphertextをforge)できる
オラクルは次のような形で現れる:
- 特定のエラーメッセージ
- 異なるHTTPステータス/レスポンスサイズ
- タイミング差
実践的な悪用
PadBusterは古典的なツール:
GitHub - strozfriedberg/PadBuster: Automated script for performing Padding Oracle attacks
Example:
perl ./padBuster.pl http://10.10.10.10/index.php "RVJDQrwUdTRWJUVUeBKkEA==" 16 \
-encoding 0 -cookies "login=RVJDQrwUdTRWJUVUeBKkEA=="
Notes:
- ブロックサイズはしばしば
16for AES. -encoding 0は Base64 を意味します。- oracle が特定の文字列の場合は
-errorを使用してください。
なぜ動作するか
CBC の復号は P[i] = D(C[i]) XOR C[i-1] を計算します。C[i-1] のバイトを変更し、パディングが有効かどうかを観察することで、P[i] をバイト単位で復元できます。
CBC におけるビットフリップ
padding oracle がなくても、CBC は変更可能です。暗号文ブロックを改変でき、アプリケーションが復号された plaintext を構造化データ(例: role=user)として扱う場合、次のブロックの指定位置にある特定の plaintext バイトを変更するためにビットを反転できます。
典型的な CTF パターン:
- Token =
IV || C1 || C2 || ... - あなたが
C[i]のバイトを制御できる P[i+1] = D(C[i+1]) XOR C[i]のため、P[i+1]の plaintext バイトを狙います
これはそれ自体で confidentiality の破壊ではありませんが、integrity がない環境では一般的な privilege-escalation のプリミティブになります。
CBC-MAC
CBC-MAC は特定の条件下でのみ安全です(特に 固定長メッセージ と正しいドメイン分離)。
古典的な可変長偽造パターン
CBC-MAC は通常次のように計算されます:
- IV = 0
tag = last_block( CBC_encrypt(key, message, IV=0) )
選択したメッセージの tag を取得できる場合、CBC がブロックを連鎖させる仕組みを利用して、キーを知らなくても結合(または関連する構成)の tag を作成できることがよくあります。
これは、ユーザ名や role を CBC-MAC で MAC するような CTF の cookie/token に頻繁に現れます。
より安全な代替
- HMAC(SHA-256/512)を使用する
- CMAC(AES-CMAC)を正しく使用する
- メッセージ長 / ドメイン分離を含める
Stream ciphers: XOR and RC4
基本的な考え方
ciphertext = plaintext XOR keystream
つまり:
- plaintext を知っていれば、keystream を復元できる。
- keystream が再利用される(同じ key+nonce)の場合、
C1 XOR C2 = P1 XOR P2。
XOR ベースの暗号
i の位置で任意の plaintext セグメントを知っていれば、keystream バイトを復元し、同じ位置の他の ciphertext を復号できます。
Autosolvers:
RC4
RC4 はストリーム暗号で、暗号化と復号は同じ操作です。
同じキーで既知の plaintext の RC4 暗号化を得られる場合、keystream を復元して同じ長さ/オフセットの他のメッセージを復号できます。
Reference writeup (HTB Kryptos):
Hack The Box - Kryptos - 0xRick\xe2\x80\x99s Blog
Tip
AWSハッキングを学び、実践する:
HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。


