信息安全工程師考點(diǎn)梳理(4):公鑰加密安全性、RSA密碼
2.5.1.4 公鑰加密安全性
設(shè)M為明文,C為密文,E未公開(kāi)密鑰密碼的加密算法,D為解密算法,Ke為公開(kāi)的加密鑰,Kd為保密的解密鑰,每個(gè)用戶(hù)都分配一對(duì)密鑰,而且將所有用戶(hù)的公開(kāi)的加密Ke存入共享的密鑰庫(kù)PKDB。
再設(shè)用戶(hù)A要把數(shù)據(jù)M安全保密地傳送給用戶(hù)B,我們給出以下三種通信協(xié)議:
1.確保數(shù)據(jù)的秘密性
發(fā)方:
① A首先查PKDB,查到B的公開(kāi)的加密鑰KeB。
② A用KeB加密M得到密文C: C=E(M,KeB)
③A發(fā)C給B。
收方:
① B接受C。
② B用自己的保密的解密鑰KdB解密C,得到明文M=D(C,KdB)。
由于只有用戶(hù)B才擁有保密的解密鑰KdB,而且由公開(kāi)的加密鑰KeB,所以只有用戶(hù)B才能獲得明文M,其他任何人都不能獲得明文M,從而確保了數(shù)據(jù)的秘密性。
然而這一通信協(xié)議卻不能確保數(shù)據(jù)的真實(shí)性。這是因?yàn)镻KDB是共享的,任何人都可以查到B的公開(kāi)的加密鑰KeB,因此任何人都可以冒充A通過(guò)發(fā)假密文C′=E(M′,KeB),來(lái)發(fā)假數(shù)據(jù)M′給B,而B(niǎo)不能發(fā)現(xiàn)。
為了確保數(shù)據(jù)的真實(shí)性,可采用下面的通信協(xié)議。
2.確保數(shù)據(jù)的真實(shí)性
發(fā)方:
① A首先用自己的保密的解密鑰KdA解密M,得到密文C:C=D(M,KdA)。
② A發(fā)C給B。
收方:
① B接受C。
② B查PKDB,查到A的公開(kāi)的加密鑰KeA。
③ 用KeB加密C得到M=E(C,KeA)。
由于只有用戶(hù)A才擁有保密的解密KdA,而且由公開(kāi)的加密鑰KeA在計(jì)算上不能推出保密的解密鑰KdA,所以只有用戶(hù)A才能發(fā)送數(shù)據(jù)A。其他任何人都不能冒充A發(fā)送數(shù)據(jù)M,從而確保了數(shù)據(jù)的真實(shí)性。
然而這一通信協(xié)議卻不能確保數(shù)據(jù)的秘密性。這是因?yàn)镻KDB是共享的,任何人都可以查到A的公開(kāi)的加密鑰KeA,因此任何人都可以獲得數(shù)據(jù)M。
為了同時(shí)確保數(shù)據(jù)的秘密性和真實(shí)性,可將以上兩個(gè)協(xié)議結(jié)合起來(lái),采用下面的通信協(xié)議。
3.同時(shí)確保數(shù)據(jù)的秘密性和真實(shí)性
發(fā)方:
① A首先用自己的保密的解密鑰KdA解密M,得到中間密文S:S=D(M,KdA)。
② 然后A查PKDB,查到B的公開(kāi)的加密鑰KeB。
③ A用KeB加密S得到最終的密文C:C=E(S,KeB)
④ A發(fā)C給B。
收方:
① B接受C。
② B用自己的保密的解密鑰KdB解密C,得到中間密文S=D(C,KdB)。
③ B查PKDB,查到A的公開(kāi)的加密鑰KeA。用KeB加密S得到M=E(S,KeA)。
由于這一通信歇息綜合利用了上述兩個(gè)通信協(xié)議,所以能夠同時(shí)確保數(shù)據(jù)的秘密性和真實(shí)性。具體地,由于只有用戶(hù)A才用戶(hù)保密的解密鑰KeA,而且由公開(kāi)的加密鑰KeA在計(jì)算上不能推出保密的解密鑰KdA,所以只有用戶(hù)A才能正確進(jìn)行發(fā)方的第①步操作,才能發(fā)送數(shù)據(jù)M。其他任何人都不能冒充A發(fā)送數(shù)據(jù)M,從而確保了數(shù)據(jù)的真實(shí)性。又由于只有用戶(hù)B才擁有保密的解密鑰KdB,而且,由公開(kāi)的加密鑰KeB在計(jì)算上不能推出保密的解密鑰KdB,所以只有用戶(hù)B才能正確進(jìn)行收方的第②步操作,才能獲得明文M,其他任何人都不能獲得明文M,從而確保了數(shù)據(jù)的秘密性。
2.5.2 RSA密碼
1978年美國(guó)麻省理工學(xué)院的三名密碼學(xué)者R.L.Rivest,A.Shamir和L.Adleman提出了一種基于大合數(shù)因子分解困難性的公開(kāi)密鑰密碼,簡(jiǎn)稱(chēng)為RSA密碼。
2.5.2.1 基本的RSA密碼體制:參數(shù)、加密算法、解密算法
① 隨機(jī)地選擇兩個(gè)大素?cái)?shù)P和q,而且保密;
② 計(jì)算n=pq,將n公開(kāi);
③ 計(jì)算φ(n)=(p-1)(q-1),對(duì)φ(n)保密;
④ 隨機(jī)地選取一個(gè)正整數(shù)e,1<e<φ(n)且(e,φ(n))=1,將e公開(kāi);
⑤根據(jù)ed=1 mod φ(n),求出d,并對(duì)d保密;
⑥ 加密運(yùn)算: C=Me mod n (2—42)
⑦解密運(yùn)算:M=Cd mod n (2—43)
由以上算法可知,RSA密碼的公開(kāi)加密鑰Ke=<n,e>,而保密的解密鑰Kd=<p,q,d,φ(n)>。
說(shuō)明:算法中的φ(n)是一個(gè)數(shù)論函數(shù),稱(chēng)為歐拉(Euler)函數(shù)。φ(n)表示在比n小的正整數(shù)中與n互素的數(shù)的個(gè)數(shù)。例如,φ(6)=2,因?yàn)樵?,2,3,4,5中與6互素的數(shù)只有1和5兩個(gè)數(shù)。若p和q為素?cái)?shù),且n=pq,則φ(n)=(p-1)(q-1)。
例 2-2 令p=47,q=71,n=47×71=3337,φ(n)=φ(3337)=46×70=3220。選取e=79,計(jì)算d=e-1mod3220=1019mod3220。公開(kāi)e=79和n=3337,保密p=47,q=71,d=1019和φ(n)=3220。
設(shè)明文M=688 232 687 966 668 3,進(jìn)行分組,M1=688,M2=232,M3=687,M4=966,M5=668,M6=003。M1的密文C1=68879mod3337=1570,繼續(xù)進(jìn)行類(lèi)似計(jì)算,可得最終密文
C=1570 2756 2091 2276 2423 158
如若解密,計(jì)算M1=15701019mod3337=688,類(lèi)似地可解密還原出其他明文。
2.5.2.2 RSA密碼體制的特點(diǎn)
RSA算法具有加解密算法的可逆性,加密和解密運(yùn)算可交換,可同時(shí)確保數(shù)據(jù)的秘密性和數(shù)據(jù)的真實(shí)性。
2.5.2.3 RSA密碼的安全性
只要合理地選擇參數(shù),正確地使用,RSA就是安全的。為了確保RSA密碼的安全,必須認(rèn)真選擇RSA的密碼參數(shù):p和q要足夠大并且p和q應(yīng)為強(qiáng)素?cái)?shù)(Strong Prime)。加密密鑰和認(rèn)證密鑰選n為1042位,而平臺(tái)根密鑰和存儲(chǔ)根密鑰則選n為2048位。此外,還要注意以下參數(shù)的選擇:
(1)e的選擇
為了使加密速度快,根據(jù)“反復(fù)平方乘”算法,e的二進(jìn)制表示中應(yīng)當(dāng)含有盡量少的1。一種辦法是選擇盡可能小的e,或選擇某些特殊的e。
(2)d的選擇
與e的選擇類(lèi)似,為了使解密速度快,希望選用小的d,但是d太小也是不好的。
(3)不要許多用戶(hù)共同一個(gè)模數(shù)n