赛后向学长要的附件和wp,复现一手,算是加深对coppersmith的理解。
512RSA
tag:多轮AMM
task.py
1 | from Crypto.Util.number import * |
解析
e是p-1的一个因子,求$e * getPrime(300)$与$p-1$的最大公因数得到e,再用AMM算法解决
但这里我们遇到的是多轮加密,需要解4次
用AMM算法会产生很多种可能性
实际操作下来有
$2081·2539·2347·3413$种可能性
借助师傅们的文章
文章链接:crypto-AMM算法 - 先知社区 (aliyun.com)
有
那么只有满足这个式子的$c_3$才能进入下一步,经过筛选
每一次的可能性结果降到了个位数。
跟师傅交流后,说
”这题有个非常简单的解法,sagemath 10.x有限域开根秒出结果“
等最近安装arch和sagemath后研究一下
EXP
1 | # sagemath 9.3 |
2024
tag:entropy,熵,主动消除+coppersmith p高位泄露
task.py
1 | import random |
另一个附件链接
1 | 通过网盘分享的文件:flag1.enc |
解析
没看wp之前,因为测试过entropy最大范围在112位左右,想把hint的低112抹去减少entropy的影响,然后求p+q与n的方程式,得到高位p,最后coppersmith解p,但是没解出来(脚本如下)
1 | # 想用抹去低位来消除entropy的影响,但没出 |
1 | 初步鉴定solve_mod与roots求根的区别,没有mod,只是多项式,不是同余式 |
这里有未知数entropy来干扰我们通过hint获得p和q,经过测试entropy最大为110位(2^110),跟1024位的p相比算小,通过这个式子
两边同时乘上p得到
因为我们不知道entropy的值,那么忽略它会造成影响的位数(舍去121位以下)
举个例子
1 | p = 0b1001001 |
在这里,我们可以把small_roots()的参数尽量调高一些,$2178·entropy$理论最大值121位以上
解这个式子得到p的精确高位
再用coppersmith求值得到p
EXP
1 | # sagemath 9.3 |