题目和exp塞这里了。
NLFSR
改编自2018年的强网杯streamgame3,式子可以化简
(ao * bo) ^ (bo * co) ^ (bo * do) ^ co ^ do = (ao * bo) ^ (bo * (co ^ do)) ^ (co ^ do)
[把co ^ do 设为=>eo ] => (ao * bo) ^ (bo *eo )) ^ eo 这样子又只有三个寄存器了。
然后我们看一下关系
1234567891011121314 |
for ao in range(2): for bo in range(2): for eo in range(2): print ao,bo,eo,(ao*bo)^(bo*eo)^eo>>0 0 0 00 0 1 10 1 0 00 1 1 01 0 0 01 0 1 11 1 0 11 1 1 1 |
这样子,ao、eo 和输出有75%相同,这里可以用相关攻击。bo的话,爆破就好了。
这里说说自己对相关攻击的理解。线性反馈位移寄存器是用来生成密钥流的嘛,然后良好生成方式应该是输出的每一位为0和1的概率都应该是0.5,这里的lfsr应该也是比较良好的吧,俺猜的,有现题了,就懒狗了,没有做测试, 所以我们才有上面的表。
然后我们先爆破a,当ao和输出(不用全部输出啦,题目给的量有点大,随便来个1000位大概就好了)的75%相同时,大概就确定a了。
然后我们同时爆破c,d。当co^do 和输出的%75相同时,大概就确定c,d了。(出题人有良心,c 和 d 给的都比较短)
最后我们爆破b,把之前得到的a,c,d带入到加密程序,如果输出和题目给的输出完全相同就可了。(这次也不用测全部,来个50位,100位也就足够了。)
easyRSA
是2019年D3CTF common一题的一个part
直接用当时出题人给的题解exp, 换一换alpha的值,用解出来的phi求解私钥,解密密文,观察解密后的明文是否为flag就好
题做出来了,但其实原理并没有懂,是一个大坑,等俺哪天学会了再说哈哈哈哈哈
ECDH
NCCIP问题,直接构造出低阶点P(记录P的阶为N),然后发送给服务端,让他算出key,之后加密自己的输入,我们拿来异或自己的输入从而得到key,然后根据key的值(和P的关系)可以得到secret模N的一个剩余,即secret%N,多发送几个,最后来一波CRT就好。
具体步骤、细节俺会专门再写一篇。 在做了,在做了
Homomorphic
这道题俺其实连解密原理都没搞懂,自己对多项式还是不够了解熟悉,所以这题就本地搭好,然后测!就硬测!
经过测试,发现该算法如其名,具有加法同态。并且发送(1,1,1,1,,,,,,1)和(1,1,1,,,,,1)过去解密得到的明文的ascii值是0。
所以直接把服务端给的flag的所有密文(FLAG)(44对,88组多项式),每一对中每一组的每一个系数都减1,发送回去给服务端解密就好。然后index输入0(多项式的表达,列表里头好像第一个是常数,也就是我们要的m),得到一位flag的ascii码,44次交互得到flag。
没懂原理,测试出来的而已哈哈哈哈哈哈哈哈
感觉这是非预期,毕竟让我们交互2^10次,出题人应该是看了这篇paper,想让我们恢复私钥的吧哈哈哈哈哈哈哈哈。俺以后有空一定看,一定看 、
PS:badmonkey师傅好像是根据这个来的,恢复了私钥,TQL!!!
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可联系QQ 643713081,也可以邮件至 [email protected] - source:Van1sh的小屋
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论