先复习下RSA公钥体系
RSA公钥体系的基本运算是模下指数幂运算,其解密思想是寻求模下逆元素。
假设甲方拟建立自己的RSA公钥体系,甲首先选取两个大素数p和q,并计算n=p*q.然后选取正整数e,使1<e<n且gcd(e,Φ(n))=1,最后求出e在模Φ(n)下的逆元素d,即ed ≡ 1 (mod Φ(n))。甲将(e,n)公开作为公钥,将d,p,q和(n)保密并用(d,n)作为私钥。
假设乙方需要将明文M用甲方的RSA公钥体系加密送给甲方,其中M是小于n的正整数。RSA加密算法如下:
- C = M e M^e Me mod n
- 甲方收到C后用RSA解密算法将C解密,M = C d C^d Cd mod n.
再复习下中国余数定理
因为本文中的小指数攻击使用到了中国余数定理
RSA小指数攻击
指数e或d的数值如果太小,则RSA将不安全,这就是RSA的小指数攻击。
案例一
如果甲乙同时选用了相同的指数e=2,而且所选的参数
n
A
n_A
nA和
n
B
n_B
nB恰巧互素,假设丙将同样的信息 M 送给甲乙两人,并用甲乙两人的公钥(2,
n
A
n_A
nA)和(2,
n
B
n_B
nB)对M进行加密后再传输,其中M<min{
n
A
n_A
nA,
n
B
n_B
nB},即丙将
C
A
C_A
CA =
M
2
M^2
M2 mod
n
A
n_A
nA送给甲,将
C
B
C_B
CB =
M
2
M^2
M2 mod
n
B
n_B
nB送给乙。
如果
C
A
C_A
CA 和
C
B
C_B
CB 被攻击者获得,且e,
n
A
n_A
nA,
n
B
n_B
nB是公开的,则攻击者可用如下步骤进行M的破解:
C
A
C_A
CA =
M
2
M^2
M2 mod
n
A
n_A
nA
C
B
C_B
CB =
M
2
M^2
M2 mod
n
B
n_B
nB
因为A对B取模的值为C,就等同于A和C在模B下是同余的。
也就是说A除以B的余数为C,等同于A-C除以B余数为0,也就是整除,也就是同余。
因此以上等同于:
M
2
M^2
M2 ≡
C
A
C_A
CA(mod
n
A
n_A
nA)
M
2
M^2
M2 ≡
C
B
C_B
CB(mod
n
B
n_B
nB)
然后根据中国余数定理,这里 n A n_A nA和 n B n_B nB恰巧互素,这个同余方程组中, M 2 M^2 M2是有唯一解的,具体的解法就省略了,就是按照上面中国余数定理求解即可。
这不能归功于第六感、高超的看盘技巧或者持之以恒的勇气。这是我坚信自己的判断的报酬,与聪明或虚荣没有关系。知识就是力量,力量无须畏惧谎言,即使这个谎言通过行情显示出来,但很快就会回到正轨。