ctf之密码的学习
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测试(寻找重复密文段的间隔公因数)或重合指数法。
- 分解密钥:将密文按密钥长度分组,每组使用频率分析破解。
- 工具:
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字节的倍数。
- Python库:
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 自动解码。
- Python:
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:数学计算(解离散对数、椭圆曲线问题)。
-
在线资源:
八、实战技巧与思维
-
快速识别加密类型:
- 查看题目描述关键词(如“RSA”、“Vigenère”)。
- 观察密文特征(如Base64的
=
、RSA的n
和e
数值)。
-
利用已知条件:
- 若给出多个密文或密钥片段,考虑共模攻击或密钥复用。
- 若加密代码泄露部分参数(如
p
或q
的片段),尝试Coppersmith攻击。
-
数学推导优先:
- 对于RSA题目,优先尝试分解
n
或寻找特殊数学关系。 - 对于ECC题目,检查曲线参数是否存在漏洞。
- 对于RSA题目,优先尝试分解
九、经典赛题示例
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"
的加密块。
- 通过替换密文块,将