RSA攻击手法及相应例题解析
RSA加密基本原理
加密过程
选择两个大素数p和q,计算出模数N= p * q
计算φ= (p−1) * (q−1) 即N的欧拉函数,然后选择一个e(1<e<φ),且e和φ互质
取e的模反数为d,计算方法:e * d ≡ 1 (mod φ)
对明文A进行加密:B≡A^e(mod n) 或B= pow(A,e,n),得到的B即为密文
对密文B进行解密,A≡B^d(mod n) 或A= pow(B,d,n),得到的A即为明文
p 和q:大整数N的两个因子(factor)
N:大整数N,我们称之为模数(modulus)
e 和d:互为模反数的两个指数(exponent)
c 和m:分别是密文和明文,这里一般指的是一个十进制的数
一般有如下称呼:
(N,e):公钥
(N,d):私钥
加密分析
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数,n、e、d。
其中,n是两个大质数p、q的积,n以二进制表示时所占用的位数,就是所谓的密钥长度。
e和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质;再选择d,要求(e*d)≡ 1(mod(p-1)×(q-1))。
令φ= (p-1)(q-1) 上式即 d*e= 1 mod φ 即:(d*e- 1)% φ = 0
(n,e),(n,d)就是密钥对。其中(n,e)为公钥,(n,d)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A≡B^d(mod n);B≡A^e(mod n);(公钥加密体制中,一般用公钥加密,私钥解密)
e和d可以互换使用,即:
A≡B^e (modn);B≡A^d(mod n);
附加解释
同余符号“ ≡ ”
数论中的重要概念。给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(modm)。对模m同余是整数的一个等价关系
比如26≡14(mod12)
互质
公约数只有1的两个数,称为互质
RSA常见攻击及分解方法
RSA的非对称体制是建立在大整数分解难题上的,所以最基本的攻击方法就是当模数N过小时,直接计算它的因子。但是大部分情况下稍微有点难度的rsa题目都不会是直接暴力分解N,而是需要一定的攻击手法。
N如果是256bits可以直接分解,如果超过了就基本别想暴力分解了,需要用到下面的一些攻击手法,下面列举一下一些攻击手法。
Wiener’sattack
当d < (1/3)N^(1/4)时,我们可以通过Wiener’sattack分解得到d
费马分解
当大整数N的两个因子p和q相近时,我们可以通过费马分解的办法很快分解大整数
Smallq
当q较小时,即|p-q|较大时,我们可以直接爆破因子
BonehDurfee Method
当d满足d ≤ N^0.292时,我们可以利用该方法分解N,理论上比wienerattack要强一些。
yafu
yafu使用最强大的现代算法去自动化的分解输入的整数。大多数的算法都实现了多线程,让yafu能充分利用多核处理器(算法包括SNFS, GNFS,SIQS, 和ECM)。
factordb
如果对一个大整数用一些特殊算法也分解不了的时候,我们可以在 http://factordb.com/ 中查询一下数据库,说不定就能找到其因子
看完攻击手法,我们拿例题来更好的认识一下攻击手法。
mediumRSA
下载地址:
https://dn.jarvisoj.com/challengefiles/mediumRSA.rar.07aab25c9c54464a8c9821ca28503330
给出两个文件:
flag.enc
pubkey.pem
可以看到一个公钥,一个加密后的文件
正常分解的解决方法
openssl分解公钥得到N、E
可以看到N(256bits)很短直接分解即可(几分钟之内)
python代码生成私钥
openssl 解密
RSActfTOOL
下载地址:
https://github.com/Ganapati/RsaCtfTool
可以用公钥直接生成私钥
私钥解密:
低加密指数攻击
Extremelyhard RSA
题目信息:没想到RSA4096都被你给破了,一定是我的问题,给了你太多信息,这次我只给你一个flag的加密值和公钥,仍然是RSA4096,我就不信你还能解出来。
题目链接:
https://dn.jarvisoj.com/challengefiles/extremelyhardRSA.rar.8782e822c895a2af3d8ba4ffbb3e280b
解题思路:openssl 解码一下piblic.pem可以看到E=3(一般情况下E=0x10001),典型的低加密指数攻击
注:flag.enc以十六进制方式来读取,因为文件中含有很多不可打印字符。
破电脑跑了快半个小时,期间以为卡了,还好跑出来了&……
另一道ctf
正常e的值通常情况下是0x10001,上面这个e明显值过小,而且是3,所以还是低加密指数攻击
脚本如下:
共模攻击
VeryHard RSA
题目链接:
https://www.jarvisoj.com/challenges
题目给出加密代码如下:
注:N后面的L是为了强制编译器把常量作为长整数来处理,只需在后边加上一个字母L(或l)
首先看这个N长度(4096bit)就别想暴力分解了。
代码可以看到是相同的N,不同的E加密的,那就使用共模攻击
解密代码如下:
rabin算法
hardRSA
题目链接:
https://www.jarvisoj.com/challenges
也是给了和上面一样的两个文件pubkey.pem和flag.enc
提取公钥发现e=2,N与上面mediumrsa例题一样,用rabin算法(该算法只适合e=2的情况)
N在上面已经用yafu分解出来p,q了,直接用就可以了。
python脚本如下:
记得投稿哦
如果有好的技术原创文章
欢迎投稿至邮箱:edu@heetian.com
合天会根据时效、新颖程度、文笔及实用性等要素对文章进行评判,一经发布给予100元-500元不等的稿费
还等什么呢?有才能的你快来投稿吧!
了解更多详情点击重金悬赏 | 重金悬赏 | 合天原创投稿等你来!
RSA攻击手法及相应例题解析相关推荐
- 操纵神经元构造后门,腾讯朱雀实验室披露AI模型新型攻击手法
近日,在第19届XCon安全焦点信息安全技术峰会上,腾讯朱雀实验室首度公开亮相.这个颇有神秘色彩的安全实验室专注于实战攻击技术研究和AI安全技术研究,以攻促防,守护腾讯业务及用户安全. 会上,腾讯朱雀 ...
- “黑”掉神经网络:腾讯披露新型AI攻击手法,主流机器学习框架受影响
来源:AI前线 本文约3000字,建议阅读6分钟. 本文为你介绍一种新兴的针对机器学习模型的攻击方式"后门攻击". "后门攻击"是一种新兴的针对机器学习模型的攻 ...
- “黑”掉神经网络:腾讯披露新型AI攻击手法
本文约3000字,建议阅读6分钟.本文为你介绍一种新兴的针对机器学习模型的攻击方式"后门攻击". "后门攻击"是一种新兴的针对机器学习模型的攻击方式. 8月19 ...
- c语言入门中冒泡排序的例题,选择排序和冒泡排序例题解析(c语言)
排序算法排序算法 1.简单选择排序简单选择排序 假设有 n 个数,作简单选择排序简单选择排序,按升序排列: 先通过 n-1 次比较,从 n 个值中找出最小值,将它与第一个值交换. 再通过 n-2 次比 ...
- linux管道通信题目,操作系统实训(Linux)——习题解答、例题解析、实验指导-王红-实验实验7软中断及管道通信课案.ppt...
操作系统实训(Linux)--习题解答.例题解析.实验指导-王红-实验实验7软中断及管道通信课案.ppt 实验7 软中断及管道通信 一.实验目的(1)掌握linux系统软中断通信的实现方法.(2)掌握 ...
- Oracle:经典例题解析
1.环境准备 下面所有SQL语句都是建立在employees表和departments表上,具体表结构如下所示: departments表结构如下所示: 字段名 数据类型 长度 约束 说明 depar ...
- AD域渗透 | PTHPTK哈希传递攻击手法
AD域渗透的第二篇,托更一下Kerberos协议的分析文章,等到攻击手法研究明白了,再把协议分析放上来,防止像那些理解不明不白的人写的东西一样祸害人. 发生情况 在高版本的windows server ...
- 计算机组成原理例题4.2,4.2.2 例题解析(1)
4.2.2 例题解析(1) 1. 单项选择题 [例4-2-1]4个16K×8位的存储芯片,可以设计容量为 的存储器. A. 32K×16位B. 16K×16位 C. 32K×8位 D. 8 ...
- 《编译原理》求短语,直接短语,句柄,素短语,最左素短语 - 例题解析
<编译原理>求短语,直接短语,句柄,素短语,最左素短语 - 例题解析 笔记 (一)明确概念: 名称 概念 短语 定义: 若 S 为文法 G 的开始符号,αβδ 是该文法的一个句型,即 S ...
- 可由线性表示且表达式唯一_典型例题解析例1设向量问取何值时可由线性表示且表示.doc...
典型例题解析例1设向量问取何值时可由线性表示且表示 典型例题解析 例1 设向量. 问取何值时 : (1)可由线性表示,且表示惟一. (2) 可由线性表示,但表示不惟一 (3)不可由线性表示. 解 本题 ...
最新文章
- linux搭建markdown服务,Markdown新手快速入门基础教程及Ubuntu下的安装
- 微信支付 商户Key 支付Key API密钥 的获取
- python怎么添加ui_如何在Python中创建UI
- java中properties类_Java中的Properties类详解
- win7此更新不适用计算机,win7系统更新提示“此更新不适用于您的计算机”的解决方法...
- 大学生数学建模赛题解析及优秀论文-2021电工杯A题高铁牵引供电系统运行数据分析及等值建模(附Python代码)
- ad15图层显示_AD15使用及设置
- PNP与NPN三极管开关特性
- Cookie和Session的作用,区别和各自的应用范围,cookie、Session工作原理
- 坚果云和亿方云该如何选?
- 程序猿菜鸟打怪升级—一路火花带闪电
- MODTRAN辐射传输模型使用笔记
- 微信小程序云开发之收藏文章功能的简单实现
- OTRS安装使用系列之一——安装及初始…
- 【叶子函数分享二十三】计算两个日期之间的工作日
- Linux系统网速测速,Linux系统下的网络带宽测速
- 基于JAVA线上动漫周边商城计算机毕业设计源码+数据库+lw文档+系统+部署
- 基于数字温度传感器的数字温度计 华氏度和摄氏度
- 1002-电影观后感---乔布斯传
- 软件测试-七项测试的基本原则
热门文章
- Vue.js身份证读卡器阅读器谷歌chrome火狐Firefox网页实现读取方法
- 使用eclipse开发jsp项目入门
- html 5 本地数据库(二)-- Web Sql Database核心方法openDatabase、transaction、executeSql 详解
- CMMI3认证和CMMI5认证有哪些不同
- 三菱PLC编程软件Work2的FB块加密后的解密方法
- 5、Android搭建RN开发环境
- 作为移动开发程序员,腾讯3轮面试都问了Android事件分发,分享PDF高清版
- 一次Pmbus 调试经验
- 分享5款提高工作效率的CAD插件,总有一款适合你
- Wordpress中Md文章添加图片点击放大效果