2022 SUSCTF的两道半密码题WP
large case·
题目:https://paste.ubuntu.com/p/DcPKKSdT9y/
题目是个3-RSA,每个素数1024bits,即;未知,但可以知道是、和中各取一个因子做乘积(第一个assert
);在pad
前的长度为(第二个assert),在pad
后是(即与同量级,看pad
函数);flag
里含SUSCTF
(第三个assert)。
首先要解决的是的求值,先假设的三个分量为:,假设,推一下可得:
由于是的一个因子,那么就可以对于的每一个因子,先计算,然后检测是否为,若是的话则;当然,这样做的前提是可以分解,事实也确实可以分解(但其实接下来的做法需要是个较小的值,所以不用完全分解也行);和 也是同样的操作,最终得出、、。(其实解和时还有个的,但因为算时没有出现,且的三个分量都是素数,所以可以忽略,简单的逻辑推理-)
1 | fp = [2, 7, 757, 1709, 85015583, 149105250954771885483776047, 339028665499, 1642463892686572578602085475101104723805585678675707586553009837707279291648160744722745420570786735582631019452016654157586623543454908938807521637550223579103317696104438456966780396624343550451096013730928292041667133825444056448136643704677066463120079] |
然后要解决的第二个问题是,,即与是不互素的,即不能使用通过求逆算出私钥的方法来解,之前做过Elgamal的话就知道是经典AMM解法了,类似的解法,先以作例子:由于AMM不能解太大的指数,所以要先降低指数的规模,由于中,只有与是不互素的,所以可以通过求,把指数降到; 和 同理。
虽然上一步是把指数降下来了,但是还是太大了(反正我电脑跑了半天都还没出- -),需要优化一下,刚好题目里的大小的条件还没用。看一下pad
函数,是在message
后面pad\x00
,用公式来说就是,如果能把去掉的话刚好就不需要的分量,也就不用管了;去掉的方法就是RSA的CCA攻击:
另:这里”不需要的分量“的意思是,最后我是需要用CRT来合成的,如果只求了和的话,只能知道,回损失数据;但是如果我用求的话,由于比小,则不会损失数据。
最终代码(AMM抄了Arpe1s的代码):
1 | #sage |
(渣机跑了大概半小时- -)
InverseProblem·
题目:https://paste.ubuntu.com/p/fNYd2zZH6c/
题目挺短的,简单来看就是,是flag
,是已知矩阵(gravity
跑一次就出来了),已知(b.txt
),正常来说求个逆就可以拿了,但是,看一下b.txt
的话,是小数,输出是使用了科学计数法,有精度损失,所以问题转化为:,未知,经典LWE问题。
解的时候要注意和的元素都是小数,调LLL
需要整数,所以需要乘上一个大的,然后取整,即转化为:(大概这个意思,能看懂就好-)
最后代码(抄了之前博客写的代码)
1 | # sage |
手速够快,有幸三血(
SpecialCurve3 (1/3)·
题目:https://paste.ubuntu.com/p/tSGwsxRVYx/
题目是一个魔改的椭圆曲线,解ECDLP问题,给了三种情况,最后只解了一种;论文都找到了,就是不会写代码(逃
首先恢复一下曲线(虽然恢复了还没用到),看problem
函数里参数的选取可推曲线为:,还可以验算一下,add
里面计算的大概率是斜率(参考正常的ECC加法),那么P1==P2
情况下的就是通过求偏导得出的,验证一下曲线确实是,然后加法的结果好像是直线与直线的交点。
然后分别算下三条曲线下的群阶,在@Csome的帮助下得出了k=0
时群阶恒为p
的结论,然后瞎试了一下,最终得出:e1
的群阶是、e2
的群阶是、e3
的群阶是。
对应的三种情况其实(应该)就是这篇文章第四章里的三种情况:阶为的话好像可以把群同态到上;阶为的话是Smart攻击;阶为的话好像是Supersingular的攻击,但这里的话刚好可以分解成一堆小素数,就可以Pohlig-Hellman求解。
前两个不会改代码,只搞了最后一个:
1 | from Crypto.Util.number import * |
补充·
原来是圆锥曲线不是椭圆曲线,难怪一直没找到(:
前两种情况都在这里有说了
https://www.jiamisoft.com/blog/4068-yuanzhuiquxianjiamisuanfa.html
总结·
菜(: