发布时间:2026/8/7 10:17:32
【CTF-CRYPTO-教学-RSA】第四节:dp泄露攻击(已知dp、e、n,无需私钥即可解密) 什么是 dp 泄露攻击如果攻击者获取了dp或 dq、e、n和c就可以在不知道完整私钥的情况下分解 n恢复出 p 和 q计算出完整的私钥 d解密密文 c攻击原理关键数学推导e × dp - 1 m × (p-1)根据 RSA 性质私钥指数 d 满足e × d ≡ 1 (mod φ(n))因为 φ(n) (p-1)(q-1)所以 d 也满足e × d ≡ 1 (mod p-1)即e × d 1 k × (p-1)其中 k 为某个整数。而 dp d mod (p-1)意味着 d 可以写成d dp m × (p-1)其中 m 为某个整数。将 d 的表达式代入 e × d ≡ 1 (mod p-1)e × (dp m × (p-1)) ≡ 1 (mod p-1)展开后e × dp e × m × (p-1) ≡ 1 (mod p-1)因为 e × m × (p-1) 一定是 (p-1) 的倍数所以e × dp ≡ 1 (mod p-1)即e × dp - 1 m × (p-1)其中 m 是某个整数。m 的取值范围1 ≤ m e由于 0 dp p-1且 e 1我们有e × dp e × (p-1)e × dp - 1 e × (p-1) - 1所以 m e又因为 e × dp 1dp ≥ 1, e ≥ 2所以 m ≥ 1。结论m 的取值范围是 1 ≤ m e攻击步骤枚举 m 从 1 到 e-1对每个 m计算p (e × dp - 1) / m 1验证 n mod p 0如果成立则找到了 p计算 q n / p计算 φ(n) (p-1)(q-1)计算 d e^(-1) mod φ(n)解密密文m c^d mod n简单例子我们用p13, q17来演示整个过程。前置知识已知p 13, q 17n p × q 13 × 17 221φ(n) (p-1)(q-1) 12 × 16 192e 5公钥指数计算私钥d e^(-1) mod φ(n) 5^(-1) mod 192找 5 × ? ≡ 1 (mod 192)5 × 77 385 2 × 192 1所以 d 77计算 dpdp d mod (p-1) 77 mod 12 5加密明文 m2c m^e mod n 2^5 mod 221 32攻击过程现在假设攻击者只知道n221, e5, dp5, c32要恢复明文。第一步计算 e×dp - 1e × dp - 1 5 × 5 - 1 24所以 24 m × (p-1)其中 1 ≤ m 5代码实现edp_minus1e*dp-1第二步枚举 mm1p 24/1 1 25n mod 25 221 mod 25 21 ≠ 0 ✗m2p 24/2 1 13n mod 13 221 mod 13 0 ✓ 找到了代码实现# ---- 第二步: 枚举 m 求 p ----foundFalseform_valinrange(1,e):ifedp_minus1%m_val0:candidate_pedp_minus1//m_val1ifn%candidate_p0:p_recoveredcandidate_p q_recoveredn//p_recovered m_foundm_val foundTrueprint(fm{m_val}: p (e*dp-1)/{m_val} 1 {edp_minus1}/{m_val} 1 {candidate_p})print(f n mod{candidate_p}{n%candidate_p}✓ 找到因子!)breakelse:print(fm{m_val}: p {candidate_p}, n mod p {n%candidate_p}✗)else:candidate_pedp_minus1//m_val1print(fm{m_val}: e*dp-1 不能被{m_val}整除, p {candidate_p}✗)ifnotfound:print(未找到正确的因子)return第三步恢复 qq n / p 221 / 13 17第四步计算 φ(n) 和 dφ(n) (p-1)(q-1) (13-1)(17-1) 12 × 16 192d e(-1)mod φ(n) 5(-1)mod 192 77第五步解密m cdmod n 3277mod 221 2验证加密时 m2解密后 m2闭环成功代码实现# # RSA dp 泄露攻击# ## 已知: n, e, dp, c# 目标: 恢复 p, q, d解密密文 c## 原理:# e*dp ≡ 1 (mod p-1)# e*dp - 1 m*(p-1), 其中 1 m e# 枚举 m 即可求出 p# defexgcd(a,b):扩展欧几里得算法返回 (gcd, x, y) 使得 a*x b*y gcdold_r,ra,b old_s,s1,0old_t,t0,1whiler!0:qold_r//r old_r,rr,old_r-q*r old_s,ss,old_s-q*s old_t,tt,old_t-q*treturnold_r,old_s,old_tdefmod_inverse(a,m):计算 a 在模 m 下的逆元g,x,_exgcd(a%m,m)ifg!1:raiseValueError(f{a}和{m}不互质逆元不存在)returnx%mdefmain():# ---- 题目参数 ----e5n221dp5c32print( RSA dp 泄露攻击 )print(f已知: e{e}, n{n}, dp{dp}, c{c})print()# ---- 第一步: 计算 e*dp - 1 ----edp_minus1e*dp-1print(fe*dp - 1 {e}*{dp}- 1 {edp_minus1})print(f需要枚举 m 从 1 到{e-1}(因为 1 m e))print()# ---- 第二步: 枚举 m 求 p ----foundFalseform_valinrange(1,e):ifedp_minus1%m_val0:candidate_pedp_minus1//m_val1ifn%candidate_p0:p_recoveredcandidate_p q_recoveredn//p_recovered m_foundm_val foundTrueprint(fm{m_val}: p (e*dp-1)/{m_val} 1 {edp_minus1}/{m_val} 1 {candidate_p})print(f n mod{candidate_p}{n%candidate_p}✓ 找到因子!)breakelse:print(fm{m_val}: p {candidate_p}, n mod p {n%candidate_p}✗)else:candidate_pedp_minus1//m_val1print(fm{m_val}: e*dp-1 不能被{m_val}整除, p {candidate_p}✗)ifnotfound:print(未找到正确的因子)return# ---- 第三步: 恢复 q ----print(f\np {p_recovered})print(fq n/p {q_recovered})print(f验证: p*q n?{p_recovered*q_recoveredn})# ---- 第四步: 计算 φ(n) 和 d ----phi(p_recovered-1)*(q_recovered-1)dmod_inverse(e,phi)print(f\nφ(n) (p-1)(q-1) ({p_recovered}-1)({q_recovered}-1) {phi})print(fd e^(-1) mod φ {d})# ---- 第五步: 解密 ----m_decpow(c,d,n)print(f\n解密: m c^d mod n {c}^{d}mod{n}{m_dec})# ---- 转换为字节串 ----m_bytesm_dec.to_bytes((m_dec.bit_length()7)//8,big)print(f\n明文:{m_bytes})if__name____main__:main()运行结果RSA dp 泄露攻击已知:e5,n221,dp5,c32e*dp -15*5 -124需要枚举 m 从1到4(因为1me)m1: p25, n mod p21✗m2: p(e*dp-1)/2 124/2 113n mod130✓ 找到因子!p13qn/p17验证: p*qn? True φ(n)(p-1)(q-1)(13-1)(17-1)192de^(-1)mod φ77解密: mc^d mod n32^77 mod2212明文: b\x02作业dp泄露攻击题目https://ctf2.dasctf.com/dashboard/practice/b9bbb32f-f186-458f-b90b-12440c0f6aea?tabchallengeschallenge22420fad-675d-48a7-adb7-2ab894c932bfe 65537 n 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113 dp 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657 c 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751 求明文作为 flag 提交解题过程第一步分析已知条件已知 e65537, n, dp, c这是一个 dp 泄露攻击的典型场景需要通过枚举 m1 ≤ m e来分解 n第二步计算 e×dp - 1 并枚举 medp_minus1e*dp-1# 枚举 m 从 1 到 65536form_valinrange(1,e):ifedp_minus1%m_val0:candidate_pedp_minus1//m_val1ifn%candidate_p0:pcandidate_p qn//pbreak找到 m 4404成功分解 np 13468634736343473907717969603434376212206335187555458742257940406618189481177835992217885676243155145465521141546915941147336786447889325606555333350540003q 18432009829596386103558375461387837845170621179295293289126504231317130550979989727125205467379713835047300158256398009229511746203459540859429194971855371第三步计算私钥 d 并解密phi(p-1)*(q-1)dmod_inverse(e,phi)mpow(c,d,n)具体实现代码# # dp泄露攻击# defexgcd(a,b):扩展欧几里得算法返回 (gcd, x, y) 使得 a*x b*y gcdold_r,ra,b old_s,s1,0old_t,t0,1whiler!0:qold_r//r old_r,rr,old_r-q*r old_s,ss,old_s-q*s old_t,tt,old_t-q*treturnold_r,old_s,old_tdefmod_inverse(a,m):计算 a 在模 m 下的逆元g,x,_exgcd(a%m,m)ifg!1:raiseValueError(f{a}和{m}不互质逆元不存在)returnx%mdefmain():# ---- 题目参数 ----e65537n248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113dp905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657c140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751print( 作业3: dp泄露攻击 )print(f已知: e{e})print(fn{n})print(fdp{dp})print(fc{c})print()# ---- 第一步: 计算 e*dp - 1 ----edp_minus1e*dp-1print(fe*dp - 1 {e}*{dp}- 1)print(f{edp_minus1})print(f需要枚举 m 从 1 到{e-1})print()# ---- 第二步: 枚举 m 求 p ----foundFalseform_valinrange(1,e):ifedp_minus1%m_val0:candidate_pedp_minus1//m_val1ifn%candidate_p0:pcandidate_p qn//p m_foundm_val foundTrueprint(f找到 m {m_found})print(fp (e*dp-1)/m 1)print(f ({edp_minus1})/{m_found} 1)print(f {p})print(fq n/p {q})print(f验证: p*q n?{p*qn})breakifnotfound:print(未找到正确的因子)return# ---- 第三步: 计算 φ(n) 和 d ----phi(p-1)*(q-1)dmod_inverse(e,phi)print(f\nφ(n) (p-1)(q-1))print(f {phi})print(fd {e}^(-1) mod φ)print(f {d})# ---- 第四步: 解密 ----m_decpow(c,d,n)print(f\n解密: m c^d mod n)print(f {m_dec})# ---- 第五步: 转换为字节串 ----m_bytesm_dec.to_bytes((m_dec.bit_length()7)//8,big)print(f\n明文(字节串):{m_bytes})try:decodedm_bytes.decode(utf-8)print(f明文(字符串):{decoded})exceptUnicodeDecodeError:print(f明文(hex):{m_bytes.hex()})if__name____main__:main()运行结果作业3: dp泄露攻击已知:e65537n248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113dp905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657c140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751e*dp -165537*905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657 -159315867378856659089589938133524992838556700165994240300903969550746506475107189709727568518174855260630155107372617804812871207516504589971269688075778168808需要枚举 m 从1到65536找到 m4404p(e*dp-1)/m 113468634736343473907717969603434376212206335187555458742257940406618189481177835992217885676243155145465521141546915941147336786447889325606555333350540003qn/p18432009829596386103558375461387837845170621179295293289126504231317130550979989727125205467379713835047300158256398009229511746203459540859429194971855371验证: p*qn? True φ(n)(p-1)(q-1)248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670446536428489604864269408388233229385110283347278332394130113040720698361459971843083058974654167036569976726345315473316225080897072784301302480781343510740d65537^(-1)mod φ63183802294329275109394617778318843917232869063572889334764759976175767511604500261826320177778480001780606046979134286524100781096232758191739978884872103517518763547448555987181526927783445069597824169314037723507625024774847068531404022517009193374276930768809067581593826912268843157943539151615618807073解密: mc^d mod n3670434958110785066911905751469631231338751225710158680692616521935747246580688484040488309932916523151997明文(字节串): bflag{wow_leaking_dp_breaks_rsa?_98924743502}明文(字符串): flag{wow_leaking_dp_breaks_rsa?_98924743502}答案flag{wow_leaking_dp_breaks_rsa?_98924743502}

