普通的RSA系统,在生成密钥时使用两个大素数,以它们的乘积作为模。本文介绍一种PKCS#1 V2.1中描述的“多素数RSA系统”,它可以使用超过两个素数的乘积作为模。
多素数RSA密钥产生算法如下:
1. 生成k个素数p 1, p 2, …, p k 2. 求k个素数的乘积n=∏p i, i=1,2,…,k 3. 求Euler函数值φ(n)=∏(p i-1) 4. 选择指数e, 使得gcd(e,φ(n))=1 5. 求指数d=e -1 mod φ(n) 6. 输出公钥(e,n)和私钥(d,n)
多素数RSA加密和解密算法与普通RSA的相同:
加密 c=m e mod n 解密 m=c d mod n
例如,在三素数RSA系统中,设p
1=3,p
2=7,p
3=13,则
n=3×7×13=273,φ(n)= 2×6×12=144,选择e=5,推出d=29。 得到公钥为(5,273),私钥为(29,273)。 设明文为m=18,则加密过程为 c= m e mod n=18 5 mod 273=135, 解密过程为 m= c d mod n =135 29 mod 273=18
显然,要达到相同的密钥位数(模的位数),多素数RSA系统比普通RSA系统所需要的素数要小。因此,多素数RSA算法的优点主要表现在两个方面:
1. 能够减少生成密钥的计算量。 2. 应用孙子定理(中国剩余定理),能够减少解密、签名的计算量。
另一方面,素因子越小,大数分解就越容易。RSA实验室公布的数据显示,使用的素数越多,RSA强度越低。下表列出了攻破2至多素数RSA系统所需要的运算量(单位:MIPS·年)。
可见,多素数RSA系统还是具有一定实用价值的。在实际应用中,采取普通还是多素数RSA系统,应视具体情况而定。
[相关资源]
|