Dynamic RSA
题目¶
Nowadays, clients just keep changing their requirements! They said e=65537 is too boring for RSA and that they wanted a dynamic encryption system instead. Oh, I'll give it to them!
Connect with nc litctf.live 31792
https://drive.google.com/uc?export=download&id=1JY3LfzcoIWUEhC0C8NuwO-fOwZnp3tKt
解题思路¶
-
已知经过 RSA 加密的 Flag 的密文及随机数种子/加密指数 \(e\)
-
可以与服务器进行两种交互
- 提供私钥,获得 Flag 密文的解密结果
- 提供任意消息,获得「消息+盐值」的加密结果
-
不过重点在函数
e_gen
以及gcd
。随机数种子已知,则可以求出test_e
。因为test_e
是质数,所以gcd(test_e, phi)
只有两种结果,要么是 \(1\),要么是test_e
。当gcd(test_e, phi)
的结果为test_e
时,new_e = 1
,此时密文与明文相同,可以确定phi
的其中一个因数。但显然,结果gcd(test_e, phi)
为 \(1\) 的情况更多 -
重写的函数
gcd
给出了每一步b // a
结果的奇偶性,因为第一步phi
的值未知,所以从第二步开始考虑,即gcd(phi % test_e, test_e)
。test_e
已知,phi % test_e
是小于test_e
的自然数,仅根据每一步b // a
结果的奇偶性是有一定概率能够确定phi % test_e
的。以 \(13\) 为例gcd
的计算结果如下,可见部分b // a
奇偶性结果序列与phi % test_e
有一对一映射关系 -
由此可利用中国剩余定理计算出
phi
,从而得出私钥d
Flag¶
LITCTF{0op5i3_dyn4m1c_n0t_gr3at_1t_s33m5}