相关新闻

2026/8/7 10:17:32

富瀚微MC632X嵌入式AI视觉开发实战:从环境搭建到模型部署

1. 项目概述:为什么MC632X值得你投入时间?如果你正在嵌入式视觉领域寻找一颗兼具性价比和性能的SoC,或者你手头恰好有一块基于富瀚微MC632X的开发板,那么这篇实践指南可能就是为你准备的。MC632X系列,作为富瀚微在智能…

2026/8/7 10:17:32

DNS BP-0168A-S 面板开关板

DNS BP-0168A-S 面板开关板是一款用于工业设备操作控制的信号输入组件,以下为其核心特点与应用领域概述。产品特点 采用金属坚固外壳设计,耐用且抗冲击。 面板具备防油防水特性,适应恶劣生产环境。 采用数字编码式开关技术,节省PL…

2026/8/7 11:32:36

Legacy iOS Kit终极指南:5个步骤让旧iPhone重获新生

Legacy iOS Kit终极指南:5个步骤让旧iPhone重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit Le…

2026/8/7 11:32:36

CTF-NetA:5分钟快速上手CTF流量分析神器

CTF-NetA:5分钟快速上手CTF流量分析神器 【免费下载链接】CTF-NetA CTF-NetA是一款专门针对CTF比赛的网络流量分析工具,可以对常见的网络流量进行分析,快速自动获取flag。 项目地址: https://gitcode.com/gh_mirrors/ct/CTF-NetA 在CT…

