1. 题目背景与核心挑战解析
这道来自ACTF新生赛2020的RSA密码学题目,是典型的CTF竞赛中中等难度的crypto挑战。题目文件通常包含一个python脚本和输出文件,考察选手对RSA基础原理的掌握程度以及利用数论知识进行漏洞利用的能力。
在实际解题过程中,我发现这道题的关键在于识别出题目故意设置的"弱密钥"陷阱。与传统RSA不同,出题人在这里使用了特殊的素数生成方式,导致模数N可以被快速分解。这正是CTF竞赛中常见的出题思路——通过看似标准的加密实现,隐藏着精心设计的漏洞点。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 初始文件分析与信息收集
首先我们需要对题目提供的文件进行基础分析。典型的RSA题目通常包含以下要素:
- 加密脚本(rsa0.py)
- 输出文件(output.txt)
加密脚本中关键部分往往包含:
python复制from Crypto.Util.number import *
import gmpy2
p = getPrime(512)
q = getPrime(512)
n = p*q
e = 65537
phi = (p-1)*(q-1)
d = gmpy2.invert(e, phi)
flag = b'ACTF{...}'
m = bytes_to_long(flag)
c = pow(m, e, n)
print(n, e, c)
而output.txt则包含具体的加密输出:
code复制n = 123456789... # 1024位大整数
e = 65537
c = 987654321... # 密文
3. RSA基础原理快速回顾
在开始解题前,有必要快速回顾RSA的核心数学原理:
-
密钥生成:
- 选择两个大素数p和q
- 计算n = p * q
- 计算φ(n) = (p-1)*(q-1)
- 选择e满足1 < e < φ(n)且gcd(e, φ(n)) = 1
- 计算d ≡ e⁻¹ mod φ(n)
-
加密过程:
c ≡ mᵉ mod n -
解密过程:
m ≡ cᵈ mod n
在CTF题目中,通常会通过以下方式设置漏洞:
- 使用过小的素数(如p,q只有几十位)
- 使用不安全的e值(如e=3)
- 模数n可以被分解
- 共模攻击
