RSA - 共模攻击

概念

RSA 共模攻击(Common Modulus Attack)是一种在特定条件下可以利用的 RSA 加密算法的攻击方法。它利用了当多个密文使用同一个 RSA 公钥(即相同的模数 n)进行加密时,可能可以通过密文之间的关系来获取明文信息,而无需知道私钥。

实现原理

必要条件:

  • 已知模数 n
  • 已知公钥指数 e
  • 已知多个密文 C1 C2 ... Cn
  • 部分或全部密文的公钥指数 e 之间满足一定的数学关系,例如互为逆元、公因子等

对于明文 m 使用公钥 (n,e) 进行加密得到密文 c :
c = m e m o d ( n ) c=m^e mod (n) c=memod(n)

已知 RSA 公钥加密的安全基于大整数分解问题的困难性,即给定 ne,从 n 中提取 pq 的难度。然而,在某些情况下,当多个密文使用相同的 n 和不同的公钥指数 e 进行加密时,可以利用这种公共模数来推导出明文。通过这种方式,攻击者可以计算出原始消息m,即使他们不知道私钥d1和d2。

在实际应用中,这种攻击的可行性取决于多个因素,包括e1和e2的值以及模数n的保密程度。如果e1和e2不互质,那么攻击的难度会增加。此外,如果n是一个大的合数,那么分解n的难度也会增加,从而提高了安全性。

举个栗子1

n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
e1 = 11187289
c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2 = 9647291

我们可以根据上面所提及的运算方式得出运算脚本↓↓↓

