BUUCTF 每日打卡 2021-4-5
引言
出人意料的得到消息要被拉去打国赛(第十四届全国大学生信息安全竞赛-创新实践能力赛)了(一脸懵逼)
我还什么都没学呢(摸鱼)
嘛,不过被分到第二梯队大概也没抱什么希望吧(继续摸鱼)
害,说丧气话也改变不了什么,还是脚踏实地地慢慢进步吧
毕竟 Crypto手 在队里也是稀缺人才
我也是加把劲骑士!(doge)
RSA2
dp(dq) 泄露的题没做过,不过跟 dp, dq 泄露相比容易许多
首先,根据
dp≡dmod(p−1)dp \equiv d\space mod \space (p-1) dp≡d mod (p−1)
联想到
φ=(p−1)∗(q−1)\varphi = (p-1) * (q-1) φ=(p−1)∗(q−1)
那肯定就有人问了,你在 dp,dq 泄露中字母就没联想到 φ 呢?
对比 dp,dq 泄露和 dp(dq) 泄露的已知条件:前者已知 p,q,(n),(φ),dp,dq,cp, q, (n), (φ), dp, dq, cp,q,(n),(φ),dp,dq,c ;而后者已知 e,n,dp(dq),ce, n, dp(dq), ce,n,dp(dq),c
我们的目的是解出私钥 ddd ,或者 直接解出 cdc^{d}cd ,通过 m≡cdmodnm \equiv c^{d} \space mod \space nm≡cd mod n 来解出密文 mmm
而 RSA 加密算法中有很重要的一步
e∗d≡1modφe * d \equiv 1 \space mod \space \varphi e∗d≡1 mod φ
dp(dq) 泄露问题中已知 eee ,所以可以根据此式解出私钥 ddd
而 dp,dq 泄露问题中 eee 未知,于是采取解出 cdc^{d}cd 整体的策略
回到 dp,dq 泄露问题
因为
dp≡dmod(p−1)dp \equiv d\space mod \space (p-1) dp≡d mod (p−1)
所以 ∃k1∈Z,s.t.\exists\space k_{1} \in\mathbb{Z}, \space s.t.∃ k1∈Z, s.t.
dp=d+k1∗(p−1)dp = d + k_{1} * (p-1) dp=d+k1∗(p−1)
等式两边同时乘 eee 得
e∗dp=e∗d+k1∗e∗(p−1)(∗)e * dp = e * d + k_{1} * e * (p-1) \qquad \qquad (*) e∗dp=e∗d+k1∗e∗(p−1)(∗)
因为
e∗d≡1modφe * d \equiv 1 \space mod \space \varphi e∗d≡1 mod φ
所以 ∃k2∈Z,s.t.\exists\space k_{2} \in\mathbb{Z}, \space s.t.∃ k2∈Z, s.t.
e∗d=1+k2∗φ=1+k2∗(p−1)∗(q−1)e * d = 1 + k_{2} * \varphi = 1 + k_{2} * (p-1) * (q-1) e∗d=1+k2∗φ=1+k2∗(p−1)∗(q−1)
将此式中的 e∗de * de∗d 代入 ∗*∗ 式,得
e∗dp=1+k∗(p−1)e * dp = 1+k * (p-1) e∗dp=1+k∗(p−1)
其中 k=(p−1)∗(k1∗e+k2∗(q−1))∈Zk = (p-1) * (k_{1} * e + k_{2} * (q - 1)) \space \in\mathbb{Z}k=(p−1)∗(k1∗e+k2∗(q−1)) ∈Z
由 dp≡dmod(p−1)dp \equiv d\space mod \space (p-1)dp≡d mod (p−1) 可知,
dp<(p−1)<pdp < (p-1) < p dp<(p−1)<p
故
e>ke > k e>k
所以,只要我们使 kkk 遍历 eee 的取值就能求出 ppp ,进而求出 φ\varphiφ ,再对 eee 求关于 φ\varphiφ 的逆元,就能求出私钥 ddd 进行解密
实现代码如下:
from Crypto.Util.number import *e = 65537
n = 248254007851526241177721526698901802985832766176221609612258877371620580060433101538328030305219918697643619814200930679612109885533801335348445023751670478437073055544724280684733298051599167660303645183146161497485358633681492129668802402065797789905550489547645118787266601929429724133167768465309665906113
dp = 905074498052346904643025132879518330691925174573054004621877253318682675055421970943552016695528560364834446303196939207056642927148093290374440210503657
c = 140423670976252696807533673586209400575664282100684119784203527124521188996403826597436883766041879067494280957410201958935737360380801845453829293997433414188838725751796261702622028587211560353362847191060306578510511380965162133472698713063592621028959167072781482562673683090590521214218071160287665180751for k in range(1, e):p = (e*dp-1) // k +1q = n // pif (n - p*q) == 0:break
print(p, q)
phi = (p-1) * (q-1)
d = inverse(e, phi)
print(d)
m = pow(c, d, n)
print(long_to_bytes(m))
得到 flag{wow_leaking_dp_breaks_rsa?_98924743502}
RSA
打开 pub.key 文件,看到前缀后缀就知道是 SSL 证书格式
用解密网站:http://ctf.ssleye.com/pub_asys.html
得到 n 和 e
尝试用 http://factordb.com/ 网站爆破:
没有结果
emmm…
再用 sagemath 爆破:
花了一点时间
这样,我们得出了 p, q, n, e,然后就可以开始解密。。。
嗯???
密文呢?
解压之后的文件里面还有一个 flag.enc 文件,密文应该就在里面
但是打开文件
一堆乱码是什么鬼?
用 python 读取文件:
with open(r"D:\BUUCTF\Crypto\RSA(1)\0eaf8d6c-3fe5-4549-9e81-94ac42535e7b\flag.enc", "rb") as f:f = f.read()
print(f)
得到一串 bytes :b’A\x96\xc0YJ^\x00\n\x96\xb8x\xb6|\xd7$y[\x13\xa8\xf2\xcaT\xda\x06\xd0\xf1\x9c(\xbeh\x9bb’
bytes_to_long 之后应该就是密文了
解密代码如下:
from Crypto.Util.number import *n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
e = 65537
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463phi = (p-1) * (q-1)
d = inverse(e, phi)
print(d)with open(r"D:\BUUCTF\Crypto\RSA(1)\0eaf8d6c-3fe5-4549-9e81-94ac42535e7b\flag.enc", "rb") as f:f = f.read()
print(f)
c = bytes_to_long(f)
print(c)m = pow(c, d, n)
print(long_to_bytes(m))
这是我参考了大佬的建议自己写的版本
结果如下:
高亮处即为 flag ,但是有一堆 padding
然后是另一个参考了 wp 的版本:
from Crypto.Util.number import *
import rsan = 86934482296048119190666062003494800588905656017203025617216654058378322103517
e = 65537
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463phi = (p-1) * (q-1)
d = inverse(e, phi)
print(d)
key = rsa.PrivateKey(n, e, int(d), p, q)with open(r"D:\BUUCTF\Crypto\RSA(1)\0eaf8d6c-3fe5-4549-9e81-94ac42535e7b\flag.enc", "rb") as f:f = f.read()print(rsa.decrypt(f, key))
结果如下:
属实恶心人
结语
作业肝完了,假期也结束了
感觉什么都没干啊啊啊啊啊啊啊啊
希望能坚持
BUUCTF 每日打卡 2021-4-5相关推荐
- BUUCTF 每日打卡 2021-8-18
引言 之前这段时间一直在打比赛.写文章,没时间更新 关于之前说的关于Wiener's Attack的完整推导,详见我的知乎文章 [InCTF 2021]Gold_digger 加密代码如下: impo ...
- BUUCTF 每日打卡 2022-1-16
引言 填坑 [羊城杯 2020]Power 加密代码如下: from Crypto.Util.number import * import gmpy2 from secret import flagp ...
- BUUCTF 每日打卡 2021-5-6
引言 五一假期全鸽了... 果然当鸽子会上瘾... 假期前一天晚上留了半小时搞这道 RSA & what ,结果搞到凌晨把我心态搞崩了 然后就鸽了... 今天终于搞出来了 RSA & ...
- BUUCTF 每日打卡 2021-4-14
引言 今日无战事 这是base?? 附件内容: dict:{0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U' ...
- BUUCTF 每日打卡 2021-4-28
引言 数分考完了 明天蓝帽杯 可怜的RSA 附件给了公钥: -----BEGIN PUBLIC KEY----- MIIBJDANBgkqhkiG9w0BAQEFAAOCAREAMIIBDAKCAQM ...
- BUUCTF 每日打卡 2021-7-19
引言 上午学了4个小时车,只能下午来更了( [NPUCTF2020]认清形势,建立信心 加密代码如下: from Crypto.Util.number import * from gmpy2 impo ...
- BUUCTF 每日打卡 2021-4-13
引言 又是昏昏沉沉的一天 密码学的心声 题目描述如下: 附件内容: 从歌词可知,这是八进制加密,要用 ascii 码解密 尝试把全部内容八进制转十进制解密: from Crypto.Util.numb ...
- 电动力学每日一题 2021/10/23 载流板产生的电磁场
电动力学每日一题 2021/10/23 载流板产生的电磁场 载流板的辐射 载流板的辐射 先验证电荷守恒: ∂ρ∂t=−∇⋅J=−∂∂zJz=0\frac{\partial \rho}{\partial ...
- 电动力学每日一题 2021/10/15 Fourier变换法计算均匀电流密度产生的磁场
电动力学每日一题 2021/10/15 Fourier变换法计算均匀电流密度产生的磁场 无限长均匀电流 无限长圆柱面均匀电流密度 无限长均匀电流 假设z轴上有一根非常细的电线,携带均匀电流I0I_0I ...
最新文章
- 在Spring Boot使用H2内存数据库
- mysql 64位 8.0.11_mysql8.0.11 在windows64安装 步骤
- linux部分基础命令总结,Linux常用基础命令总结
- 关于JAVA中的synchronized,一段不错的解释...
- 简单的线程同步问题:两个线程交替执行N次【Synchronized、Lock、ArrayBlockingQueue】...
- mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting
- PHP回顾之多进程编程
- Activiti流程定义部署、删除
- MonoMac 1.0正式发布
- Eclipse离线安装包下载地址
- 【转存】游戏中常用术语
- quartus频率计 时钟设置_FPGA021 基于QuartusⅡ数字频率计的设计与仿真
- 电影周周看——适合新手学习的微信小程序
- 微信小程序--订单查询页面
- 基于springboot+vue的食疗系统
- [Openstack]一键安装Openstack测试环境
- MapX和MapXtreme区别
- 【Mybatis框架】初识Mybatis
- Spring事务管理(应对面试)
- Visual Studio 2017 卸载 以及 Visual Studio 2010 安装
热门文章
- 替换请求输出文件和日志文件
- Json及Jsoncpp开源库的应用
- linux monitor 命令,Process Monitor(简称Procmon)发布Linux版,附使用方法
- 1、关于douyin 小红书等平台 人均985 211的想法
- 爬虫Traceback (most recent call last):异常
- android 仿微信视频压缩上传,iOS视频压缩(仿微信录像)
- 微信小程序开发之——仿微信视频录制上传
- mysql主从配置duxi_DUX主题
- LLRB——红黑树的现代实现
- vue搜索(不区分大小写)通用