2026/8/7 11:32:36

如何快速配置游戏存档:SPT-AKI存档编辑器的完整教程

如何快速配置游戏存档:SPT-AKI存档编辑器的完整教程 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mirrors/sp/…

2026/8/7 11:32:36

网盘文件下载新方案:直链助手让下载回归简单

网盘文件下载新方案:直链助手让下载回归简单 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…

2026/8/7 11:27:35

从素组到涂装:暗源战锤40K终结者模型深度制作指南

这次我们来看一个非常硬核的桌面级收藏品项目——暗源战锤40K荷鲁斯之乱系列的“午夜领主终结者执政官”。对于战锤40K的粉丝和模型涂装爱好者来说,这不仅仅是一个模型,更是一个集高精度设计、丰富配件与强烈阵营风格于一体的立体画布。它的重点不在于复…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/7 0:01:55

CAD图库管理:从文件归档到设计资产管理的效率革命

你肯定遇到过这种情况:打开一个老项目,想找某个特定的图块——比如一个标准的门、一个特定的设备符号,或者一个公司logo。你记得它就在某个DWG文件里,或者曾经从某个同事那里拷来过。于是,你开始在一堆命名混乱的文件夹…

2026/8/7 0:01:55

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南

5分钟掌握Wand-Enhancer:2026年终极WeMod专业版免费解锁指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款功能强…

2026/8/7 0:01:55

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求

“Quality Control(质量控制)”在软件工程中通常指通过一系列活动确保软件产品符合预定的质量标准和用户需求。而“软件测试”是质量控制的关键手段之一,属于QC范畴下的具体实践,其目标是发现缺陷、验证功能正确性、评估软件质量属…

2026/8/7 9:44:18

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/5 19:21:13

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/6 20:45:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…