信息安全工程师考点梳理(4):公钥加密安全性、RSA密码
2.5.1.4 公钥加密安全性
设M为明文,C为密文,E未公开密钥密码的加密算法,D为解密算法,Ke为公开的加密钥,Kd为保密的解密钥,每个用户都分配一对密钥,而且将所有用户的公开的加密Ke存入共享的密钥库PKDB。
再设用户A要把数据M安全保密地传送给用户B,我们给出以下三种通信协议:
1.确保数据的秘密性
发方:
① A首先查PKDB,查到B的公开的加密钥KeB。
② A用KeB加密M得到密文C: C=E(M,KeB)
③A发C给B。
收方:
① B接受C。
② B用自己的保密的解密钥KdB解密C,得到明文M=D(C,KdB)。
由于只有用户B才拥有保密的解密钥KdB,而且由公开的加密钥KeB,所以只有用户B才能获得明文M,其他任何人都不能获得明文M,从而确保了数据的秘密性。
然而这一通信协议却不能确保数据的真实性。这是因为PKDB是共享的,任何人都可以查到B的公开的加密钥KeB,因此任何人都可以冒充A通过发假密文C′=E(M′,KeB),来发假数据M′给B,而B不能发现。
为了确保数据的真实性,可采用下面的通信协议。
2.确保数据的真实性
发方:
① A首先用自己的保密的解密钥KdA解密M,得到密文C:C=D(M,KdA)。
② A发C给B。
收方:
① B接受C。
② B查PKDB,查到A的公开的加密钥KeA。
③ 用KeB加密C得到M=E(C,KeA)。
由于只有用户A才拥有保密的解密KdA,而且由公开的加密钥KeA在计算上不能推出保密的解密钥KdA,所以只有用户A才能发送数据A。其他任何人都不能冒充A发送数据M,从而确保了数据的真实性。
然而这一通信协议却不能确保数据的秘密性。这是因为PKDB是共享的,任何人都可以查到A的公开的加密钥KeA,因此任何人都可以获得数据M。
为了同时确保数据的秘密性和真实性,可将以上两个协议结合起来,采用下面的通信协议。
3.同时确保数据的秘密性和真实性
发方:
① A首先用自己的保密的解密钥KdA解密M,得到中间密文S:S=D(M,KdA)。
② 然后A查PKDB,查到B的公开的加密钥KeB。
③ A用KeB加密S得到最终的密文C:C=E(S,KeB)
④ A发C给B。
收方:
① B接受C。
② B用自己的保密的解密钥KdB解密C,得到中间密文S=D(C,KdB)。
③ B查PKDB,查到A的公开的加密钥KeA。用KeB加密S得到M=E(S,KeA)。
由于这一通信歇息综合利用了上述两个通信协议,所以能够同时确保数据的秘密性和真实性。具体地,由于只有用户A才用户保密的解密钥KeA,而且由公开的加密钥KeA在计算上不能推出保密的解密钥KdA,所以只有用户A才能正确进行发方的第①步操作,才能发送数据M。其他任何人都不能冒充A发送数据M,从而确保了数据的真实性。又由于只有用户B才拥有保密的解密钥KdB,而且,由公开的加密钥KeB在计算上不能推出保密的解密钥KdB,所以只有用户B才能正确进行收方的第②步操作,才能获得明文M,其他任何人都不能获得明文M,从而确保了数据的秘密性。
2.5.2 RSA密码
1978年美国麻省理工学院的三名密码学者R.L.Rivest,A.Shamir和L.Adleman提出了一种基于大合数因子分解困难性的公开密钥密码,简称为RSA密码。
2.5.2.1 基本的RSA密码体制:参数、加密算法、解密算法
① 随机地选择两个大素数P和q,而且保密;
② 计算n=pq,将n公开;
③ 计算φ(n)=(p-1)(q-1),对φ(n)保密;
④ 随机地选取一个正整数e,1<e<φ(n)且(e,φ(n))=1,将e公开;
⑤根据ed=1 mod φ(n),求出d,并对d保密;
⑥ 加密运算: C=Me mod n (2—42)
⑦解密运算:M=Cd mod n (2—43)
由以上算法可知,RSA密码的公开加密钥Ke=<n,e>,而保密的解密钥Kd=<p,q,d,φ(n)>。
说明:算法中的φ(n)是一个数论函数,称为欧拉(Euler)函数。φ(n)表示在比n小的正整数中与n互素的数的个数。例如,φ(6)=2,因为在1,2,3,4,5中与6互素的数只有1和5两个数。若p和q为素数,且n=pq,则φ(n)=(p-1)(q-1)。
例 2-2 令p=47,q=71,n=47×71=3337,φ(n)=φ(3337)=46×70=3220。选取e=79,计算d=e-1mod3220=1019mod3220。公开e=79和n=3337,保密p=47,q=71,d=1019和φ(n)=3220。
设明文M=688 232 687 966 668 3,进行分组,M1=688,M2=232,M3=687,M4=966,M5=668,M6=003。M1的密文C1=68879mod3337=1570,继续进行类似计算,可得最终密文
C=1570 2756 2091 2276 2423 158
如若解密,计算M1=15701019mod3337=688,类似地可解密还原出其他明文。
2.5.2.2 RSA密码体制的特点
RSA算法具有加解密算法的可逆性,加密和解密运算可交换,可同时确保数据的秘密性和数据的真实性。
2.5.2.3 RSA密码的安全性
只要合理地选择参数,正确地使用,RSA就是安全的。为了确保RSA密码的安全,必须认真选择RSA的密码参数:p和q要足够大并且p和q应为强素数(Strong Prime)。加密密钥和认证密钥选n为1042位,而平台根密钥和存储根密钥则选n为2048位。此外,还要注意以下参数的选择:
(1)e的选择
为了使加密速度快,根据“反复平方乘”算法,e的二进制表示中应当含有尽量少的1。一种办法是选择尽可能小的e,或选择某些特殊的e。
(2)d的选择
与e的选择类似,为了使解密速度快,希望选用小的d,但是d太小也是不好的。
(3)不要许多用户共同一个模数n