共模攻击的大前提就是,RSA体系在生成密钥的过程中使用了相同的模数n。
假设有一个通信系统中用RSA加密消息。首先生成了两个大质数P,Q,取得PQ乘积N。并且以N为模数,生成多对不同的公钥及其相应的私钥。将所有公钥公开,不同的人获得自己的私钥,比如,A获得了私钥d1,B获得了私钥d2.
某次用所有公钥加密了同一条信息M,也就是
c1 = m^e1%n
c2 = m^e2%n
此时A拥有密钥d1,他可以通过m = c1^d1%n
解密得到消息m
同时B拥有密钥d2,他可以通过m = c2^d2%n
解密得到消息m
如果此时有一个攻击者,同时获得了c1,c2,因为模数不变,以及所有公钥都是公开的,那么利用同模攻击,他就可以在不知道d1,d2的情况下解密得到消息m。
数学解析:
首先假设,e1,e2互质
即
gcd(e1,e2)=1
此时则有
e1s1+e2s2 = 1
式中,s1、s2皆为整数,但是一正一负。
通过扩展欧几里德算法,我们可以得到该式子的一组解(s1,s2),假设s1为正数,s2为负数.
因为
c1 = me1%n c2 = me2%n
所以
(c1s1 * c2s2)%n = ((me1%n)s1