ctf-crypto

ctf-crypto

熱門

提供適用於 CTF 競賽的密碼學攻擊技巧。當需要針對加密、雜湊、簽章、ZKP(零知識證明)、PRNG(偽隨機數產生器)或涉及 RSA、AES、ECC、格(Lattice)、LWE、CVP、數論、Coppersmith、Pollard、Wiener、Padding Oracle、GCM、金鑰衍生,以及串流/區塊加密法弱點等數學密碼學問題進行攻擊時使用。

2725星標
329分支
更新於 2026/7/10
SKILL.md
唯讀
名稱
ctf-crypto
描述

提供適用於 CTF 競賽的密碼學攻擊技巧。當需要針對加密、雜湊、簽章、ZKP(零知識證明)、PRNG(偽隨機數產生器)或涉及 RSA、AES、ECC、格(Lattice)、LWE、CVP、數論、Coppersmith、Pollard、Wiener、Padding Oracle、GCM、金鑰衍生,以及串流/區塊加密法弱點等數學密碼學問題進行攻擊時使用。

CTF 密碼學

密碼學 CTF 題目的快速參考指南。此處列出各項技術的單行速查摘要;完整程式碼與詳細說明請參閱附屬檔案。

事前準備

Python 套件(全平台):

pip install pycryptodome z3-solver sympy gmpy2 hashpumpy fpylll py_ecc

Linux (apt):

apt install hashcat sagemath

macOS (Homebrew):

brew install hashcat

手動安裝:

  • SageMath — Linux: apt install sagemath, macOS: brew install --cask sage
  • RsaCtfTool — git clone https://github.com/RsaCtfTool/RsaCtfTool(自動化 RSA 攻擊)

注意: gmpy2 需要 libgmp — Linux: apt install libgmp-dev,macOS: brew install gmp

