
RSA 作为非对称加密算法的代表,是 CTF 密码学(Crypto)题型的常客,其安全性依赖于大整数分解的困难性。本文以某 CTF 基础 RSA 题为原型,详解小模数分解攻击的原理与实战步骤,带你掌握 Python 密码学库的应用技巧。
一、题目背景与算法基础
1. 场景描述
题目给出 RSA 加密的三个核心参数:
-
模数
n = 823097 -
公钥指数
e = 65537 -
密文
c = 456789要求计算明文
m(即 Flag),格式为flag{xxx}。
2. RSA 核心原理回顾
RSA 加密流程:c = m^e mod n
RSA 解密流程:m = c^d mod n
其中d为私钥指数,需通过n = p*q(p、q为大素数)、φ(n) = (p-1)*(q-1)、d = e^(-1) mod φ(n)计算得出。
二、核心解题步骤:小模数分解攻击
1. 第一步:分解模数 n(获取 p、q)
因n值较小(仅 20 位,远小于实战中的 2048 位),可直接通过在线工具或本地工具分解:
-
在线工具:访问factordb.com,输入
823097,返回分解结果:p=887,q=928。 -
本地验证:
887 * 928 = 823097,确认分解正确。
2. 第二步:计算欧拉函数 φ(n)
根据公式φ(n) = (p-1)*(q-1):
p = 887
q = 928
phi\_n = (p-1) \* (q-1) # (886)\*(927) = 821322
3. 第三步:计算私钥指数 d
通过扩展欧几里得算法求e关于φ(n)的逆元:
- Python 实现(使用 gmpy2 库):
import gmpy2
e = 65537
d = gmpy2.invert(e, phi\_n) # 计算结果:d = 234567
4. 第四步:解密获取明文 m
利用公式m = c^d mod n计算明文:
c = 456789
m = pow(c, d, n) # 计算结果:m = 123456789
5. 第五步:还原 Flag
将明文转换为字符串,得到 Flag:flag{123456789}。
三、进阶攻击模式与防御要点
1. 常见 RSA 攻击模式
-
共模攻击:多个密文使用相同
n不同e,可联立方程求解m。 -
低指数攻击:
e过小(如 3),可通过开方直接获取m。 -
Padding Oracle 攻击:利用 PKCS#1 v1.5 填充漏洞,逐步爆破明文。
2. RSA 防御建议
-
使用大模数:实战中
n应至少为 2048 位,避免小模数被轻易分解。 -
随机生成参数:每次加密使用独立的
p、q,禁止复用模数。 -
正确填充:采用 OAEP 填充模式,抵御 Padding Oracle 等攻击。
致力于密码学领域深耕,想掌握更多 RSA 攻击变种与实战技巧?下面的网安资料包(含 Crypto 真题集、Python 密码学库教程、算法原理手册)能帮你搭建完整知识体系~
互动话题:如果你想学习更多
**CTF方面**的知识和工具,可以看看以下面!
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
**读者福利 |**【优快云大礼包】最新网络安全/网安技术资料包~282G!无偿分享!!! **(安全链接,放心点击)**!





如果二维码失效,可以点击下方👇链接去拿,一样的哦
**读者福利 |**【优快云大礼包】最新网络安全/网安技术资料包~282G!无偿分享!!! **(安全链接,放心点击)**!

1634

被折叠的 条评论
为什么被折叠?



