当前位置: 首页 > news >正文

别只背公式!用gmpy2手把手还原RSA共模攻击,从BUUCTF Samemod理解扩展欧几里得

从数学到代码:用gmpy2拆解RSA共模攻击的扩展欧几里得核心

密码学竞赛中那些看似神秘的"黑盒攻击",背后往往藏着优雅的数学原理。当你在BUUCTF遇到Samemod这样的题目时,真正的高手思考的不是"用什么脚本",而是"为什么这个脚本能工作"。今天我们就来撕开共模攻击的魔法外衣,看看扩展欧几里得算法(EEA)如何成为破解的钥匙。

1. 共模攻击的数学舞台

想象这样一个场景:同一个明文用相同的RSA模数n但不同的加密指数e1、e2加密,得到密文c1和c2。这就是典型的共模攻击(Collinear Modulus Attack)场景。其核心数学原理可以概括为:

若gcd(e1,e2)=1,则存在整数s1和s2使得:

e1*s1 + e2*s2 = 1

这个看似简单的线性方程,正是共模攻击的灵魂所在。通过扩展欧几里得算法,我们不仅能验证e1和e2是否互质,还能直接求出这对关键系数(s1,s2)。

让我们用BUUCTF Samemod的具体参数来具象化这个原理:

n = 6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249 e1, e2 = 773, 839 c1 = 3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349 c2 = 5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535

2. 扩展欧几里得算法深度解析

标准欧几里得算法用于求最大公约数,而扩展版本则能同时计算出贝祖系数。让我们手动推演这个神奇的过程:

2.1 算法步骤拆解

对于e1=773,e2=839,计算过程如下:

步骤abq=a//br=a%bxy
初始839773166-5863
迭代7736611475-58
迭代6647119-35
迭代4719292-3
迭代19921-12
终止91901-1

最终得到的贝祖系数为s1=-58,s2=63,验证:

773*(-58) + 839*63 = 1

2.2 gmpy2的gcdext实现

手动计算虽然直观,但实战中我们更依赖高效的库函数。gmpy2的gcdext正好完美对应这个需求:

import gmpy2 s, s1, s2 = gmpy2.gcdext(e1, e2) # 输出: (mpz(1), mpz(-58), mpz(63))

这个三元组返回值中:

  • s是最大公约数(确保为1才能继续攻击)
  • s1和s2就是我们需要的系数

3. 负系数的模逆元处理

当s1或s2为负数时,直接计算pow(c,s,n)会失败,因为负指数在模运算中需要转换为模逆元。数学上:

c^s ≡ (c^{-1})^{-s} mod n

具体到我们的例子,s1=-58,所以需要:

if s1 < 0: c1_inv = gmpy2.invert(c1, n) part1 = pow(c1_inv, -s1, n) else: part1 = pow(c1, s1, n)

同理处理s2部分后,最终的明文计算就是两部分乘积取模:

m = (part1 * part2) % n

4. 明文的特殊解码技巧

Samemod题目有个精妙的陷阱——明文不是直接的ASCII码,而是三位十进制数表示一个字符的特殊编码。这就需要额外的解码步骤:

result = str(m) # 转为字符串处理 flag = "" i = 0 while i < len(result): if result[i] == '1': # 三位数标识 flag += chr(int(result[i:i+3])) i += 3 else: # 两位数 flag += chr(int(result[i:i+2])) i += 2 print(flag)

这种编码方式提醒我们:在密码学比赛中,数学破解只是第一步,理解出题人的编码意图同样关键

5. 完整攻击脚本的工程化实现

将上述所有环节系统化整合,我们得到健壮的共模攻击实现:

