🫐WMCTF2023
2023-8-24
| 2023-8-29
0  |  0 分钟
type
status
date
summary
password
category
slug
icon
😳
被打击了,好难,怎么大家都会写,我怎么只会前两个简单的🥹🐷

🫣badprime

📑题目

 

🪄题解

 
k_bit非常小 =53bits,可以通过一元copper进行攻击

👀wp

 
 

🫣signin

📑题目

 

🪄题解

第一部分分解n

这里想到七月赛ezrsa,但是gift前16位没给出来,爆破前16位
但是又想到当时小师傅用hensel分解出的p,这里稍微改动一下,就可以分解出p。但是时间很长很长(最长试过半小时)
hensel
回溯
爆破

HNP问题

好巧哦刚学过
恢复secret
有另一个短向量 也在格上,此向量比目标向量还要短,总会出现在LLL后的第一行,目标向量总会出现在 L L L 后的第二行

👀wp

 

🫣welcomesigner1

📑题目

🪄题解

签名:Left-to-Right 算法
方法一:官方wp
(主要p10,11,具体算法)
📑
恢复RSA的私钥过程
  1. 收集故障签名对:攻击者需要收集一组足够数量的(消息,故障签名)对,这些对是通过进行故障注入攻击来获取的。
  1. 构建故障模型:攻击者需要确定故障模型,即在RSA的指数运算过程中注入故障的方式和位置。故障模型可以是一次性的随机字节故障,即将模数N的一个字节设置为随机值。
  1. 故障计算:攻击者利用收集到的故障签名对和故障模型,通过对故障签名进行分析和计算,恢复故障发生时的内部寄存器的值。这些值包括故障模数ˆN和故障平方的结果ˆB。
  1. 构建故障模数字典:攻击者根据故障模数ˆN的值构建一个故障模数字典,其中包含所有可能的故障模数候选项。
  1. 恢复私有指数:攻击者利用故障模数字典和故障计算的结果,通过使用中国剩余定理和解决离散对数问题的方法,恢复RSA的私有指数d的值。
攻击条件:已知 ,注⼊位置 j(可控)已知,错误模数 可分解或者是素数。自d低位爆破私钥 d’(d的低位) 首先计算
构造,方便开方运算
然后验证 R是否为⼆次剩余,是的话开根,开 j次
对两个根进⾏判断,舍弃其中的非⼆次剩余,这样解集永远只有两个。
判断方法:
notion image
然后计算
检查是否满足
结合copper,已知n 的1/4位数 d 的低位(p,q 512位,n 1024位,只需要爆破出d的低约300位) ,可以恢复p,q,d
爆破代码
Coppersmith攻击(已知d的低位攻击)
由d0低位,恢复p0低位,由po低位恢复p,q
脚本
 
方法二
等价表达
notion image
注入错误无影响部分:
错误签名(Right-to-Left 算法):
从低位爆破d
这里由于最开始有一步reverse(d)操作,所以整体逻辑上从l-1开始爆破

👀wp

方法一
 
 
 
 
 

🫣welcomesigner2

📑题目

🪄题解

 
签名:Right-to-Left 算法
notion image
方法一 (官方 ) 文献Perturbating RSA Public Keys
错误注入:
攻击条件:已知 ,注⼊位置 j(可控)已知,错误模数 可分解或者是素数。自d高位爆破私钥 d’(d的低位)d_ = (i << (length-j)) + d
(论文P8 4.3 Cryptanalysis)
计算S‘
验证,来判断爆破的d’是否正确
📌
d可能是1023bit,也可能是1024bit,所以先进行前8比特爆破,若check == sig_,则1024,否则1023bit
方法二
同上
其中j可自己控制,因此可以通过等式关系来爆破d通过生成d的函数可测试出dbits位数大多位于1023所以以生成位数为1023位的来爆破,并且是从高位开始

👀wp

方法一
 
 
 
 
📎 参考
 
 

🤔总结

 
🍃
好难,复现也好难,密码好难🥹🥹🥹🥹🥹
比赛复现
nssctf 2ndsage(格)
目录