这篇讨论一下中国剩余定理(Chinese Remainder Theorem),高斯算法(Gauss’s algorithm)解决同步线性同余(simultaneous linear congruences)的问题、简单的方法去解决小模数(small moduli)同余、RSA低加密指数广播攻击的原理(theorem to break the RSA algorithm when someone sends the same encrypted message to three recipients using the same exponent of e=3,又叫Johan Hastad广播攻击)
中国剩余定理 The Chinese Theorem
定理:有整数n1,n2,⋯,nr,gcd(ni,nj)=1,且i=j,那么线性同余系统
x≡c1(mod n1)
x≡c2(mod n2)
x≡c3(mod n3)
⋯
x≡cr(mod nr)
定理说有唯一解,并不是说如何去求解。这个通常使用高斯算法(Gauss’s algorithm)。中国剩余定理更多的时候是用在对RSA算法进行提速。
中国剩余定理在《孙子算经》中的问题是:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?在现代数论种我们把它写成解同余问题。
x≡2(mod 3)
x≡3(mod 5)
x≡2(mod 7)
高斯算法 Gauss’s algorithm
算法:有N=n1n2⋯nr那么
x≡c1N1d1+c2N2d2+⋯+crNrdr(mod N)
Ni=N/ni和di≡Ni−1(mod ni)
《孙子算经》的例子
《孙子算经》上面原始的中国剩余定理的题目有:
n1=3,n2=5,n3=7
N=n1n2n3=3×5×7=105
c1=2,c2=3,c3=2
N1=N/n1=105÷3=35 所以d1=35−1(mod 3)=2
N2=N/n2=105÷5=21 所以d2=21……−1(mod 5)=1
N3=N/n3=105÷7=15 所以d3=15−1(mod 7)=1 因此
x=(2×35×2)+(3×21×1)+(2×15×1)=233≡23(mod 105)
低加密指数广播攻击RSA Johan Hastad attack
Alice发送您相同的RSA加密消息m给三个接收方,使用了不同的模数n1,n2,n3,这些模数互质,但是他们使用了相同的指数e=3。Eve恢复出了密文值c1,c2,c3并且知道三个接收方的公钥(n,e=3)。Eve是否可以在不分解模数的情况下,恢复出消息?
可以。Eve使用高斯算法可以找到解x,在0≤x<n1n2n3范围内,
x≡c1(mod n1)
x≡c2(mod n2)
x≡c3(mod n3)
我们知道m3<n1n2n3,因此可以得到,x=m3,m可以通过简单的对整数x求立方根恢复出来。
例子
有三个接收方的公钥(87,3),(115,3)和(187,3),我们知道e=3并且
n1=29×3=87,n2=23×5=115,n3=17∗11=187
(实际使用中,会使用更大的N,不可以分解)
Alice使用RSA算法加密消息m=10给三个接收方,如下:
c1=103mod 87=43;c2=103mod 115=80;c3=103mod 187=65
这三个密文值c1,c2,c3被中间人Eve拦截,Eve知道公钥(ni,e)。她可以使用高斯算法如下:
N=n1n2n3=87×115×187=1870935
N1=N/n1=115×187=21505;d1=20505−1(mod 87)=49
N2=N/n2=87×187=16269;d2=16269−1(mod 115)=49
N3=N/n3=87×115=10005;d3=10005−1(mod 187)=2
x≡c1N1d1+c2N2d2+c3N3d3(modN)
x=(43×21505×49)+(80×16269×49)+(65×10005×2)=110386165≡1000(mod 1870935)
所以明文消息m是1000的立方根,m=10。所以Eve不需要对模数进行分解就可以恢复出明文消息。
如何防止以上的攻击
-
- 使用大指数,比如65537(0x10001)。这样使用上面的攻击方法将会变得很困难。
-
- 添加一些随机比特到消息中,至少64比特。确保每次消息加密都添加了不同的随机数。这种加盐的方法也可以防止许多其他的攻击。显然,接收方也需要知道如何在解密后去除填充的随机数。