前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从小白变RSA大神,附常用工具使用方法及CTF中RSA典型例题

从小白变RSA大神,附常用工具使用方法及CTF中RSA典型例题

作者头像
FB客服
发布于 2018-03-22 08:28:05
发布于 2018-03-22 08:28:05
8.2K0
举报
文章被收录于专栏:FreeBufFreeBuf

前言

RSA加解密类题型是ctf题中常见题型,考点比较广泛,涉及各种攻击手法,以前在这栽了不少跟头,这里好好总结一下。包括RSA加密原理,RSA常用工具使用方法及下载地址,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,要求(ed) ≡ 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 (mod n);B≡A^d( mod n);

附加解释

同余符号 “ ≡ ”

数论中的重要概念。给定一个正整数m,如果两个整数a和b满足(a-b)能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(mod m)。对模m同余是整数的一个等价关系

比如26≡14(mod 12)

互质

公约数只有1的两个数,称为互质

python pow() 函数

RSA工具

RSA-Tool 2使用方法

软件参数

P= 第一个大素数Q= 第二个大素数 (P和Q的长度不能相差太大!) E= 公钥 (一个随机数,必须满足:GCD(E,(P-1)*(Q-1))==1)(译者注:即E和(p-1)(Q-1)互素) N= 公用模数,由P和Q生成:N=P*Q D= 私钥:D=E^(-1) mod ((P-1)*(Q-1))

参数N和E是公开的但是D是私有的并且绝不能公开!P和Q在生成密钥后便不再需要了,但是必须销毁。

为了从公钥(N,E)得到D,需要试图分解N为它的两个素数因子。对于一个很大的模数N(512位或更大)要想分解出它的P和Q是件非常困难的事。

生成一组RSA密钥对

按下’Start’按钮,通过移动你的鼠标指针来收集一些随机数据.这必须一次完成,因为收集的数据会被保存在你的RSA-Tool文件夹里面的一个文件中。 选择要创建的密钥的长度(等于N的长度)。最大为4096位. 选择你的公钥(E)并把它输入到相应的编辑框作为十进制数。常用的E有(考虑到计算速度的原因):3,17,257和65537(十进制). 按下’Generate’,等到密钥生成完成。

注意,生成很大的数需要一些时间,取决于你的CPU的计算能力。

特别说明:你可以常按’Generate’.做为密钥生成过程的一个组成部分的内置随机数生成系统会在运行的时候重新进行初始化。这是故意这么做的,这样可使那些滥用这个工具做其它事情变得更困难…   注意两次或两次以上生成相同的密钥对是不可能的。

分解一个数

选择正确的进制 在Modules(N)编辑框中输入或复制这个数。这会激活’Factor’按钮。 然后按Factor按钮.注意分解大于240位的数会花很大的内存和时间!

甚至很小的数也会需要几个小时。

如果用Multiple Polynomial Quadratic Sieve(MPQS)算法来分解整数,需要大量的内存.原因是这个算法的设计,而不是编码风格。

例如:分解一个给定大小的N的内存使用情况(使用MPQS算法)…

256位~89MB, 280 位~140MB, 296位~185MB等等.

由素数因子P和Q计算私钥D

选择参数P和Q的正确进制,在相应的文本区域中输入或粘贴P和Q 按下’Calc.D’,得到整数的精确位长度

为你要进行检查的数选择正确的进制 在Modules(N)文本框中输入或粘贴整数 按小的’Exact size’按钮.会显示出这个数使用的精确的位数

msieve使用方法

msieve是一个大数分解工具 下载地址

msieve.exe —help 查看帮助 l filename 保存日志到filename文件中,默认为msieve.log i filename 从filename文件中读取数字,默认worktodo.ini one_number: 待分解数字,0开头代表8进制,0x开头代表16进制,否则为10进制。如不填,则从worktodo.ini中读取数字。 -v 意思打印具体分解的情况 -q 仅仅打印能找到的因子

各自运行结果如下:

