Crypto 方向:编码、古典密码与 RSA 入门
Crypto 题不碰服务器、不猜脑筋,给你一段"看起来乱码"的数据和一个(有时不给的)加密脚本,任务是还原明文。它是六个方向里数学味最浓的,也是最有确定性的——每一道题背后都有一个可复现的算法。
先记住一句话:编码(Encoding)不是加密(Encryption)——编码人人可逆,加密需要密钥。看到"乱码"先怀疑编码,再怀疑古典密码,最后才是现代密码学。
一、第一层:编码识别(签到题区)
| 编码 | 特征 | CyberChef 一键解 |
|---|---|---|
| Base64 | A-Z a-z 0-9 + /,结尾常有 = | From Base64 |
| Base32 | 大写字母 + 234567,结尾多个 = | From Base32 |
| Hex | 0-9 a-f 成对出现 | From Hex |
| URL 编码 | %41%42 这类百分号 | URL Decode |
| Unicode/HTML 实体 | \u4f60 或 你 | 对应 Decode 模块 |
CyberChef 的 Magic 模块会自动尝试识别——把题目字符串整个丢进去,先看它的判断,再人工验证。这一步能解决 CTF 签到区 80% 的题。
二、第二层:古典密码四件套
| 密码 | 原理 | 识别线索 |
|---|---|---|
| 凯撒 Caesar | 每个字母位移 k 位 | 字母顺序乱但频率分布像英语;暴力 25 次即可 |
| 维吉尼亚 Vigenère | 逐字母用密钥做不同位移 | 频率分布被"抹平";用 Kasiski/重合指数猜密钥长度 |
| 栅栏 Rail Fence | 字符按 Z 字形分栏重排 | 交换位置不改字符集;试 2~10 栏 |
| 摩斯 Morse | .- 与 / 分隔 | 只有点和横,一眼认出 |
工具:CyberChef 全覆盖;维吉尼亚可加 dCode.fr(识别与爆破神器)。
🧠 记忆锚点:古典密码只重排或替换字符,不改变字符集的面貌——密文里全是大小写字母和标点,八成是古典密码。
三、第三层:现代密码与 RSA 入门
现代加密分两类,题目风格完全不同:
- 对称加密(AES/DES/RC4):加密解密同一个密钥。考点常是密钥复用(ECB 模式明文模式可见)、弱密钥、IV 泄露——需要读题目给的加密脚本找弱点
- 非对称加密(RSA 为绝对主角):公钥加密私钥解密。RSA 是 Crypto 新手必须啃下的第一座山
RSA 最小必要知识
text
选两个大素数 p、q → n = p×q(公开)
φ(n) = (p-1)(q-1)
选 e 与 φ(n) 互素(公开,常为 65537)
d = e⁻¹ mod φ(n)(私钥,保密)
加密:c = m^e mod n 解密:m = c^d mod nCTF 的 RSA 题几乎都在考一件事:在某个参数被"用错了"的情况下,把私钥 d 算出来。常见套路按出现频率排:
| 攻击 | 触发条件 |
|---|---|
| 分解 n | p、q 太接近 / n 太小(factordb.com 直接查) |
| 共模攻击 | 同一个 n、同一个 m,两个互素的 e 加密 |
| e 与 φ 不互素 | e=3 且明文很小时可直接开立方 |
| 给了 dP/dQ | 部分私钥泄露 |
实际操作 90% 用 RsaCtfTool:喂给它 n、e(或 pem 公钥文件),自动尝试几十种攻击。手工计算用 Python 的 gmpy2 与 pycryptodome。
四、动手:三道入门题的完整解法
💡 动手实验 1(编码):
ZmxhZ3tCYXNlNjRfMTNfZWFzeX0=—— 丢 CyberChef From Base64,得到flag{Base64_13_easy}。再对里面那截13敏感一点:ROT13 再转一次,体会"套娃编码"。💡 动手实验 2(古典):
Gsrh rh z hlnkov xrksvi——频率像英语、字母错乱。CyberChef → ROT13 Brute Force,位移 18(等价于 Atbash 的变体路径)读出句子,体会凯撒家族的暴力美学。💡 动手实验 3(RSA):构造最小 RSA:p=61, q=53, e=17, 密文 c=2790。手算 n、φ(n)、d,再用 Python 验证解密:
pythonimport gmpy2 p, q, e, c = 61, 53, 17, 2790 n = p * q phi = (p-1) * (q-1) d = gmpy2.invert(e, phi) m = pow(c, d, n) print(m) # 还原出明文数字,对照教材例题
五、学习路线与资源
- 第一周:CyberChef 玩熟 + 古典四件套各解 5 题(BUUCTF Crypto 签到区)
- 第二~三周:Python 密码学脚本化——Base 系、摩斯、栅栏全部手写实现一遍
- 第二个月:RSA 三板斧(小 n 分解、共模、e 异常),RsaCtfTool 与手工并行
- 进阶:格密码(LLL)、椭圆曲线、背包问题——CTFtime 高级别比赛的常客,等基础稳了再上
理论书单:CTF Wiki 的 Crypto 章节(免费、按比赛视角写的)、《密码编码学与网络安全》对应章节。
小结
- 编码 ≠ 加密:先 CyberChef Magic 识别编码,再判古典,最后才是现代密码
- 古典四件套:凯撒(位移)、维吉尼亚(多表)、栅栏(重排)、摩斯(点横)
- RSA 的题眼永远是**"哪个参数用错了"**;RsaCtfTool 是效率工具,手算一遍最小 RSA 是理解分水岭
- 每类题都值得脚本化复现——Crypto 的手感来自"自己写过一遍算法"
下一讲进入最"杂"也最好玩的方向:Misc 与取证。