1. 题目背景与初步分析
这道来自攻防世界CTF比赛的Crypto题目名为"Broadcast",属于典型的密码学挑战。Broadcast攻击(广播攻击)是一种针对RSA加密系统的特殊攻击方式,当同一段明文使用相同的低加密指数(通常为3或5)和不同的模数(n)加密时,攻击者可以通过中国剩余定理恢复出原始明文。
在CTF比赛中,这类题目通常会提供多个加密后的密文文件,以及对应的公钥信息。解题者需要识别出题目背后的密码学原理,然后运用相应的数学工具进行破解。从题目描述中提到的"一堆文件"和task.py来看,这正是一个典型的广播攻击场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目文件解析
2.1 文件结构分析
根据描述,题目附件包含多个文件,其中最重要的是task.py。在真实的CTF比赛中,这类题目通常会包含:
- 3-5个密文文件(如cipher1.txt, cipher2.txt等)
- 对应的公钥文件(如pubkey1.pem, pubkey2.pem等)
- 一个生成这些文件的Python脚本(task.py)
虽然题目描述中没有详细列出所有文件,但我们可以合理推测这些文件的存在。task.py的内容应该包含了生成这些密文和公钥的代码逻辑。
2.2 task.py代码分析
从截图可以看到task.py的部分内容,虽然不完整,但我们可以推断它可能包含以下关键部分:
python复制from Crypto.Util.number import getPrime, bytes_to_long
import random
def generate_key(e=3, bits=1024):
while True:
p = getPrime(bits)
q = getPrime(bits)
n = p * q
phi = (p-1)*(q-1)
if phi % e != 0:
break
d = pow(e, -1, phi)
return (e, n), (d, n)
def encrypt(m, pubkey):
e, n = pubkey
return pow(m, e, n)
flag = b
