此攻击方式是从rsa-least-significant-bit-oracle-attack 看到的,刚好用于Backdoor CTF的一道密码学的题目!
0x1 问题描述
假如用户知道公钥中$N,e,c$,并且可以任意构造密文$c_1$,返回此密文解密后$p_1$的末尾某些比特位的性质(记为函数$f$),求原始明文信息!
最简单的函数$f$ 是表示 $p_1$ 的奇偶性。
0x2 原理
攻击者得到密文$C=P^e(mod\ n)$ ,将其乘以$2^e(mod\ N)$, 并作为密文发送出去,若返回$f(2P)$
如果$f(2P)$ 返回的最后一位是0,那么$2P<N$,即$P<N/2$
如果$f(2P)$ 返回的最后一位是1,那么$2P>N$,即 $P>N/2$
接着我们来看看$2P$ 和 $4P$
如果返回的是(偶,偶),那么有 $P<N/4$
如果返回的是(偶,奇),那么有$N/4<P<N/2$
如果返回的是(偶,奇),那么有$N/2<P<3N/4$
如果返回的是(奇,奇),那么有$3N/4<P<N$
从这里基本上就可以找到规律了,如果我们循环下去,基本上就可以得到P所处在的空间。当次数不断叠加,最终所处在的空间将会十分的小,于是就可以解出对应的解!
0x3 方法
$P\in[0,P]$ 也即$LB=0$, $UB=N$
使用$log_2\ N$ 次可以根据密文$C$ 求解出明文$P$
$C'=(2^e\ mod\ N)*C$
|
|
0x4 实例
Backdoor CTF 2018 题目 BIT-LEAKER
service.py
|
|
solve.py
|
|
这道题有个问题,就是远程比较慢,所以可能需要很长时间!
另外就是算法的正确度不能保证,所以可能需要中途断开,多跑几次!
还有就是这个算法因为都是整除运算,导致的最终结果可能有一定误差!