攻防世界 crypto 入门题之easy_RSA

继续开启全栈梦想之逆向之旅~
这题是攻防世界crypto 入门题之easy_RSA
RSA的密码学听说了好久,主要是战队的队友之前有研究,而我却是一点都不了解,这次遇到了,就研究一下做题方法和技巧,密码学目前是不打算深究了,毕竟数学也不太好,所以我现在的目的就是懂得用对应的脚本来解这类RSA题。
附件下下来后就两行字:
看着都不难,但说实话我连RSA是什么都不知道,查了下百度,根据百度百科的说法:

RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制 [2] 。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK [2] 。
RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥 [4] 。


不知道你看不看得懂,反正我是大概看懂了,d通常是我们要求的。接下来就是重头戏了,RSA的脚本工具,查看官方admin的WP:
锁定了我要找的工具:

https://github.com/3summer/CTF-RSA-tool

kali虚拟机中直接git clone下载

这是python2编写的,2018年的脚本,按照要求搞好配置后开始研究这脚本在RSA中的利用,希望能解答大多数RSA题目:(PS:这里不得不吐槽一下,这个脚本工具里的sagemath配置搞了我将近一整天,最后还是搞不出来,其实安转好了,就是那个from sage.all_cmdline import *老是报错说没有sage.all_cmdline这个模块,百度等浏览器上的资料又少,没办法,只能放弃了)

首先看该脚本工具README.md中的说明了解一些参数的用法和大概控制流程(中英注释都写在那里了):

