本文适合
CTF 密码学 入门学习者。学完你能:理解 ZKP入门 的核心概念和基本用法
一句话判断
ZKP 题一旦挑战可预测、消息不绑定、commitment 可重放或 hash 输入缺失,就不再是“零知识”,而是可伪造的交互或非交互证明。
题目中常见信号
核心概念
零知识证明要同时满足正确性、可靠性和零知识性。CTF 中常见问题不是证明系统本身,而是实现里把挑战做成可预测、把 statement 漏掉、把 commitment 复用,或者把 hash 承诺写错。
本文适合
CTF 密码学 入门学习者。学完你能:理解 ZKP入门 的核心概念和基本用法
ZKP 题一旦挑战可预测、消息不绑定、commitment 可重放或 hash 输入缺失,就不再是“零知识”,而是可伪造的交互或非交互证明。
零知识证明要同时满足正确性、可靠性和零知识性。CTF 中常见问题不是证明系统本身,而是实现里把挑战做成可预测、把 statement 漏掉、把 commitment 复用,或者把 hash 承诺写错。
本文适合
已经理解模运算和大整数表示,准备处理 n,e,c 参数题、PEM 公钥题和裸 RSA 攻击题的 CTF 学习者。学完你能:根据 RSA 参数判断低指数、共模、共享素因子、近素数、dp/dq 泄露、Wiener 和 Coppersmith 等路线,并写出最小验证脚本。
RSA 题不是“破解 RSA”,而是找参数生成、填充、随机数或接口使用中的弱点;只要能从公开信息恢复 p,q,d 或直接恢复 m,就能解密。
本文适合
CTF 密码学 入门学习者。学完你能:理解 Paillier与同态加密基础 的核心概念和基本用法
Paillier 的核心是“密文相乘对应明文相加”,所以如果题目想让你在不知道私钥的情况下合成结果,先看它是不是把同态性质直接暴露出来了。
Paillier 允许对密文执行乘法,得到明文加法的对应结果:E(m1) * E(m2) = E(m1 + m2)。这不是漏洞本身,而是功能;漏洞通常来自“把功能当成安全边界”,或者参数过小、随机 r 可预测、解密接口泄露中间值。
本文适合
CTF 密码学 入门学习者。学完你能:理解 ECC基础 的核心概念和基本用法
ECC 题要先看曲线和点是否“真”,再看阶是否安全;只要出现小阶、无效曲线、异常曲线、nonce 复用或参数泄露,就可能转化为可解问题。
ECC 的安全性基于椭圆曲线离散对数问题。曲线上的点加法、倍点和标量乘法构成群运算;如果曲线阶不大、可分解,或者输入点没有验证,离散对数就可能被拆成多个小问题。
本文适合
已经了解 XOR 和基础编码,准备处理 AES 模式、IV、nonce 和 padding oracle 题的 CTF 学习者。学完你能:根据题目给出的 key、iv、nonce、mode、密文和接口响应,判断 AES 题的可利用点,并写出 ECB、CBC、CTR/GCM 相关的最小验证脚本。
AES 是一种对称分组密码。对称的意思是加密和解密使用同一个密钥。分组的意思是它一次处理固定长度的数据块。
本文适合
已经理解哈希、随机数和 ECC/RSA 基础,准备处理 DSA/ECDSA/Schnorr 签名伪造或私钥恢复题的学习者。学完你能:从签名列表中识别 nonce 重复、偏差、部分泄露或挑战绑定错误,并写出恢复 k、私钥或伪造签名的最小脚本。
DSA/ECDSA/Schnorr 这类签名一旦 nonce k 重复、可预测、偏小或部分泄露,签名公式会变成可解方程,私钥可能直接暴露。
本文适合
已经掌握 XOR,准备处理 keystream 复用、LFSR 输出恢复和 bit 序列预测题的学习者。学完你能:从源码或密文中识别流密码结构,用已知明文恢复 keystream,并用 Berlekamp-Massey 或线性方程恢复 LFSR。
流密码题的关键是密钥流:只要密钥流被复用、可预测、线性生成或泄露足够多,就可以恢复明文、后续输出或内部状态。
本文适合
已经理解哈希不是加密,准备处理 md5(secret + msg)、sha1(key || params) 这类认证绕过题的学习者。学完你能:判断一个 MAC 是否受长度扩展影响,枚举 secret 长度,构造追加参数和新的 digest,并解释为什么 HMAC 不走这条路线。
如果服务端把未知 secret 放在消息前面直接做 MD5/SHA1/SHA256,例如 hash(secret || message),攻击者知道原消息和 digest 时,就可能在不知道 secret 的情况下追加内容并伪造新 digest。