Crypto-RSA:公钥指数e攻击
公钥指数e的相关攻击
1.小公钥指数攻击
可攻击特征:
e 特别小,比如 e 为 3。
加密分析:
e=3, 公钥中的加密指数e很小,但是模数n很大
有RSA加密公式: C=M^e % n (C密文,M明文)
则:
当M^e < n 时,
C = M^e ,所以对C开方就能得到M当M^e > n 时,此时用爆破的方法
假设我们 M^e / n 的商为 k 余数为C,
则M^e = kn + C,对K进行爆破,只要k满足 kn + C能够开e次方就可以得明文
exp:
1 | from gmpy2 import iroot |
2.小公钥指数攻击之Rabin 算法:
可攻击特征:
Rabin 算法的特征在于 e=2(并且一个密文可以对应多个明文)
攻击原理:
如果p,q是形为4k+3的不同素数(p≡q≡3(mod4)
),则
解题脚本:
1 | c = int(open('flag.enc','r').read().encode('hex'),16) |
三个素数的rabin:
1 | #n是因数的集合[p,q,r] |
3.低加密指数广播攻击:
介绍
如果选取的加密指数较低,并且使用了相同的加密指数给一个接受者的群发送相同的信息,那么可以进行广播攻击得到明文。选取了相同的加密指数 e(这里取 e=3),对相同的明文 m 进行了加密并进行了消息的传递,那么有:
c1 ≡ m^e mod n1
c2 ≡ m^e mod n2
c3 ≡ m^e mod n3
对上述等式运用中国剩余定理,在 e=3 时,可以得到:
cx ≡ m^3 mod n1n2n3
通过对 cx 进行三次开方就可以求得明文
1 | from xenny.ctf.crypto.modern.asymmetric.rsa.lowe_broadcast import attack |
4.离散对数求e
m ** e % n = c
1 | e = sympy.discrete_log(n,c1,m) |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
ValineDisqus