from gmpy2 import invert
import binasciidef common_modulus_attack(n, c1, c2, e1, e2):"""使用共模攻击解密RSA加密的密文。参数:n (int): RSA模数c1 (int): 第一个密文c2 (int): 第二个密文e1 (int): 第一个公钥指数e2 (int): 第二个公钥指数返回:int: 解密后的明文"""def extended_gcd(a, b):"""扩展欧几里得算法,用于求解两个数的最大公约数及其系数。参数:a (int): 第一个数b (int): 第二个数返回:tuple: (gcd, x, y),其中 gcd 是最大公约数,x 和 y 是满足 ax + by = gcd 的系数"""if b == 0:return a, 1, 0else:gcd, x, y = extended_gcd(b, a % b)return gcd, y, x - (a // b) * y# 使用扩展欧几里得算法计算 e1 和 e2 的最大公约数及其系数gcd, coefficient1, coefficient2 = extended_gcd(e1, e2)# 如果系数为负数,则求模反元素if coefficient1 < 0:coefficient1 = -coefficient1c1 = invert(c1, n)elif coefficient2 < 0:coefficient2 = -coefficient2c2 = invert(c2, n)# 计算解密后的明文plaintext = pow(c1, coefficient1, n) * pow(c2, coefficient2, n) % nreturn plaintext# 给定的参数和密文
c1 = 22322035275663237041646893770451933509324701913484303338076210603542612758956262869640822486470121149424485571361007421293675516338822195280313794991136048140918842471219840263536338886250492682739436410013436651161720725855484866690084788721349555662019879081501113222996123305533009325964377798892703161521852805956811219563883312896330156298621674684353919547558127920925706842808914762199011054955816534977675267395009575347820387073483928425066536361482774892370969520740304287456555508933372782327506569010772537497541764311429052216291198932092617792645253901478910801592878203564861118912045464959832566051361
n = 22708078815885011462462049064339185898712439277226831073457888403129378547350292420267016551819052430779004755846649044001024141485283286483130702616057274698473611149508798869706347501931583117632710700787228016480127677393649929530416598686027354216422565934459015161927613607902831542857977859612596282353679327773303727004407262197231586324599181983572622404590354084541788062262164510140605868122410388090174420147752408554129789760902300898046273909007852818474030770699647647363015102118956737673941354217692696044969695308506436573142565573487583507037356944848039864382339216266670673567488871508925311154801
e1 = 11187289
c2 = 18702010045187015556548691642394982835669262147230212731309938675226458555210425972429418449273410535387985931036711854265623905066805665751803269106880746769003478900791099590239513925449748814075904017471585572848473556490565450062664706449128415834787961947266259789785962922238701134079720414228414066193071495304612341052987455615930023536823801499269773357186087452747500840640419365011554421183037505653461286732740983702740822671148045619497667184586123657285604061875653909567822328914065337797733444640351518775487649819978262363617265797982843179630888729407238496650987720428708217115257989007867331698397
e2 = 9647291# 使用共模攻击解密密文
plaintext = common_modulus_attack(n, c1, c2, e1, e2)# 输出解密后的结果
print("解密后的明文(十进制):", plaintext)
print("解密后的明文(ASCII):", binascii.unhexlify(hex(plaintext)[2:]).decode('utf-8'))

在这里插入图片描述


  1. 数据来源于网络 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring揭秘25-springmvc04-servlet容器与springmvc容器总结

文章目录 【README】【1】DelegatingFilterProxy回顾【1.1】DelegatingFilterProxy初始化过滤器bean 【2】从servlet容器获取springmvc顶级web容器【2.1】从Servlet容器中获取springmvc容器总结【2.2】ContextLoaderListener加载springmvc顶级web容器并将其添加到servlet容器【…

Android开发视频预览效果

Android开发视频预览效果 视频播放不是一个简单的事情&#xff0c;得有暂停&#xff0c;继续播放等功能&#xff0c;屏幕的适配也是头疼的事情 一、思路&#xff1a; 引用的是腾讯播放器TXVodPlayer 二、效果图&#xff1a; 图片不是很直观&#xff0c;也可以看下视频 And…

wordpress调用全部页面 排除某个指定ID页面

要在WordPress中调用所有页面并排除指定的ID&#xff0c;您可以使用WP_Query类。以下是一个示例代码&#xff0c;它将查询所有页面并排除指定的页面ID&#xff1a; <?php // Page ID array to exclude $exclude_ids array( 6, 66, 666 ); //Replace here with the page I…

数据要素资料阅读笔记

目录 文章目录 目录数据价值化与数据要素市场发展报告 2024 —— 国信息通信研究院政策与经济研究所一、新理论:数据要素价值释放的经济学分析(一)从稀缺性看数据要素特征(二)数据要素市场化配置理论(三)数据要素市场分类及特征(四)数据要素价值释放路径和框架二、新进展:数据价…

(Linux和数据库)1.Linux操作系统和常用命令

了解Linux操作系统介绍 除了办公和玩游戏之外不用Linux&#xff0c;其他地方都要使用Linux&#xff08;it相关&#xff09; iOS的本质是unix&#xff08;unix是付费版本的操作系统&#xff09; unix和Linux之间很相似 Linux文件系统和目录 bin目录--放工具使用的 操作Linux远程…

CentOS 7 上安装 Kibana

以下是在 CentOS 7 上安装 Kibana 的步骤&#xff1a; 一、安装 Java&#xff08;如果尚未安装&#xff09; Kibana 需要 Java 运行环境。如果系统中没有安装 Java&#xff0c;可以使用以下命令安装 OpenJDK&#xff1a; sudo yum install java-1.8.0-openjdk二、添加 Elast…

消费者Rebalance机制

优质博文&#xff1a;IT-BLOG-CN 一、消费者Rebalance机制 在Apache Kafka中&#xff0c;消费者组 Consumer Group会在以下几种情况下发生重新平衡Rebalance&#xff1a; 【1】消费者加入或离开消费者组&#xff1a; 当一个新的消费者加入消费者组或一个现有的消费者离开消费…

ROS基础入门——实操教程

ROS基础入门——实操教程 前言 本教程实操为主&#xff0c;少说书。可供参考的文档中详细的记录了ROS的实操和理论&#xff0c;只是过于详细繁杂了&#xff0c;看得脑壳疼&#xff0c;于是做了这个笔记。 Ruby Rose&#xff0c;放在这里相当合理 本文初编辑于2024年10月4日 C…

mysql linux 安装

--------------------------------------------------------------------------------------------------------------------------------- 1.前置准备 1.1 卸载旧版MySQL 1.2 查看rpm包 rpm -qa|grep mysql 若有可用 rpm -e 安装包 --nodeps 1.3 查找mysql残留包&#x…

MySQL--事务(详解)

目录 一、前言二、本文章目标三、什么是事务&#xff1f;四、事务的ACID特性五、为什么要使用事务六、如何使用事务6.1 查看支持使用事务的引擎6.2语法6.3 开启⼀个事务&#xff0c;执行更新后回滚6.4 开启一个事务更新后提交6.5 保存点6.6 自动/手动提交事务 七、事务的隔离性…

Spring异步线程池的问题

今天看一视频&#xff0c;提到说 Spring默认的异步线程池比较简单&#xff0c;每次执行异步任务&#xff0c;都会新建一个线程进行处理&#xff0c;不会重复利用&#xff0c;所以在用Spring框架开发的时候&#xff0c;需要自定义异步线程池。第一次听到这个说法。遂开始百度。 …

Word页眉内容自动填充为章节标题

Word页眉内容自动填充为章节标题 在写毕业论文的过程中&#xff0c;通常要求将页眉设置为章节标题&#xff0c;例如这样 通常&#xff0c;页眉内容我们都是手敲上去的&#xff0c;其实在Word中可以设置为自动引用章节标题&#xff0c;以下为设置方法&#xff0c;仅供参考&…

JVM错误:OutOfMemoryError: GC overhead limit exceeded

OutOfMemoryError: GC overhead limit exceeded 在Window服务器上跑一个项目&#xff0c;无意中出现服务访问不了&#xff0c;查看日志文档&#xff0c;第一次遇到了这个异常信息。 1. 错误含义 OutOfMemoryError: GC overhead limit exceeded 是 JVM 中的一种错误&#xff…

jmeter入门:脚本录制

1.设置代理。 网络连接-》代理-》手动设置代理. ip&#xff1a; 127.0.0.1&#xff0c; port&#xff1a;8888 2. add thread group 3. add HTTP(s) test script recorder, target controller chooses Test plan-> thread Group 4. click start. then open the browser …

鸡兔同笼,但是线性代数

灵感来自&#xff1a;bilibili&#xff0c;巨佬&#xff01; 我们有 14 14 14 个头&#xff0c; 32 32 32 只脚&#xff0c;所有鸡和兔都没有变异&#xff0c;头和脚都完整&#xff0c;没有数错。还有什么 Bug 吗 小学奥数 假设全是鸡&#xff0c;则有 14 2 28 14 \time…

【2024保研经验帖】东南大学计算机学院夏令营

前言 背景&#xff1a;末211&#xff0c;专业计算机科学与技术&#xff0c;rk前5%&#xff0c;无科研&#xff0c;只有几个竞赛 东南大学计算机学院夏令营需要老师推荐&#xff0c;一个老师的推荐名额感觉应该挺多的&#xff0c;因为学硕和专硕都进了两百多人&#xff0c;总共…

利用 Python 爬虫采集 1688商品详情

1688是中国的一个大型B2B电子商务平台&#xff0c;主要用于批发和采购各种商品。对于需要从1688上获取商品详情数据、工程数据或店铺数据的用户来说&#xff0c;可以采用以下几种常见的方法&#xff1a; 官方API接口&#xff1a;如果1688提供了官方的API接口&#xff0c;那么可…

猎板PCB设计中的HDI板技术革新与实践

在设计工业控制器的HDI板时&#xff0c;需要注意以下几个关键方面&#xff1a; 布线设计&#xff1a;由于HDI板布线密度高&#xff0c;合理规划走线非常关键&#xff0c;避免交叉和重叠&#xff0c;确保信号传输的稳定性和可靠性。需要控制线宽和线距&#xff0c;根据电路板的…

docker的安装与启动——配置国内Docker源

移除旧版本docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager –add-repo ht…

SAP_FI_表ACDOCA取代的表

在 SAP S/4HANA 系统中&#xff0c;ACDOCA&#xff08;通用分录表&#xff0c;Universal Journal&#xff09;引入了全新的数据结构&#xff0c;取代了原先 ERP 系统中多个财务和控制模块的表。ACDOCA 通过一个单一表格整合了财务会计&#xff08;FI&#xff09;和管理会计&…