注:prp39 即是分解出来的p,q

注意前面加上相应进制。八进制0 十六进制0x 十进制什么也不加。

openssl

生成私钥,并导出公钥生成2048 bit的PEM格式的RSA Key:Key.pem

从私钥导出公钥:Key_public.pem

准备测试数据

为了简便起见,这里将字符串”hello rsa”存放到文件msg.txt作为测试数据:

公钥加密

使用公钥key_public.pem对测试数据msg.txt进行加密生成msg.txt.enc,并查看加密后的数据:

这里使用:

-in 选项指定原始数据文件msg.bin -out 选项指定加密后的输出文件msg.bin.enc -inkey 选项指定用于加密的公钥Key_pub.pem,由于输入是公钥,所以需要使用选项-pubin来指出 -encrypt 选项表明这里是进行加密操作 -pkcs 选项指定加密处理过程中数据的填充方式,对于填充,可选项有:-pkcs, -oaep, -ssl, -raw,默认是-pkcs,即按照PKCS#1 v1.5规范进行填充

私钥解密

使用私钥key.pem对加密后的数据msg.txt.enc进行解密,并将结果存放到msg.txt.dec文件中:

这里使用:

-in 选项指定待解密的数据文件msg.bin.enc -out 选项指定解密后的输出文件msg.bin.dec -inkey 选项指定用于解密的私钥Key.pem,由于输入是私钥,所以不再需要使用选项-pubin -decrypt 选项表明这里是进行解密操作 -pkcs 选项指定解密处理过程中数据的填充方式,对于填充,可选项有:-pkcs, -oaep, -ssl, -raw,默认是-pkcs,即按照PKCS#1 v1.5规范进行填充

yafu

主要用来分解N,命令为factor(N)

先运行文件夹下的yafu-x64.exe进入命令行

执行factor(N)

执行过程:(也可以像下面这样后面直接加上factor(N))

mismatched parens报错

这是因为N的位数过长,命令行不支持。

把N值保存到文件中,如rsa.txt ,然后执行

执行后rsa.txt就会被自动删除。

执行过程如下:

eof; done processing batchfile报错

rsa.txt用notepad++打开,最后加上换行即可。

RSA题型分析

实验吧RSA

题目链接:http://www.shiyanbar.com/ctf/1772

openssl分析公钥,得到N,E

运行结果

Modulus 是n的值,Exponent是E的值。

msieve分解N的值

运行结果

知道p,q,e的值,python脚本生成私钥

注:生成的私钥会默认base64加密。

密钥解密密文

RSA roll

题目给出一个txt文件,内容如下:

可知 N = 920139713 E = 19

方法一 RSA-tool 2

分解N得到p,q 选对进制,生成D(私钥) 点击test用私钥解密密文

方法二 python脚本

分解N得到p,q

解出私钥d

私钥 d 解密密文(密文保存为rsa.txt并去掉开头两行)

运行结果

得到flag为flag{13212je2ue28fy71w8u87y31r78eu1e2}

常用工具下载地址

RSA-tool 2 http://www.skycn.net/soft/appid/39911.html

msieve https://sourceforge.net/projects/msieve/

yafu https://sourceforge.net/projects/yafu/

后续遇到相应题型还会在我的博客补充www.ixuchao.cn

联系方式:

qq:755563428

email:755563428@qq.com

