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