其他資源

  • classic-ciphers.md - 傳統密碼學:維吉尼亞密碼(+ Kasiski 檢驗法)、阿特巴希密碼(Atbash)、轉輪替換密碼、XOR 變體(+ 多位元組字頻分析)、確定性 OTP、瀑布式 XOR、書本密碼、OTP 金鑰重複使用 / 多次一次性密碼本(many-time pad)、可變長度單音替換密碼(homophonic substitution)、網格置換密碼金鑰空間縮減、基於影像的凱撒移位密碼、透過檔案格式標頭進行 XOR 金鑰還原
  • modern-ciphers.md - 現代密碼攻擊:AES(CFB-8、ECB 洩漏)、CBC-MAC/OFB-MAC、Padding Oracle、S-box 碰撞、GF(2) 消去法、LCG 部分輸出還原、複合模數上的仿射密碼、搭配衍生金鑰的 AES-GCM、AES-GCM Nonce 重複使用(Forbidden Attack)、類 Ascon 削減輪數差分密碼分析、自訂線性 MAC 偽造、CBC Padding Oracle(全區塊解密)、Bleichenbacher RSA PKCS#1 v1.5 Padding Oracle (ROBOT)、生日攻擊 / 中途相遇攻擊(Meet-in-the-middle)、CRC32 碰撞簽章偽造、透過逐位元組歸零 Oracle 進行 AES 金鑰還原、透過錯誤訊息解密 Oracle 進行 AES-CBC 密文偽造
  • modern-ciphers-2.md - 現代密碼攻擊(第二部分):Blum-Goldwasser 位元擴充 Oracle、雜湊長度擴充、壓縮 Oracle(CRIME 式)、透過週期檢測的雜湊函數時間逆轉、OFB 模式可逆 RNG 逆向解密、透過公鑰雜湊 XOR 的弱金鑰衍生、HMAC-CRC 線性攻擊、OFB 模式下的 DES 弱金鑰、SRP 協定旁路、修改版 AES S-Box 暴力破解、削減輪數 AES 的 Square 攻擊、AES-ECB 逐位元組選擇密文還原、AES-ECB 剪貼區塊操縱、AES-CBC IV 位元翻轉身份驗證旁路、Rabin LSB 奇偶 Oracle、PBKDF2 預雜湊旁路、透過 fastcol 的 MD5 多重碰撞
  • modern-ciphers-3.md - 現代密碼攻擊(第三部分):自訂雜湊狀態逆轉、小有效負載的 CRC32 暴力破解、帶雜訊 RSA LSB Oracle 糾錯、海綿雜湊 MITM 碰撞、CBC IV 偽造 + 區塊截斷、從 Padding Oracle 到 CBC 位元翻轉 RCE、SPN S-box 交集攻擊、從時間戳記種子 PRNG 還原 AES-CFB IV、三輪 XOR 協定金鑰抵銷、AES-CBC UnicodeDecodeError 旁道 Oracle、用於 XOR 聚合雜湊旁路的 SHA-256 基底攻擊、透過 XOR 區塊抵銷偽造自訂 MAC、透過 XOR+加法算術還原 HMAC 金鑰
  • stream-ciphers.md - 串流密碼攻擊:LFSR(Berlekamp-Massey 演算法、相關性攻擊、已知明文攻擊、Galois 與 Fibonacci 結構、透過自相關還原 Galois 抽頭)、RC4 第二位元組偏誤、XOR 連續位元組相關性
  • rsa-attacks.md - RSA 攻擊:小 e(立方根攻擊)、共模數攻擊、Wiener 攻擊、Pollard p-1 質因數分解、Hastad 廣播攻擊、帶線性填充的 Hastad 攻擊(Coppersmith)、Franklin-Reiter 相關訊息攻擊(e=3)、Coppersmith 線性相關質數、費馬/連續質數分解、多質數 RSA、限制數位(restricted-digit)、Coppersmith 結構化質數、Manger Oracle、多項式雜湊
  • rsa-attacks-2.md - RSA 攻擊(進階/特化):RSA p=q 驗證旁路、立方根 CRT gcd(e,phi)>1、從 phi(n) 倍數進行質因數分解、乘法同態簽章偽造、透過基數表示法(Base Representation)的弱金鑰生成、gcd(e,phi)>1 的 RSA 指數化簡、批次 GCD 共享質數分解、從 dp/dq/qinv 部分還原金鑰、RSA-CRT 故障注入攻擊(Fault Attack)、同態解密 Oracle 旁路、小質數 CRT 分解、蒙哥馬利約簡時序攻擊、Bleichenbacher 低指數簽章偽造、使用 e=1 及精心設計模數的 RSA 簽章旁路
  • ecc-attacks.md - ECC 橢圓曲線攻擊:小子群攻擊(Small Subgroup)、無效曲線攻擊(Invalid Curve)、Smart 攻擊(異常曲線,附 Sage 程式碼)、故障注入、時鐘群 DLP、Pohlig-Hellman 演算法、ECDSA Nonce 重複使用、Ed25519 扭轉旁道、DSA Nonce 重複使用、透過 k 生成時的 MD5 碰撞還原 DSA 金鑰
  • zkp-and-advanced.md - ZKP / 圖三著色問題、Z3 解算器指南、混淆電路(Garbled Circuits)、Shamir 秘密分享(SSS)、二元字母約束求解、競態條件(Race Conditions)、Groth16 破壞性 Setup、DV-SNARG 偽造、用於置換還原的 KZG 配對 Oracle、Shamir SSS 重複使用多項式係數
  • prng.md - PRNG 攻擊(基礎):MT19937、透過 GF(2) 魔術矩陣進行 MT 浮點數還原以預測 Token、LCG、GF(2) 矩陣 PRNG、透過 Z3 還原 V8 XorShift128+ Math.random 狀態、平方取中法、確定性 RNG 爬山演算法、隨機模式 Oracle、基於時間的種子、透過 ctypes 同步 C 語言 srand/rand、密碼破解、Logistic 映射混沌 PRNG
  • prng-attacks.md - PRNG 攻擊(CTF 近年題目,2017+):MT 子集和種子還原、MT19937 約束傳播、透過 Z3 逆轉 Rule 86 細胞自動機、Java LCG 中途相遇部分模數攻擊、透過模逆元逆向步進 LCG、LFSR 位元折疊 ASCII 奇偶性、Z3 解算時間時序 Oracle、randcrack DSA k 預測、格式化字串 PRNG 種子偏移、NTP 毒化 PRNG UUID XOR
  • historical.md - 古典/歷史密碼(Lorenz SZ40/42、書本密碼實作)
  • advanced-math.md - 高階數學攻擊:同源(Isogenies)、Pohlig-Hellman、一般 DLP 的小步大步法(BSGS)、LLL 演算法、透過 LLL 的 Merkle-Hellman 背包密碼攻擊、Coppersmith、四元數 RSA、GF(2)[x] 中國剩餘定理、S-box 碰撞程式碼、LWE 格 CVP 攻擊、非質數模數上的仿射密碼、透過 GF(2) 線性代數的自省 CRC
  • lattice-and-lwe.md - 格攻擊(Lattice Attack)排查與工作流程:LLL/BKZ/Babai、來自部分或有偏誤 Nonce 的 HNP、截斷 LCG 狀態還原、LWE 嵌入與 CVP、Ring-LWE / Module-LWE 識別、正交格、子集和 / 背包問題以及常見失敗模式
  • exotic-crypto.md - 異國/特殊代數結構(編組群 DH / Alexander 多項式、單調函數反轉、熱帶半環殘餘、Paillier 密碼系統、漢明碼螺旋交錯、ElGamal 通用重新加密、FPE Feistel 暴力破解、二十面體對稱群密碼、Goldwasser-Micali 複製 Oracle)
  • exotic-crypto-2.md - 異國/特殊代數結構(第二部分,2017+):BB-84 QKD 中間人攻擊、ElGamal 平庸 DLP(B=p-1)、透過同態倍增的 Paillier LSB Oracle、差分隱私雜訊消除、同態加密位元擷取、透過 Jordan 標準型的矩陣 ElGamal、透過 Pollard 的 OSS 簽章偽造、無私鑰解密 Cayley-Purser、BIP39 部分助記詞校驗和暴力破解、Asmuth-Bloom CRT 門檻還原、帶多項式質數的 Rabin、LCG 週期檢測、Vandermonde 多項式係數還原