usage: solve.py [-h]
用法:solve.py[-h] (--decrypt DECRYPT | -c DECRYPT_INT | --private | -i INPUT | -g)
[--createpub] [-o OUTPUT] [--dumpkey] [--enc2dec ENC2DEC] [-k KEY] [-N N] [-e E] [-d D] [-p P] [-q Q] [--KHBFA KHBFA][--pbits PBITS]
[-v]
It helps CTFer to get first blood of RSA-base CTF problems  它有助于CTFer获得RSA基础CTF问题的第一滴血
-v, --verbose         print details     详细的打印细节optional arguments:可选参数(注意!!!这里之间只可选一个):
-h, --help            show this help message and exit       --帮助显示此帮助消息并退出--decrypt DECRYPT     decrypt a file, usually like "flag.enc"   解密文件,通常类似于“flag.enc”
(通常搭配k的.pem或.pub一起使用)-c DECRYPT_INT,
--decrypt_int DECRYPT_INT       解密长整形数--private             Print private key if recovered  打印私钥(如果已解密)-i INPUT       input a file with all necessary parameters (see examples/input_example.txt)
输入包含所有必要参数的文件(请参见示例/输入(示例.txt)-g, --gadget          Use some gadgets to pre-process your data first    使用一些小工具先预处理数据some gadgets:一些小工具预处理数据:--createpub           Take N and e and output to file specified by "-o" or just print it
获取N和e并输出到由“-o”指定的文件或者直接打印出来就行了-o OUTPUT, --output OUTPUT        输出      Specify the output file path in --createpub mode.
在--createpub模式下指定输出文件路径。--dumpkey             Just print the RSA variables from a key - n,e,d,p,q
只打印一个key-n、e、d、p、q中的RSA变量--enc2dec ENC2DEC     get cipher (in decimalism) from a encrypted file
从加密文件中获取密码(十进制)the RSA variables:RSA变量:Specify the variables whatever you got指定您得到的变量-k KEY,   pem file, usually like ".pub" or ".pem", and it begins with "-----BEGIN"
pem文件,通常类似于“.pub”或“.pem”,并以“-----BEGIN”开始-N N                  the modulus    模量-e E                  the public exponent 公共指数-d D                  the private exponent  私人指数-p P                  one factor of modulus 模量的一个因子-q Q                  one factor of modulus  模量的一个因子extra variables:额外变量:Used in some special methods 在一些特殊的方法中使用:--KHBFA KHBFA         use Known High Bits Factor Attack, this specify the High Bits of factor
使用已知的高位因子攻击,这指定因子高位--pbits PBITS         customize the bits lenth of factor, default is half of n`s bits lenth
自定义因子的位长度,默认值为n's比特长度

下面来看对应的解题例子,首先进入examples文件夹中打开input_example.txt

按照上面所说,多组n,e,c在解题时长这个样子:
可以看到特征真的就是多个n,e,c,甚至还有d,且不管这里的n,e,c是大还是小,长还是短,都列入多组n,e,c类型里。

继续看只有一组n,e,c的题目样式:

从这里可以看到一组,n,e,c里面甚至可以没有c,这里的n,e,c也不管大小,长短,这里最后一个hbop的解题要用到前面说得sagemath,这里暂且不说。

然后我们继续观察该脚本工具文件夹根目录下的example.txt,继续分析利用方式:
下面是该文档的内容:

# 只需要一组密钥的
# wiener_attack
python2 solve.py --verbose --private -i examples/wiener_attack.txt
# 或者通过命令行,只要指定对应参数就行了
python2 solve.py  --verbose --private -N 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597 -e 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619# factordb.com
python2 solve.py --verbose  -k examples/jarvis_oj_mediumRSA/pubkey.pem --decrypt examples/jarvis_oj_mediumRSA/flag.enc# Boneh and Durfee attack
# TODO: get an example public key solvable by boneh_durfee but not wiener# small q attack
python2 solve.py --verbose --private -k examples/small_q.pub# 2017强网杯线上赛 RSA 费马分解(p&q相近时)
python2 solve.py --verbose --private -i examples/closed_p_q.txt# Common factor between ciphertext and modulus attack
python2 solve.py --verbose -k examples/common_factor.pub --decrypt examples/common_factor.cipher# small e
python2 solve.py --verbose -k examples/small_exponent.pub  --decrypt examples/small_exponent.cipher# rabin method when e == 2
python solve.py --verbose -k examples/jarvis_oj_hardRSA/pubkey.pem --decrypt examples/jarvis_oj_hardRSA/flag.enc# Small fractions method when p/q is close to a small fraction
python2 solve.py --verbose -k examples/smallfraction.pub  --private# Known High Bits Factor Attack
python2 solve.py --verbose -i examples/KnownHighBitsFactorAttack.txt# 需要多组密钥的
# 第三届上海市大学生网络安全大赛--rrrsa d泄漏攻击
python2 solve.py --verbose -i examples/d_leak.txt# 模不互素
python2 solve.py --verbose -i examples/share_factor.txt# 共模攻击
python2 solve.py --verbose -i examples/share_N.txt# Basic Broadcast Attack
python2 solve.py --verbose -i examples/Basic_Broadcast_Attack.txt

按着顺序来:
1: 只需要一组密钥的
wiener_attack

python2 solve.py --verbose -i examples/wiener_attack.txt

2:或者通过命令行,只要指定对应参数就行了

python2 solve.py  --verbose --private -N 460657813884289609896372056585544172485318117026246263899744329237492701820627219556007788200590119136173895989001382151536006853823326382892363143604314518686388786002989248800814861248595075326277099645338694977097459168530898776007293695728101976069423971696524237755227187061418202849911479124793990722597 -e 354611102441307572056572181827925899198345350228753730931089393275463916544456626894245415096107834465778409532373187125318554614722599301791528916212839368121066035541008808261534500586023652767712271625785204280964688004680328300124849680477105302519377370092578107827116821391826210972320377614967547827619

3:factordb.com

python2 solve.py --verbose  -k examples/jarvis_oj_mediumRSA/pubkey.pem --decrypt examples/jarvis_oj_mediumRSA/flag.enc


4:Boneh and Durfee attack
TODO: get an example public key solvable by boneh_durfee but not wiener

无解

5:small q attack

python2 solve.py --verbose --private -k examples/small_q.pub

6:2017强网杯线上赛 RSA 费马分解(p&q相近时)

python2 solve.py --verbose -i examples/closed_p_q.txt

7:Common factor between ciphertext and modulus attack

python2 solve.py --verbose -k examples/common_factor.pub --decrypt examples/common_factor.cipher


这里乱码了,后期还要再改源代码,思路是先十六进制输出来。

8:small e

python2 solve.py --verbose -k examples/small_exponent.pub  --decrypt examples/small_exponent.cipher

8:rabin method when e == 2

python2 solve.py --verbose -k examples/jarvis_oj_hardRSA/pubkey.pem --decrypt examples/jarvis_oj_hardRSA/flag.enc


9:Small fractions method when p/q is close to a small fraction

python2 solve.py --verbose -k examples/smallfraction.pub  --private

呃,我这里报错了,这需要sage,我说了我搞不定。

10:Known High Bits Factor Attack

python2 solve.py --verbose -i examples/KnownHighBitsFactorAttack.txt

这个带0x的高指数更是需要sage,我也搞不定,复现不了。

11:需要多组密钥的
第三届上海市大学生网络安全大赛–rrrsa d泄漏攻击

python2 solve.py --verbose -i examples/d_leak.txt


12:模不互素

python2 solve.py --verbose -i examples/share_factor.txt

13:共模攻击

python2 solve.py --verbose -i examples/share_N.txt

14:Basic Broadcast Attack

python2 solve.py --verbose -i examples/Basic_Broadcast_Attack.txt

到这里我的工作基本就完成了,现在回头看看攻防世界的easy_RSA真的用脚本跑一下就行了,不过学问可当然不是这样做的,但是本人真的对密码学没啥子兴趣,所以只能研究下解题脚本了。

补充:单个n,e,c,q,p,的时候最好用单个参数输入的方式,不要用文本读取的方式,因为文本读取的时候DEBUG显示的十六进制的d有时并不是我们想要的,比如攻防世界这道easy_RSA:
文本输入(N是pq乘积):
而十六进制d:0x1be550de4f93c61L转换十进制出来却多出一个1,(标准答案应该是十进制的125631357777427553
才对)
这里我也搞不懂,还需要深究脚本源码,不过如果直接参数输入就没有这个DEBUG d问题,因为会直接显示出INFO信息,下面两个命令都可用,毕竟N=q*p,只用N也是可以的:

python2 CTF-RSA-tool/solve.py --verbose --private -N 2135733555619387051 -e 17
python2 CTF-RSA-tool/solve.py --verbose --private -N 2135733555619387051 -e 17 -p 473398607161 -q 4511491

结果:

这篇博客对你有什么用?其实对你没什么用,是写给我自己看的,当然你要是能从中提取到对自己有帮助的信息我也很欣慰。

攻防世界 crypto 入门题之easy_RSA相关推荐

  1. 攻防世界 crypto入门WP

    攻防世界 crypto入门WP 前言 下学期要求密码和Re,现在这俩几乎是空白,趁着暑假的功夫,最近也能闲下来,就学一学crypto,其实真正接触发现挺有意思的,各种密码的加密千奇百怪,层出不穷,也是 ...

  2. 攻防世界crypto高手题之wtc_rsa_bbq

    攻防世界crypto高手题之wtc_rsa_bbq 照例下载附件,第一次解压后还是压缩包,所以要经过两次解压: 解压后的文件夹内是一个两个文件,因为题目提示是RSA,而这两个看上去像是密文和密钥文件: ...

  3. 攻防世界逆向入门题之open-source

    攻防世界逆向入门题之open-source 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的open-source 下载附件得到源码: #include <stdio.h> #in ...

  4. 攻防世界逆向入门题之流浪者

    攻防世界逆向入门题之流浪者 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的流浪者 下载附件,照例扔入exeinfope中查看信息: 32位PE文件无壳,照例扔入ida32中查看伪代码: 是没 ...

  5. 攻防世界crypto高手题之best_rsa

    攻防世界crypto高手题之best_rsa 继续开启全栈梦想之逆向之旅~ 这题是攻防世界crypto高手题的best_rsa . . 下载题目,是一个明文和密钥的4个附件: . . 其实一开始我并不 ...

  6. 攻防世界逆向入门题之no-strings-attached

    攻防世界逆向入门题之no-strings-attached 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的no-strings-attached 下载附件: 扔入Exepeinfo中查壳和其 ...

  7. 攻防世界crypto高手题之sherlock

    攻防世界crypto高手题之sherlock 继续开启全栈梦想之逆向之旅~ 这题是攻防世界crypto高手题的sherlock . . (这里积累第一个经验) 下载附件,是一个txt文档,内容是一篇小 ...

  8. 攻防世界Misc入门题之掀桌子

    攻防世界Misc入门题之掀桌子 继续开启全栈梦想之逆向之旅~ 这题是攻防世界Misc入门题之掀桌子 题目是一串16进制数,因为只有0~f,不是base64,直接扔到十六进制转字符串: 好的,不知道转了 ...

  9. 攻防世界Misc入门题之坚持60s

    攻防世界Misc入门题之坚持60s 继续开启全栈梦想之逆向之旅~ 这题是攻防世界Misc入门题之坚持60s 下载附件,一开始我默认用压缩包对jar文件,搞到一解压出来还以为是某个游戏存档,后来才发现是 ...

最新文章

  1. 动态验证码制作(RandomCodeImage )
  2. win8.1怎么安装iis
  3. mysql分区表达式_怎么定义 mysql hash分区使用的用 户定义的表达式
  4. (组合数学笔记)格点路径问题分析求解
  5. Hello Quartz (第三部分)
  6. Expression Blend 2 September Preview is now available!(中文版)
  7. ICE专题:编译环境构建
  8. opencv4 图像特征匹配_openCV - 图像特征匹配
  9. SWUST OJ(953)
  10. 程序安全性之配置文件安全
  11. html添加好友界面,添加好友.html
  12. 希腊字母在Vim 中的输入方法
  13. 编程制作动态壁纸的思路_Android应用源码动态壁纸开发必看例子源码
  14. 中国政府数据开放许可协议(CLOD)研究
  15. 排除Transformation Errors
  16. 网上购车平台蛋蛋订车上私户兴起,汽车之家青少年嘉年华正式开幕
  17. 无人值守安装 linux 系统
  18. 【机器学习之LDA主题模型】
  19. Linux端NDS模拟器DeSmuME添加金手指
  20. 家常六菜一汤(蒜薹肉丝、凉拌黄瓜丝、红烧猪蹄、酸辣白菜、烤鸡翅、清蒸鲈鱼和鱼头豆腐汤)...

热门文章

  1. Java 线程安全与锁优化
  2. 微信小程序获取手机号登录流程(个人开发者账号不支持)
  3. 为什么要租服务器?自己买个放家里不行吗?
  4. 如何修改计算机设备的登录名称
  5. 20_clickhouse,硬件管理与优化(cpu,内存,网络,存储,操作系统配置),profile管理,Quotas设置,约束管理,查询权限,用户管理配置等
  6. 深度学习/神经网络PPt绘图工具
  7. python正则如何匹配中文汉字
  8. 叶绿体基因组四个区连接位点可视化(IRscope+另一个画图脚本)
  9. 三星首次更新Gear VR虚拟现实浏览器
  10. Google Play 商店现在可发布 PWA 应用