密码学 RSA密码体制
RSA算法概述
RSA加密算法于1977年由美国麻省理工学院的Ronal Rivest,Adi Shamir和Len Adleman三位年轻教授提出,并以三人的姓氏Rivest,Shamir和Adleman命名为RSA算法。这三位科学家荣获2002年度图灵奖,以表彰他们在算法方面的突出贡献。该算法利用了数论领域的一个事实,那就是虽然把两个大质数相乘生成一个合数是件十分容易的事情,但要把一个合数分解为两个质数的乘积却十分困难。合数分解问题目前仍然是数学领域尚未解决的一大难题,至今没有任何高效的分解方法。它无须收发双方同时参与加密过程,既可以用于保密也可以用于签名,因而非常适合于电子邮件系统的加密,互连网和信用卡安全系统。
公私匙生成算法
RSA的公私钥生成算法十分简单,可以分为五步:
(1)随机地选择两个大素数p和q,而且保密;
(2)计算n=pq,将n公开;
(3)计算ф(n)=(p-1)(q-1),对ф(n)保密;
(4)随机地选择一个正整数e,1<e<ф(n)且(e,ф(n))=1,将e公开;
(5)根据ed=1 mod ф(n),求出d,并对d保密。
公开密钥是由(e,n)构成,私有密钥由(d,n)构成。
加密算法
实体B的操作如下:
(1)得到实体A的真实公钥(e,n);
(2)把消息表示成整数m,0<m≤n-1;
(3)使用平方-乘积算法,计算C = Ek(m) = me mod n;
(4)将密文C发送给实体A。
解密算法
实体A接收到密文C,使用自己的私钥d计算m = Dk(C) = Cd mod n。 我们选择p=3,q=11,得到n=33,ф(n)=(p-1)(q-1)=2×10=20。由于7和20互质,故设e=7。对于所选的e=7,解方程7×d=1 mod 20,可以得到d=3。因此公钥为(7,33),私钥为(3,33)。 在我们的例子中,由于所选的p和q太小,破译当然很容易,我们的例子只是用来说明此算法的原理。对于明文SUZANNE,RSA的加密和解密过程如下表所示。