phone:15615833854

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RSA常见解题思路及技巧
1977年,麻省理工学院的 Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出了一种非对称加密算法,用他们三人的姓氏缩写命名为 RSA。RSA 既不是惟一,也不是最早的非对称加密算法。但它是使用最广泛,因而也是最重要的非对称加密算法。
tinyfisher
2019/11/20
4.9K0
CTF中RSA题型解题思路及技巧
0x01 RSA算法简介 为了方便小白咀嚼后文,这里先对RSA密钥体制做个简略介绍(简略因为这不是本文讨论的重点) 选择两个大素数p和q,计算出模数N = p * q 计算φ = (p−1) * (q−1) 即N的欧拉函数,然后选择一个e (1<e<φ),且e和φ互质 取e的模反数为d,计算方法: e * d ≡ 1 (mod φ) 对明文m进行加密:c = pow(m, e, N),得到的c即为密文 对密文c进行解密,m = pow(c, d, N),得到的m即为明文 整理一下得到我们需要认识和记住的
FB客服
2018/02/23
4.9K0
CTF中RSA题型解题思路及技巧
CTF|玩转RSA加密算法(一)
RSA是一种非对称加密算法,它由 公钥(n/e),私钥(n/d),明文M和密文C组成。我们做CTF题目时,一般题目中会给出公钥和密文让我们推出对应的私钥或者明文。RSA的相关公式都写在上面脑图中,在正式讲解RSA加密算法前我们先来普及一波数学的基本知识。 一. 相关数学基础 1.1 素数和互质数 素数也称质数,它的定义为除本身和 1 的乘积外,不能表示其他数的乘积。比如2,3,5,7,11,13,17……等都是素数。 互素数也称互质数,定义是公约数只有1的两个自然数,如: 1和任何自然数 1 & 2
漏斗社区
2018/03/28
5.9K0
CTF|玩转RSA加密算法(一)
RSA算法原理——(3)RSA加解密过程及公式论证
上期(RSA简介及基础数论知识)为大家介绍了:互质、欧拉函数、欧拉定理、模反元素 这四个数论的知识点,而这四个知识点是理解RSA加密算法的基石,忘了的同学可以快速的回顾一遍。
全栈程序员站长
2022/09/02
3.5K1
RSA算法原理一点通
我们知道IFAA标准、SOTER标准所定义的加解密算法为RSA2048,FIDO方案所定义的加解密算法为椭圆曲线算法,今年特火的区块链技术也采用的是椭圆曲线算法。那么今天我们先来聊聊RSA算法的基本原理!只需要具备高中数学基础知识,花1个小时即可理解。 (以下内容为网络内容整理)如果没有理解,请告诉我,保证让你明明白白。 祝大家中秋快乐! 进入正题之前,我先简单介绍一下,什么是"公钥加密算法"。 一、一点历史 1976年以前,所有的加密方法都是同一种模式: (1)甲方选择某一种加密规则,对信息进行加密; (
安智客
2018/02/24
1.4K0
RSA算法原理一点通
RSA加密算法原理
RSA加密算法是一种非对称加密算法,所谓非对称,就是指该算法加密和解密使用不同的密钥,即使用加密密钥进行加密、解密密钥进行解密。在RAS算法中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,由于无法计算出大数n的欧拉函数phi(N),所以不能根据PK计算出SK。
全栈程序员站长
2021/04/13
9.2K0
RSA加密算法原理
使用Python实现RSA加密算法及详解RSA算法「建议收藏」
代码已经放上github : https://github.com/chroje/RSA
全栈程序员站长
2022/08/15
7K0
使用Python实现RSA加密算法及详解RSA算法「建议收藏」
RSA算法原理(二)
上一次,我介绍了一些数论知识。 有了这些知识,我们就可以看懂RSA算法。这是目前地球上最重要的加密算法。 六、密钥生成的步骤 我们通过一个例子,来理解RSA算法。假设爱丽丝要与鲍勃进行加密通信,她该怎
ruanyf
2018/04/12
1.3K0
RSA算法原理(二)
RSA简介(一)——数论原理
  RSA是最常用的非对称加密算法。   所谓非对称加密,就是说有两个密钥,一个密钥加密只可以用另外一个密钥解密,一般一个作为公钥,公开给所有人用来加密用,而另一个用来解密其他拥有公钥的加密结果,叫做私钥。另外,拥有私钥者可以用私钥加密信息,公钥可以解密获得加密内容,从而验证私钥拥有者的身份,这是一种特殊的加密,叫签名。   RSA涉及到5个整数,关系如下:   p和q都是质数;   N=p*q;   找一个1<e1<(p-1)(q-1),使得e1与(p-1)(q-1)互质;(互质的意思是两个数的最小公约数
窗户
2018/02/07
1.5K0
RSA
RSA算法 非对称加密算法的一种 随意选择两个大的质数p和q,p不等于q,计算N=pq。 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。 (d*e)%((p-1)(q-1))=1 将p和q的记录销毁。 以上内容中,(N,e)是公钥,(N,d)是私钥。 公钥对象转为String byte[] keyByte=(Key)publicKey.
Dean0731
2020/09/16
9160
RSA加密算法详解及例题
我这里就不对RSA的发明背景做介绍了,你只要知道RSA加密算法是非常非常重要的加密算法,放在现在的时代亦是如此。
全栈程序员站长
2022/07/01
1.7K0
RSA安全与秘钥基础设施
之前写过一篇对称加密与攻击案例分析,而对于非对称加密,虽然接触的时间不短了,但一直没有很系统的记录过。因此趁着国庆家里蹲的五天长假,就来好好回顾总结一下。
evilpan
2023/02/12
2K0
RSA安全与秘钥基础设施
RSA算法详解_warshall算法
RSA算法是1977年由Ron Rivest、Adi Shamir 和 Leonard Adleman三人组在论文A Method for Obtaining Digital Signatures and Public-Key Cryptosystems提出的公钥加密算法。由于加密与解密使用不同的秘钥,从而回避了秘钥配送问题,还可以用于数字签名。该算法的诞生很大程度上有受到了论文New Directions in Cryptography(由Whitfield Diffie和Martin Hellman两人合作发表)的启发,关于RSA诞生背后的趣事见RSA 算法是如何诞生的。
全栈程序员站长
2022/09/20
1.9K0
RSA加密算法是怎么回事?难懂吗?
RSA加密算法非常有名,在计算机领域的应用非常广泛,几乎是一般用户在信息加密时的首选。
叶锦鲤
2020/05/20
1.4K0
图解|什么是RSA算法
前阵子闲来无事看了会儿《数学之美》,其中第17章讲述了由电视剧《暗算》展开的密码学背后的一些数学原理。
五分钟学算法
2020/09/07
2.7K0
图解|什么是RSA算法
非对称加密技术- RSA算法数学原理分析
非对称加密技术,在现在网络中,有非常广泛应用。加密技术更是数字货币的基础。 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密。 但是对于其原理大部分同学应该都是一知半解,今天就来分析下经典的非对称加密算法 - RSA算法。 通过本文的分析,可以更好的理解非对称加密原理,可以让我们更好的使用非对称加密技术。 题外话: 并博客一直有打算写一系列文章通俗的密码学,昨天给站点上https, 因其中使用了RSA算法,就查了一下,发现现在网上介绍RSA算法的文章都写的太难理
Tiny熊
2018/06/21
1.6K0
RSA 非对称加密原理(小白也能看懂哦~)
RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P 、Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E < φ(N) E的取值必须是整数 E 和 φ(N) 必须是互质数 5 计算私钥D E * D % φ(N) = 1 - 6 加密 C = M E mod N C:密文 M:明文 7 解密 M =C D mod N C:密文 M:明文 公钥=(E , N) 私钥=(D, N) 对外,我们只暴露公钥。 示例 1、
java404
2018/05/18
6.4K2
技术分享 | 浅谈 RAS
一 首先介绍一下什么是RSA RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2×e1)≡1(mod(p-1)×(q-1))。 (n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥,(n,e2)为私钥。 RS
安恒网络空间安全讲武堂
2018/02/06
2.1K0
技术分享 | 浅谈 RAS
五分钟知识科普:什么是 RSA 算法
RSA 是 1977 年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。
五分钟学算法
2019/06/18
1.8K0
现代密码系列:RSA密码详解
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法
红客突击队
2022/09/28
3.5K0
现代密码系列:RSA密码详解
相关推荐
RSA常见解题思路及技巧
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文