今天和队友搞美赛模拟,就签了个到(其实是我太菜了),后边面向wp学习吧 QAQ。
Rank 77/717
Web
GameV4.0
一堆js文件,源码找注释,base64解码。
Misc
仔细找找
仔细观察会发现黑色背景部分有很多彩色小点,用ps打开调节亮度并调整视图可以看到flag。
Crypto
ezmath
1 | from Crypto.Util.number import* |
exp:
1 | # -*- coding:utf-8 -*- |
babyPHE(复现)
题目描述:Alice最近学习了一种新型加密模式,她想当可信第三方。然额,她发现生成密钥对时间太长了,她使用了固定的密钥对。有六个用户他们使用Alice的密码系统去进行加密,他们使用该系统悄悄的flag混合了。
Bob是Alice的男盆友,他不讲武德在密码系统中偷偷记录了六个用户生成密钥对时的服务器上的某个参数并想要尝试破译,但是他没有破译成功,于是将他有的信息悄悄的发送给了你。
你能恢复出这flag是什么吗
flag’s format : vnctf{ }
hint: 快速幂的消耗
附件1:cryptosystem.py
1 | from Crypto.Util.number import* |
附件2:server.py
1 | from Crypto.Util.number import* |
附件3:Bob_give_you_something
6个列表,数字分布于60-200之间
附件4:Bob_try_to_interactive
1 | What do you want to get? |
考察知识点:快速幂算法、侧信道攻击、同态加解密
思路:题目给了hint“快速幂的消耗”。而密码系统生成公私钥,是通过模幂运算(幂为私钥)进行,并且附件三刚好六个列表,和生成Bob请求6对公私钥相对应。猜测系统使用的是快速幂算法来生成公私钥,附件三则是快速幂算法计算时消耗的能量,这里类似于侧信道攻击,先要了解快速幂算法。
1 | def fastpower(a,b,n): |
从快速幂算法可以看出,如果幂的某一位是0,则运算步骤更少(消耗的能量少),为1则运算步骤更多。因此,基本可以确定,附件三为快速幂运算时消耗的能量,那么可以通过侧信道攻击来恢复私钥。要恢复私钥,需要确定能量消耗高低的阈值,可以通过找到最高值和最低值的中间值,在中间值附近爆破确定阈值。
私钥可以搞定,下一步就用私钥同态解密即可。推导过程:
exp:
1 | from Crypto.Util.number import * |