import gmpy2 def common_modulus_attack(n, e1, e2, c1, c2): # 验证参数有效性 assert gmpy2.gcd(e1, e2) == 1, "Exponents must be coprime" # 计算扩展欧几里得系数 g, s1, s2 = gmpy2.gcdext(e1, e2) # 处理负指数情况 if s1 < 0: c1 = gmpy2.invert(c1, n) s1 = -s1 if s2 < 0: c2 = gmpy2.invert(c2, n) s2 = -s2 # 计算明文 m = (pow(c1, s1, n) * pow(c2, s2, n)) % n return m def decode_special_format(number): s = str(number) result = [] i = 0 while i < len(s): if s[i] == '1' and i + 3 <= len(s): result.append(chr(int(s[i:i+3]))) i += 3 else: result.append(chr(int(s[i:i+2]))) i += 2 return ''.join(result) # 实战应用 n = 6266565720726907265997241358331585417095726146341989755538017122981360742813498401533594757088796536341941659691259323065631249 e1, e2 = 773, 839 c1 = 3453520592723443935451151545245025864232388871721682326408915024349804062041976702364728660682912396903968193981131553111537349 c2 = 5672818026816293344070119332536629619457163570036305296869053532293105379690793386019065754465292867769521736414170803238309535 m = common_modulus_attack(n, e1, e2, c1, c2) flag = decode_special_format(m) print("Flag:", flag) # 输出:flag{whenwethinkitispossible}

这个实现不仅解决了题目,更展示了密码学攻防的精髓——数学原理与工程实践的完美结合

http://www.gsyq.cn/news/1506707.html

相关文章:

  • [智能体-364]: Deep Agents,什么样的代码是在沙箱中执行?
  • 2026上海GEO优化服务商实力测评报告:本土七强企业赋能制造业TOB数字化营销升级 - 速递信息
  • 2026肇庆电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 20260611 之所思 - 人生如梦
  • 终极DS4Windows配置指南:让PlayStation手柄在PC上完美运行
  • 2026运城电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • okbiye 论文降重降 AIGC:多档位双效优化方案,一次性解决查重与 AI 标记双重难题
  • 2026呼和浩特市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 遗传算法工程化实践:从教科书到电商多目标优化
  • 3%AFFF/AR抗溶性水成膜泡沫灭火剂十大品牌,浙江金瑞恒精准匹配火灾介质 - 品牌速递
  • 数据库运维Agent比价指南:国产自研产品适配国产数据库兼容性更好吗?
  • 【电力系统】考虑局部遮阴的光伏PSO-MPPT控制模型附Simulink仿真
  • 宝时信号卡闪送平台靠谱吗?邀请码17888佣金高+秒返1-3天结算+闪送服务 - 流量卡代理招商
  • 2026伊犁企业业主高频选择的 5 家危房检测房屋结构安全鉴定机构实地测评整理 - 科信检测
  • 别再把AI API当成临时工具了:真正会用AI的人,已经开始搭自己的模型工作台
  • 2026自贡市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • DeepSeek-R1开源模型:商用级推理效率与多模态工程实践
  • Vivado进阶:从BIN/MCS生成到FLASH烧写的全流程优化与实战避坑
  • 2026枣庄电能质量评估权威机构排行 TOP 谐波检测 + 电压波动 + 能效测评 附电话地址 - 中检检测集团
  • 从‘123’到‘15A6F’:一个C++程序员的进制识别工具开发手记
  • 2026呼伦贝尔市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 2026呼和浩特市玉泉区家里卫生间漏水、阳台漏水、楼顶漏水、阳台漏水、地下室渗水、阳光房漏水各种房屋漏水情况不用愁!售后无忧,线上质保可查。本地防水补漏公司为您排忧解难! - 防水百科
  • 金力泰成功“脱帽摘星”:以合规筑牢根基,以创新驱动高质量发展新征程
  • 2026镇江市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 大模型、RAG、Agent 到底是什么?必须吃透的 3 大核心能力
  • 洛雪音乐音源终极指南:3分钟免费获取全网高品质音乐的完整方案
  • 临沂本地婚宴宴会酒店口碑榜单 多家优质门店综合实力对比参考 - 海棠依旧大
  • PyTorch版LeNet-5实战:MNIST手写数字识别训练与测试全流程代码包
  • 2026阳泉市民优选 5 家水质检测服务机构 饮用水污水废水检测实地走访测评整理 - 中安检测集团
  • 360安全卫士老用户满意度 四个维度长期使用评分 - 速递信息