ctf之密码的学习

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测试(寻找重复密文段的间隔公因数)或重合指数法。

分解密钥:将密文按密钥长度分组,每组使用频率分析破解。

工具:

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"的加密块。

相关推荐