ctf-crypto

ctf-crypto

热门

提供适用于 CTF 竞赛的密码学攻击技术指南。当需要应对涉及 RSA、AES、ECC、格(Lattice)、LWE、CVP、数论、Coppersmith、Pollard、Wiener、填充提示攻击(Padding Oracle)、GCM、密钥派生或流/分组密码缺陷等加密、哈希、签名、零知识证明(ZKP)、伪随机数生成器(PRNG)及数学密码难题时使用。

2725Star
329Fork
更新于 2026/7/10
SKILL.md
只读
名称
ctf-crypto
描述

提供适用于 CTF 竞赛的密码学攻击技术指南。当需要应对涉及 RSA、AES、ECC、格(Lattice)、LWE、CVP、数论、Coppersmith、Pollard、Wiener、填充提示攻击(Padding Oracle)、GCM、密钥派生或流/分组密码缺陷等加密、哈希、签名、零知识证明(ZKP)、伪随机数生成器(PRNG)及数学密码难题时使用。

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 - 传统密码:维吉尼亚密码(Vigenère,含 Kasiski 校验)、Atbash 密码、替换盘、XOR 变体(含多字节频率分析)、确定性 OTP、级联 XOR、书本密码、OTP 密钥重用 / 多次使用(many-time pad)、可变长度单表/多表替代、网格排列密码密钥空间化简、基于图像的恺撒位移密码、通过文件头恢复 XOR 密钥
  • modern-ciphers.md - 现代密码攻击:AES(CFB-8、ECB 泄露)、CBC-MAC/OFB-MAC、填充提示攻击(Padding Oracle)、S 盒碰撞、GF(2) 消元法、LCG 部分输出恢复、复合模数上的仿射密码、带派生密钥的 AES-GCM、AES-GCM Nonce 重用(Forbidden 攻击)、类 Ascon 缩减轮数差分分析、自定义线性 MAC 伪造、CBC 填充提示(整块解密)、Bleichenbacher RSA PKCS#1 v1.5 填充提示(ROBOT 攻击)、生日攻击 / 中途相遇攻击(MITM)、CRC32 碰撞签名伪造、通过逐字节清零 Oracle 恢复 AES 密钥、通过错误信息解密 Oracle 伪造 AES-CBC 密文
  • modern-ciphers-2.md - 现代密码攻击(第 2 部分):Blum-Goldwasser 比特扩展 Oracle、哈希长度扩展攻击、压缩 Oracle(CRIME 式攻击)、通过环检测实现哈希函数时间逆转、OFB 模式可逆 RNG 反向解密、通过公钥哈希 XOR 弱密钥派生、HMAC-CRC 线性攻击、OFB 模式下的 DES 弱密钥、SRP 协议绕过、修改版 AES S 盒爆破、缩减轮数 AES 方形攻击(Square Attack)、AES-ECB 逐字节选择明文攻击、AES-ECB 剪贴块篡改、AES-CBC IV 比特翻转认证绕过、Rabin LSB 奇偶 Oracle、PBKDF2 预哈希绕过、通过 fastcol 实现 MD5 多碰撞
  • modern-ciphers-3.md - 现代密码攻击(第 3 部分):自定义哈希状态逆转、小负载 CRC32 爆破、带噪 RSA LSB Oracle 纠错、海绵哈希 MITM 碰撞、CBC IV 伪造 + 数据块截断、填充提示转换为 CBC 比特翻转 RCE、SPN S 盒交集攻击、基于时间戳种子 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(开立方)、共享模数(Common Modulus)、Wiener 攻击、Pollard's p-1、Hastad 广播攻击、带线性填充的 Hastad(Coppersmith)、Franklin-Reiter 相关明文攻击(e=3)、Coppersmith 线性相关素数、费马分解 / 连续素数、多素数 RSA、限制数字 RSA、Coppersmith 结构化素数、Manger Oracle、多项式哈希
  • rsa-attacks-2.md - RSA 攻击(进阶):RSA p=q 校验绕过、立方根 CRT gcd(e,phi)>1、从 phi(n) 倍数分解 N、乘法同态签名伪造、基于进制表示的弱密钥生成、gcd(e,phi)>1 时的 RSA 指数化简、批量 GCD 共享素数分解、从 dp/dq/qinv 恢复部分密钥、RSA-CRT 故障注入攻击(Fault Attack)、同态解密 Oracle 绕过、小素数 CRT 分解、蒙哥马利约简时序攻击、Bleichenbacher 低指数签名伪造、使用 e=1 及伪造模数的 RSA 签名绕过
  • ecc-attacks.md - ECC 攻击:小子群攻击、无效曲线攻击、Smart 攻击(异常曲线,附 Sage 代码)、故障注入、时钟群 DLP、Pohlig-Hellman 算法、ECDSA Nonce 重用、Ed25519 扭转侧信道、DSA Nonce 重用、基于 k 生成过程 MD5 碰撞的 DSA 密钥恢复
  • zkp-and-advanced.md - 零知识证明(ZKP)与高级主题:ZKP/图三色问题、Z3 求解器指南、混淆电路(Garbled Circuits)、Shamir 门限密钥共享(SSS)、Bigram 约束求解、条件竞争、Groth16 损坏设置(Broken 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 同步、密码破解、逻辑斯蒂映射混沌 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 的 Baby-step Giant-step (BSGS) 算法、LLL 算法、通过 LLL 的 Merkle-Hellman 背包密码、Coppersmith 算法、四元数 RSA、GF(2)[x] CRT、S 盒碰撞代码、LWE 格 CVP 攻击、非素数模数上的仿射密码、通过 GF(2) 线性代数实现自省 CRC
  • lattice-and-lwe.md - 格攻击诊断与工作流:LLL/BKZ/Babai、基于部分或偏置 Nonce 的 HNP、截断 LCG 状态恢复、LWE 嵌入与 CVP、Ring-LWE / Module-LWE 识别、正交格、子集和 / 背包问题及常见失效模式
  • exotic-crypto.md - 奇特代数结构:辫子群 DH / Alexander 多项式、单调函数求逆、热带半环余残(Residuation)、Paillier 密码系统、汉明码螺旋交错、ElGamal 通用重加密、FPE Feistel 爆破、二十面体对称群密码、Goldwasser-Micali 复制 Oracle
  • exotic-crypto-2.md - 奇特代数结构(第 2 部分,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 多项式系数恢复

何时转战其他领域

  • 如果主要瓶颈是理解二进制文件、混淆客户端或特殊的虚拟机,请切换至 /ctf-reverse
  • 如果题目在开始任何解密之前主要是数据包提取、磁盘恢复或隐写提取,请切换至 /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 个密钥
  • 维吉尼亚密码(Vigenère): 利用 flag 格式前缀进行已知明文攻击;由 (ct - pt) mod 26 派生密钥。未知密钥长度时使用 Kasiski 检验(重复序列距离的最大公约数 GCD)
  • Atbash 密码: A<->Z 替换;注意题目名称中是否有 "Abashed" 等提示
  • 替换盘(Substitution wheel): 爆破内/外字母表映射的所有旋转情况
  • 多字节 XOR: 按密钥位置切分密文,对每列独立进行频率分析;根据英文标准字母频率打分(空格 = 0x20)
  • 级联 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 剪贴块攻击:拼接密文块以伪造 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 -->