CTF 密码学(Crypto)方向深度解析
一、密码学基础分类
CTF 中的密码学题目主要分为以下类别:
古典密码
对称加密(AES、DES、RC4 等)
非对称加密(RSA、ECC 等)
哈希函数(MD5、SHA 系列)
编码与杂项(Base64、Hex、隐写术结合)
二、古典密码
1. 凯撒密码(Caesar Cipher)
原理:通过固定偏移量对字母进行移位(如偏移3:A→D,B→E)。
攻击方法:
暴力破解(26种可能性穷举)。
频率分析:统计密文中字母频率,匹配英文常见频率(如E、T最高)。
工具:
Python脚本:遍历所有偏移量。
在线工具:CyberChef。
2. 维吉尼亚密码(Vigenère Cipher)
原理:使用一个重复的密钥对明文进行多表替换。
攻击方法:
确定密钥长度:Kasiski测试(寻找重复密文段的间隔公因数)或重合指数法。
分解密钥:将密文按密钥长度分组,每组使用频率分析破解。
工具:
Vigenère Solver。
3. 栅栏密码(Rail Fence Cipher)
原理:将明文按“Z”字形排列后按行读取。
攻击方法:
尝试不同栅栏层数,观察是否有可读明文。
示例:
明文:HELLOWORLD → 2层栅栏:HLOOL ELWRD → 密文:HLOOLELWRD。
4. 其他古典密码
摩尔斯电码:.-符号转换,注意分隔符。
培根密码:5位二进制表示字母(如AAAAA=A,AAABB=B)。
猪圈密码:符号替代字母(如九宫格图案)。
三、对称加密
1. AES(高级加密标准)
模式:ECB、CBC、CTR等,其中ECB模式相同明文块加密结果相同,易被攻击。
常见攻击:
ECB模式块重排:通过交换密文块改变解密结果。
Padding Oracle攻击:利用服务端对填充错误的反馈解密数据。
工具:
Python库:pycryptodome。
识别特征:密文长度为16/32字节的倍数。
2. DES(数据加密标准)
特点:56位密钥,已不安全。
攻击方法:
暴力破解(需大量计算资源)。
差分/线性密码分析(理论攻击,CTF中少见)。
3. RC4(流密码)
原理:生成密钥流与明文异或。
漏洞:密钥重用导致密钥流重复(两次加密同一密钥时,c1 ^ c2 = p1 ^ p2)。
工具:Python脚本实现密钥流生成。
四、非对称加密(以RSA为主)
1. RSA基础
密钥生成:
选择大素数 p 和 q,计算 n = p*q。
计算欧拉函数 φ(n) = (p-1)*(q-1)。
选择 e 满足 1 < e < φ(n) 且 gcd(e, φ(n)) = 1。
计算 d 使得 e*d ≡ 1 mod φ(n)。
加解密:
加密:c = m^e mod n
解密:m = c^d mod n
2. RSA常见攻击方法
模数分解:
当 n 较小时,用 factordb 或 yafu 分解。
当 p 和 q 接近时,使用费马分解法。
共模攻击:
相同 n,不同 e,且 gcd(e1, e2)=1,通过扩展欧几里得算法恢复明文。
低加密指数攻击:
当 e=3 且 m^e < n 时,直接开方得到明文。
维纳攻击:
当 d 较小时(满足 d < 1/3 * n^(1/4)),通过连分数展开逼近 d。
广播攻击:
相同明文用不同 n 加密,且 e 较小,通过中国剩余定理(CRT)恢复明文。
LSB Oracle攻击:
利用服务器返回明文奇偶性的漏洞,二分法逐位解密。
3. ECC(椭圆曲线加密)
基础:基于椭圆曲线离散对数问题(ECDLP)。
攻击方法:
无效曲线攻击:选择弱参数的曲线。
Smart's Attack:针对异常曲线的攻击。
五、哈希函数
1. 常见哈希算法
MD5:128位哈希值,易碰撞(可用工具快速生成相同哈希的不同文件)。
SHA1:160位哈希值,已被谷歌证明可碰撞。
SHA256:目前安全,用于区块链等场景。
2. 攻击类型
碰撞攻击:找到两个不同输入得到相同哈希。
长度扩展攻击:已知 Hash(key + message),构造 Hash(key + message + padding + new_data)。
彩虹表:预计算哈希值破解弱密码。
六、编码与杂项
1. Base64
特征:字符集为 A-Z, a-z, 0-9, +, /,末尾可能补 =。
工具:
Python:base64.b64decode()。
CyberChef 自动解码。
2. 十六进制(Hex)
识别:字符串仅包含 0-9, a-f,长度为偶数。
转换:bytes.fromhex("hex_str")。
3. 隐写术结合
题目形式:图片中隐藏加密信息(如LSB隐写+Base64编码)。
工具链:
binwalk 分离文件。
steghide 提取嵌入数据(需密码时可暴力破解)。
exiftool 查看元数据。
七、CTF密码学解题工具箱
Python库:
pycryptodome:实现AES/RSA等加解密。
gmpy2:大整数运算(RSA中计算模逆)。
sympy:符号数学库(解方程、素数生成)。
专用工具:
RSACTFTool:自动化RSA攻击(已知n、e、c)。
John the Ripper:破解哈希或弱密码。
sageMath:数学计算(解离散对数、椭圆曲线问题)。
在线资源:
CTF RSA Toolkit
Cipher Identifier
八、实战技巧与思维
快速识别加密类型:
查看题目描述关键词(如“RSA”、“Vigenère”)。
观察密文特征(如Base64的=、RSA的n和e数值)。
利用已知条件:
若给出多个密文或密钥片段,考虑共模攻击或密钥复用。
若加密代码泄露部分参数(如p或q的片段),尝试Coppersmith攻击。
数学推导优先:
对于RSA题目,优先尝试分解n或寻找特殊数学关系。
对于ECC题目,检查曲线参数是否存在漏洞。
九、经典赛题示例
1. 例题1(RSA共模攻击)
题目:同一明文用(n, e1)和(n, e2)加密,给出c1和c2,求明文。
解法:
使用扩展欧几里得算法找到 a 和 b 使得 a*e1 + b*e2 = 1。
计算 m = (c1^a * c2^b) mod n。
2. 例题2(AES ECB模式攻击)
题目:ECB模式加密已知结构的JSON数据(如{"user":"admin","role":"xxx"}),构造密文提升权限。
解法:
通过替换密文块,将"role":"user"的块替换为"role":"admin"的加密块。