N1CTF 2022 Crypto
今年n1ctf密码方向相比其他几个方向来说比较简单,没有离谱的论文题,都是些简单有趣的trick,想起来也挺久没写blog了,太摆了太摆了!
这里就把比赛时候大致思路写一下
Brand_new_checkin
题目思路其实很简单,只是在梅森伪随机数的状态旋转时需要做一定的分析简化爆破量
1 | def enc(m, k): |
由于s,t给了并且m是单字节,从0-255爆破一下就行
1 | m_enc=[] |
m解出后利用扩展欧几里得组一下指数把r(mod n)计算出来,注意到
我们可以计算一下
1 | [1, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1] |
我取的最后20组,2的分布较少,爆破量是
拟合我选择的是向前8位拟合,最后筛出了24组,再向前20位拟合得到正确的随机数状态回到最开始把a算出来,最后直接解密就行
1 | partS = recover_state(rn) |
Ezdlp
拿到了47组方程
由于在未知模数的情况下不能进行太大的幂次计算,所以利用一下LLL
造个格求x的线性组合的较小值,同时线性系数尽可能小
1 | mes=[] |
按照约化出的结果组一下,求gcd,最后丢factordb把靠近n的比特的值取了
到这里基本是秒出思路的,结果pollard p-1那卡了我好几个小时,我还寻思这量级pc应该跑不出才对啊,最后pollard p-1的基础上改改丢服务器上也就一个半小时,还行
1 | import sympy |
后面就求个离散对数,因为p-1光滑ph计算离散对数比较简单
1 | n=131158523227880830085100826212925738665356578827561846263073537503153187073136528966506785633847097997799377037969243883439723340886038624250936927221630287086602285835045356221763554989140952262353930420392663280482277832613695689454662506372252641564106136178637816827646124189347219273164844809807934422046441 |
Babyecc
关键在于利用椭圆曲线的表达式拼出一个关于m的高次多项式
一开始自己手动推的那个式子有点阴间,后面利用椭圆曲线的Division Polynomial比较简洁地表示了kG的坐标和G坐标的关系,这东西在复分析里有所体现有时间去学一手证明
利用这个关系最后得到7个12次的关于m的多项式,crt组一下
最后N在7000bits量级,12次的话利用coppersmith method就能算m
1 | ecc=[[172294871449219734798107561390050953188521804048922822821089133469311203282838373380377875439026704763161795744755842077098168865000919622849058673563093367982208461406754463061486548381031910500664522644112851433538900220678158500614358889303283424512500613989230182706150280378108198120547975067586971516137,96364198848848705158285537079110423277195642567952259110364340716064235491391751428297894031158531380770390132279773351908864500464136898214435682124920058680787844361038830281655403525413688733800204992965035715298006768830075744486662160034641936095862260725417156381782604284050422013822430528431227361197,159671991296677830056301471254363341009296510275785264872785778012113694456980363802313449256308519721141732376201460773400245993593482589976204166133901861729668851862460623196007194950257183079347864250025089670843915918257755173390253034175544519724905752818035812997127673241875836037243219829705927834235,12488950718303582218034044014469231718831962762275496002247643231013156969740771432142283441219754679322796472657777272189002660471344265360278317729760143808888761286079001687689905847842340334026140684913862478238950679283842053262939984135114755914484999538131508882930756717834516619580846526035684240079], |
总的来说n1虽然卡在了考试周,但是密码就三题,两天的比赛实际也就打了一天,还空出一个下午预习了一下没听课的概率论,挺好( ̄▽ ̄)
- Post title:N1CTF 2022 Crypto
- Post author:hash_hash
- Create time:2022-11-09 12:08:54
- Post link:https://hash-hash.github.io/2022/11/09/N1CTF-2022-Crypto/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.