RSA/AES/ECC/PRNG/零知识证明:ctf-skills的ctf-crypto技能如何助你破解CTF密码学题(完整技巧清单)
【免费下载链接】ctf-skillsAgent skills for solving CTF challenges - web exploitation, binary pwn, crypto, reverse engineering, forensics, OSINT, and more项目地址: https://gitcode.com/gh_mirrors/ct/ctf-skills
ctf-skills是一个面向 AI Agent 的 CTF 解题技能库,其中的ctf-crypto模块把 CTF 密码学题的破解方法整理成了结构化技巧清单:RSA 攻击、AES 漏洞、ECC 椭圆曲线破解、PRNG 随机数预测、零知识证明(ZKP)漏洞,全部按"攻击模式 + 适用场景 + 完整代码"的方式沉淀在本地文档中。你只需让 AI Agent 加载这套技能,它就能像老练的密码学选手一样,快速判断题目类型并调用对应攻击。🔐
一、ctf-crypto 是什么?一个"密码学攻击字典"
传统学 CTF 密码学题的路径是:刷题 → 看 writeup → 记笔记。而 ctf-crypto 反其道而行——它把数百个历届 CTF 题目的解法提炼成可直接执行的技术条目,装进 AI Agent 的上下文里。
技能入口文件是 ctf-crypto/SKILL.md,它列出了全部子文档的索引,每个条目都是一句话概括"什么场景 → 用什么攻击":
| 子文档 | 覆盖内容 |
|---|---|
| rsa-attacks.md / rsa-attacks-2.md | 小指数开根、Wiener、Fermat、Hastad 广播、Coppersmith 等 30+ 种 RSA 攻击 |
| modern-ciphers.md / modern-ciphers-2.md / modern-ciphers-3.md | AES 各工作模式漏洞、Padding Oracle、GCM nonce 复用、MAC 伪造 |
| ecc-attacks.md | ECDSA 随机数复用、小子群、坏曲线、Smart 攻击 |
| prng.md / prng-attacks.md | MT19937 状态恢复、Math.random 预测、LCG 逆推 |
| zkp-and-advanced.md | ZKP 作弊路径、Shamir 秘密分享、Groth16 伪造 |
| classic-ciphers.md | 凯撒、维吉尼亚、多字节 XOR、OTP 密钥重用 |
| stream-ciphers.md | LFSR、Berlekamp-Massey、RC4 偏差 |
| lattice-and-lwe.md / advanced-math.md | 格基约减、LWE/CVP、BSGS 离散对数 |
这套清单的价值在于:新手不再需要"想起来该用什么攻击",Agent 会根据题目特征自动匹配条目。
二、安装与一键配置 CTF 密码学工具
整个技能库支持一条命令安装(也兼容 Claude Code 等支持 Agent Skills 规范的 AI 工具):
git clone https://gitcode.com/gh_mirrors/ct/ctf-skills npx skills add ljagiello/ctf-skills密码学攻击离不开 Python 数学库。技能文档已经按平台列好依赖,核心就一条命令:
pip install pycryptodome z3-solver sympy gmpy2 hashpumpy fpylll py_ecc另外两个"大件"按需安装:
- SageMath:ECC、Coppersmith、格攻击的必备环境(Linux 用
apt install sagemath) - RsaCtfTool:自动化 RSA 攻击套件,会依次尝试 Wiener、Hastad、Fermat、Pollard 等全部主流手法
完整工具清单和分平台安装脚本见 scripts/install_ctf_tools.sh,执行bash scripts/install_ctf_tools.sh --dry-run all可以预览将要安装的内容。
三、5 分钟上手:怎么判断一道题该用哪种攻击?
拿到一道密码学题,ctf-crypto 建议的第一步不是硬解,而是快速定性。技能文档给出了"关键词路由"思路(同样写在 solve-challenge/SKILL.md 的分诊流程里):
题面出现
RSA、prime、modulus、lattice、GCM→ 密码学方向;.py/.sage脚本里给出一堆大数 → 基本锁定 crypto 类别。
再对照下面这张"看数下菜"速查表,就能秒选攻击方向:
| 题目特征 | 大概率攻击 |
|---|---|
| n 是 2048 位大数,给了 e=3 和小消息 | 小指数开立方根 |
| 同一个消息发给 3 个不同 n | Hastad 广播攻击 |
| 两个 n 能分解出公因子 / p、q 很接近 | 批量 GCD / Fermat 分解 |
| 给的是 AES 加密的 JSON,块边界清晰 | ECB 剪切粘贴(cut-and-paste) |
| 改密文后服务器返回不同错误提示 | Padding Oracle |
| 两条签名的 r 值相同 | ECDSA 随机数复用,直接解出私钥 |
题目生成 token 用random.random() | MT19937 状态恢复,预测下一个 token |
这些判断规则背后,是 ctf-crypto/SKILL.md 中每个条目的"Pattern"字段——先描述题目长什么样,再给攻击方法,Agent 照此对号入座。
四、RSA 攻击:从开立方根到 Coppersmith 🎯
RSA 是 CTF 密码学题的"头号常客",技能库为此准备了两个专题文档、30 余种攻击模式,全部附带可直接运行的 Python/Sage 代码。
新手最常遇到的 6 种 RSA 弱点,在 rsa-attacks.md 里都有现成解法:
- 小 e 小消息:m³ < n 时密文就是 m³,取整数立方根得 flag
- 共模攻击:同一明文被两个不同公钥加密,扩展欧几里得一步还原
- Wiener 攻击:私钥 d 太小时,连 d 都不用求,直接分解 n
- Fermat 分解:p 和 q 相邻或接近时,sqrt(n) 附近搜质数
- Hastad 广播:e=3 加密三次,中国剩余定理 + 开方
- Coppersmith:素数"部分已知"(如高位泄露)时,
small_roots()秒解
进阶的 rsa-attacks-2.md 收录了更"刁钻"的变体:dp/dq/qinv 部分泄露、CRT 故障攻击(Bellcore)、同态解密预言机绕过、Montgomery 归约时序侧信道,以及 e=1 构造模数绕过验签等。
⚡实用建议:不会写具体攻击脚本?先把 n、e、c 丢给 RsaCtfTool 一把梭——它会自动遍历所有经典攻击,这在 ctf-crypto/SKILL.md 的 Quick Start 命令里也特别标注了。
五、AES 与分组密码:模式比算法更脆弱
很多新手以为 AES 坚不可摧,CTF 的真相是:算法本身没破,破的全是"用法"。modern-ciphers.md 和 modern-ciphers-2.md 把常见"错误姿势"整理成了攻击清单:
| 错误姿势 | 对应攻击 |
|---|---|
| ECB 模式加密结构化数据 | 密文块重排/剪切粘贴,伪造is_admin: true |
| CBC 模式 + 无 MAC | IV 位翻转,任意改写首个明文块 |
| 解密时暴露 padding 是否合法 | Padding Oracle,逐字节还原明文 |
| AES-GCM 复用 nonce | "Forbidden" 攻击:直接解出 GHASH 密钥 |
| 自造 S-Box 只有 16 种输出 | 熵骤降,逐轮暴力可行 |
除了这些,文档还收录了压缩预言机(CRIME 类)、哈希长度扩展(hashpumpy 一行搞定)、CRC32 线性碰撞伪造签名、生日攻击/中间相遇等"现代密码学名场面",每种都给出了具体题目年份出处,方便回溯学习。
🔍 新手学习路径建议:先看懂 ECB 剪切粘贴(不需要密钥、不需要数学基础),再学 Padding Oracle(理解"预言机"这个核心概念),最后接触 GCM nonce 复用——这三招基本能覆盖大多数 Web 侧的对称加密题。
六、ECC 椭圆曲线攻击:随机数复用是"送分题"
ctf-crypto/ecc-attacks.md 覆盖了椭圆曲线题的高频考点,其中出现率最高的是随机数(nonce)复用:
- ECDSA / DSA nonce 复用:两条签名的 r 相同 → 联立两个方程解出 nonce k → 直接推出私钥 d。技能条目里明确提示"先检查 r 值是否重复",这是拿到 ECC 题后的第一个动作。
- 小 nonce 暴力:nonce 只有 20 位时,遍历全部候选值即可。
- 小子群攻击:曲线阶含小因子时,Pohlig-Hellman + CRT 分治求解。
- 坏曲线 / 奇点曲线:缺验证时发送非曲线上的点,奇点曲线可直接映射到加法/乘法群。
- Smart 攻击:异常曲线(阶等于 p)下,p-adic 提升把离散对数变成 O(1) 问题。
- 侧信道:Ed25519 余因子 h=8 泄露秘密标量比特位——2026 年熊形杯(BearCatCTF)真题解法。
配套工具链也写好了:SageMath 的discrete_log一行解模 p 离散对数,advanced-math.md 里还有通用 BSGS(baby-step giant-step)和 Pohlig-Hellman 的完整实现。
七、PRNG 预测:随机数从来不是"随机"的 🎲
CTF 里"随机数"题目有个统一主题:种子或状态可以被还原。ctf-crypto/prng.md 收录了基础手法,prng-attacks.md 收录了 2017 年后的进阶攻击:
- MT19937(Python random):观察输出可完整恢复内部状态。技能库甚至覆盖了"只泄露 float"的场景——每个浮点数只有约 8 个有效位,用 GF(2) 魔法矩阵从 3360+ 个
random.random()输出中恢复全状态,预测密码重置 token。 - JS 的 Math.random():V8 引擎使用 XorShift128+,拿到 5~10 个连续输出,用 Z3 约束求解即可恢复 (state0, state1),后续值全部可预测。
- C 的 srand(time(NULL)) + rand():用 Python ctypes 直接加载 libc 调 C 的 srand/rand,按时间戳同步复现同一序列——这个技巧对大量老题直接生效。
- LCG 逆推:已知部分高位输出时,用模逆逐步回退状态;Java LCG 还有"中间相遇"解法。
- 混沌 PRNG:Logistic 映射
x = r·x·(1-x),种子恢复靠高精度小数暴力。
💡 记忆口诀:看到"random/seed/counter" 三个词,先想"状态可恢复吗"——CTF 里能恢复的占九成。
八、零知识证明与约束求解:ZKP 题怎么"作弊"🔓
ctf-crypto/zkp-and-advanced.md 处理 ZKP、秘密分享和约束求解类题目,核心思路很反直觉:
- ZKP 作弊:如果题目让你证明一个"不可能"的问题(比如给 K4 图三色着色),说明出题人留了后门——通常是哈希碰撞或可预测的 PRNG salt,找到其一即可"一本正经地造假证明"。
- Shamir 秘密分享:系数由固定种子的随机数生成时,一个份额 + 可预测系数 = 关于秘密的一元方程;若多项式系数跨轮复用,相减即可消掉全部随机性,只剩明文差。
- Groth16 / DV-SNARG 伪造:先查验证器常量——trusted setup 里 delta == gamma 这种"彩蛋"可以直接构造伪造证明 A=α, B=β, C=-vk_x。
- Z3 约束求解:位级问题用 BitVec、任意精度用 Int,BPF/seccomp 过滤器、字节级替换密码都能喂给它解。
- 乱码电路(Garbled Circuits):free XOR 技巧下,三个真值表项异或即可恢复全局 delta。
这类题目数学门槛高,但技能文档把"先查哪里"的路径写得很直白:先看验证器 → 再看随机数来源 → 最后才碰证明本身。
九、进阶弹药库:格、流密码与异类结构
当题目超出上面五类,ctf-crypto 还有三个"军火库":
- 格 / LWE 攻击(lattice-and-lwe.md):给了模线性方程组 + "隐藏量很小/稀疏/部分泄露"的承诺 → 按格问题处理。工作流固定为 LLL 起步 → BKZ 精修 → Babai 近似 CVP,文档还专门整理了"常见失败原因排查表"。
- 流密码(stream-ciphers.md):LFSR 用 Berlekamp-Massey 从 2L 个比特恢复连接多项式;Galois LFSR 可以 XOR 已知文件头后由自相关直接恢复抽头掩码。
- 异类代数结构(exotic-crypto.md / exotic-crypto-2.md):辫群 Diffie-Hellman(Alexander 多项式可乘性直接算出共享密钥)、热带半环、Paillier 同态 LSB 预言机、ElGamal 平凡 DLP、BIP39 助记词部分暴力……冷门题的救命稻草。
十、实战工作流:让 Agent 替你解题
装好技能后,推荐配合仓库的编排技能 solve-challenge/SKILL.md 使用,完整流程是:
- 分诊:把题目文件/URL 丢给 Agent,它先
file、strings、连服务,判断"这题是 crypto 不是 pwn"; - 加载 ctf-crypto:Agent 依据条目里的 Pattern 字段匹配攻击;
- 执行与切换:技能内置"When to Pivot"规则——比如发现卡点其实是反混淆,会自动建议切到
/ctf-reverse; - 输出 writeup:解完后调用 ctf-writeup/SKILL.md 生成标准格式复盘文档。
对新手来说,这套流程最大的改变是:你负责观察题目、验证 flag,Agent 负责查字典、写脚本、试错。卡住时,对照 ctf-crypto/SKILL.md 末尾的 "When to Pivot" 小节手动切换思路,同样有效。
常见问题(FAQ)
Q1:完全不会密码学,能直接用这套技能吗?能。技能条目采用"题目特征 → 攻击方法"的写法,Agent 按特征匹配,不需要你先懂 Coppersmith 的数学推导;但建议顺手读一下 classic-ciphers.md 里的频率分析、XOR 分析等基础条目,它们是所有高级攻击的直觉来源。
Q2:SageMath 装不起来怎么办?先确认平台:Linux 用 apt,macOS 用 brew 的--cask sage。gmpy2 还需要 libgmp(apt install libgmp-dev)。这些前置说明都写在 ctf-crypto/SKILL.md 的 Prerequisites 一节。
Q3:技能库会不会过时?每个攻击条目都标注了来源赛事与年份(如 BearCatCTF 2026、BSidesSF 2025),且文档按主题拆分为多页便于持续维护——新题解法可以随时补进对应文件。
📌小结:ctf-crypto 把 CTF 密码学从"背攻击名"变成"对特征下攻击"——RSA 看模数结构、AES 看工作模式、ECC 查随机数复用、PRNG 想状态恢复、ZKP 先找后门。装好 ctf-crypto/SKILL.md 及其 16 个子文档,你的 AI Agent 就带上了一本"历届 CTF 密码学真题的解题字典"。
【免费下载链接】ctf-skillsAgent skills for solving CTF challenges - web exploitation, binary pwn, crypto, reverse engineering, forensics, OSINT, and more项目地址: https://gitcode.com/gh_mirrors/ct/ctf-skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考