Midnight Sun CTF2022
Pelle’s Rotor-Supported Arithmetic
解析:
求n
取c = -1,rot = 0。有如下公式(根据e * d = 1+k * φ(n)可知d为奇数)
$$
r = -1^d\ mod\ n
$$
因为d为奇数
$$
r = -1\ mod\ n
$$
又有
$$
n-1 = -1\ mod\ n
$$
所以
$$
n = r+1
$$求d
注意到
oracle()
主要是对d进行循环移位,故可以依次求出d的每一位。举个例子(借鉴来的):
- 假设d = 314159,向服务器询问两次,为(2,0)和(2,1)。
- 得到$r = 2^{314159}$和$s = 2^{141593}$。
- 然后为了构建等式,把上述式子转换成$2^{3141593}$,于是有$r^{10}*2^3 = s*2^{3*10^{6}}$。
- 显然,我们要求的是3,设其为x,6为d的长度,也是未知的,设其为len。故有一般式$r^{10}*2^x = s*2^{x*10^{len}}$。
- 根据测试发现len为307左右,可以进行枚举。
分解n
利用Wienner Attack脚本。
(没有环境复现,如有错误的地方请指出)
1 |
|
(嫖个脚本)
1 |
|
参考:
Midnight Sun CTF2022
http://example.com/2022/04/05/CTF/Midnight Sun CTF2022/