何時應切換策略 / 轉向

  • 若真正的瓶頸在於理解二進位檔、混淆過的用戶端或特殊 VM,請切換至 /ctf-reverse
  • 若題目在解密前主要涉及封包擷取分析、磁碟復原或隱寫術(Stego)提取,請切換至 /ctf-forensics
  • 若在解決密碼學部分後,任務僅剩針對有漏洞的網路服務撰寫 Exploit 進行攻擊,請切換至 /ctf-pwn/ctf-web
  • 若密碼學題目涉及對抗性機器學習、模型提取或基於神經網路的密碼學,請切換至 /ctf-ai-ml
  • 若題目實質上是編碼謎題、奇特密碼或 Polyglot 技巧而非真正的密碼分析,請切換至 /ctf-misc

快速上手指令

# 辨識密碼類型
python3 -c "from Crypto.Util.number import *; n=<N>; print(f'bits={n.bit_length()}')"

# RSA 快速檢查
python3 -c "from sympy import factorint; print(factorint(<n>))"  # 是否存在小質因數?
openssl rsa -pubin -in key.pub -text -noout  # 從 PEM 提取 n, e

# 快速質因數分解工具
python3 RsaCtfTool.py -n <n> -e <e> --uncipher <c>

# XOR 分析
python3 -c "from pwn import xor; print(xor(bytes.fromhex('<hex>'), b'flag{'))"

# 雜湊辨識
hashid '<hash>'
hashcat --identify '<hash>'

# SageMath(用於格/ECC)
sage -c "print(factor(<n>))"

古典密碼學

  • 凱撒密碼(Caesar): 字頻分析或暴力破解 26 個金鑰
  • 維吉尼亞密碼(Vigenere): 使用 flag 格式前綴進行已知明文攻擊;利用 (ct - pt) mod 26 推導金鑰。金鑰長度未知時使用 Kasiski 檢驗法(計算重複序列距離的最大公因數 GCD)
  • 阿特巴希密碼(Atbash): A<->Z 對應替換;留意題目名稱中是否帶有 "Abashed" 等提示
  • 轉輪替換密碼(Substitution wheel): 暴力破解內外圈字母表映射的所有旋轉角度
  • 多位元組 XOR: 依金鑰位置切分密文,對每一欄獨立進行字頻分析;依據英文字母頻率評分(空白鍵 = 0x20)
  • 瀑布式 XOR(Cascade XOR): 暴力破解第一個位元組(嘗試 256 次),其餘部分即可確定性地跟著解開
  • XOR 旋轉(2 的次方): 偶數位元與奇數位元絕不混合;僅有 4 種候選狀態
  • 弱 XOR 驗證: 單位元組 XOR 檢查的通過率為 1/256;只要預算足夠即可直接暴力破解
  • 確定性 OTP: 使用已知明文 XOR 還原金鑰流;比對負載平衡後端的輸出
  • OTP 金鑰重複使用(Many-time pad): C1 XOR C2 XOR known_P = unknown_P;在完全沒有已知明文時使用拖曳猜測法(Crib dragging)
  • 單音替換密碼(可變長度): 多字元密文組映射至單一明文字元。找出具備相同子 n-gram 頻率的 n-gram,以符號替換後按單字母替換密碼求解。參閱 classic-ciphers.md
  • 網格置換密碼: 具備獨立列/行置換的 5x5 網格會將金鑰空間大幅壓縮至 5! x 5! = 14,400;可在毫秒級完成暴力破解。參閱 classic-ciphers.md
  • 基於影像的凱撒移位: 像素列/行依據每條條帶的偏移量進行移位;比對原始影像與移位後影像,即可從移位量中提取 ASCII 編碼的 flag。參閱 classic-ciphers.md
  • 波利比烏斯方格密碼(Polybius Square): 5x5 網格將字母對映射至明文;數字/座標用於編碼位置。參閱 classic-ciphers.md
  • 透過檔案格式標頭進行 XOR 金鑰還原: 檔案宣稱為 PDF/PNG/ZIP,但 file 指令回傳 "data"。將開頭位元組與預期的魔術位元組(Magic Bytes)進行 XOR 以推導重複金鑰;再利用檔尾結構(如 %%EOF、IEND 標記)進行延伸。參閱 classic-ciphers.md

完整程式碼範例請參閱 classic-ciphers.md

現代密碼攻擊

  • AES-ECB: 區塊洗牌、逐位元組選擇明文後綴還原(每個位元組需 256 次查詢,工具:FeatherDuster ecb_cpa_decrypt);影像 ECB 會保留視覺圖樣。ECB 剪貼攻擊(Cut-and-paste):拼接密文區塊以偽造 JSON 欄位(例如 is_admin: true)。參閱 [modern-ciphers-2.md](modern-ciphers-2.md#aes-ecb-byte-at-a-ti

<!-- truncated for translation batch; full body continues in source -->