李家蘭 冼浪
【摘 要】密鑰交換是網絡通信用戶實現加密通信的基礎。D-H算法是迄今在網絡安全領域應用最為廣泛的密鑰交換算法,但其安全性面臨中間人攻擊的危害。傳統PGP體系利用RSA算法可實現基于公鑰證書加密的密鑰交換,但無法驗證發送者的真實身份。改進的密鑰交換算法采用數字簽名技術,可實現通信雙方的身份認證,提高了密鑰交換的安全性。
【關鍵詞】密鑰交換;D-H算法;PGP;身份認證
1 密鑰交換
兩個網絡通信用戶在采用對稱加密法實現保密通信時,首先必須共享一個秘密密鑰;為了防止攻擊者破獲,這個密鑰必須經常更新。這個在一次定長通話或交換定量數據時使用的密鑰,通常稱為會話密鑰。
會話密鑰產生的兩種形式是集中式生產和分散式生產。集中式生產,是由指定的密鑰產生中心(如密鑰分發中心KDC和證書分發中心CDC 等)集中生產密鑰,然后分發給系統內的用戶,其用戶數量受到算法所能提供的密鑰總數的限制,所以也稱有邊界生產;分散式生產,由使用者個人分散生產或由通信雙方協商產生,用戶數量不受限制,也稱無邊界生產。會話密鑰一般采用分散式生產,由用戶在公開的信道上協商建立,這個建立過程稱為密鑰交換。
2 D-H算法與中間人攻擊
分散式密鑰生產方式中最著名的是Diffie-Hellman密鑰交換算法,簡稱D-H算法。D-H算法是W.Diffie和M.Hellman于1976年提出的一個用于交換密鑰的公鑰密碼算法,已經在很多商業產品中得以應用。算法的目的是使得兩個或兩個以上用戶能夠在公開的信道上安全地交換數據,得到一個共享的會話密鑰,用于實現對稱加密通信,并能有效阻止攻擊者竊取該密鑰。D-H算法實現過程如下:
1)A和B預先協商一個大素數p及p的本原根a;
2)A產生隨機數x,計算M=ax mod p,然后把M發送給B;
3)B產生隨機數y,計算N= ay mod p,然后把N發送給A;
4)A計算k=Nx mod p;
5)B計算k'=My mod p。
因為k=Nx mod p=(ay mod p)x mod p=(ay)x mod p=(ax)y mod p=My mod p=k',所以A和B得到了相同的密鑰。而攻擊者要從p,a,M,N計算k,將需要解決求離散對數的問題,這是個著名的陷門單向函數,目前普遍認為無法通過窮舉之外的方法求解。
D-H算法的主要缺陷是容易受到中間人攻擊:
1)A發送公開值(a,p,M)給B,攻擊者C處于A和B的通信路徑之間,截獲這些值并把自己產生的公開值發送給B;
2)B發送公開值(N)給A,C截獲它然后把自己的公開值發送給A;
3)A和C計算出共享密鑰k1,B和C計算出共享密鑰k2;
4)A用密鑰k1給B發送消息,但實際上k1是A與C協商計算所得,C截獲消息后可用k1解密,同理C可用k2解密B發送給A的消息。C還可以篡改A、B之間的通信,甚至假冒其中一方同另一方通信。
可引入認證、時間戳、隨機標號等機制改進D-H算法,有效抵抗中間人攻擊。[1]
3 PGP體系實現密鑰交換
PGP(Pretty Good Privacy) 是Phil Zimmermann于1991年發布的一個基于RSA公鑰加密算法與IDEA對稱加密算法的開源的郵件加密體系[2]。PGP創造性地把RSA公鑰體系的方便和傳統加密體系的高速結合起來,成為最流行的公鑰加密軟件包。PGP對信息內容使用IDEA對稱加密,所以需要在收發雙方之間預先實現密鑰交換;而PGP的密鑰交換是利用RSA算法的公鑰加密實現的。傳統PGP體系的一般使用過程如下:
發送方A:
1)隨機生成新的會話密鑰k;基于k,用IDEA算法加密郵件信息m,得到m;
2)獲取接收方的RSA公鑰e;基于e,用RSA算法加密k,得到k=Ee(k);
3)將m| k一起發送給接收方。
接收方B:
1)用本方RSA私鑰d解密k,得到k=Dd(k);
2)用k解密郵件信息m,得到m。
在以上過程中,會話密鑰并非通過協商,而只是由發送方隨機生成;密鑰共享則是通過公鑰證書加密發送完成的,其安全性非常高,是基于RSA算法的破解難度的。但另一方面,接收方只能保證其郵件內容無法被竊取,但無法驗證發送者的真實身份,導致了接收方可能收到偽造的信息。
4 改進的密鑰交換算法
發送方A:
1)隨機生成新的會話密鑰k;基于k,用IDEA算法加密郵件信息m,得到m;
2)使用RSA算法,用本方私鑰da加密k,再用接收方的公鑰eb加密這個結果,得到k=Eeb(Eda(k));
3)將m|k一起發送給接收方。
接收方B:
1)用本方RSA私鑰db解密k,再用發送方公鑰ea解密這個結果,得到k=Dea(Ddb(k));
2)用k解密郵件信息m,得到m。
以上方案與本文第3節所描述的方案的區別是:在發送方的第2步中,要求其先用自己的私鑰da加密k,這就達到了數字簽名的效果;因為接收方可以根據權威的公鑰來源獲取證書的身份標識,從而通過驗證簽名確認發送者的真實身份。同時,k是經過接收方的公鑰加密所得,只有正確的接收方才能基于其私鑰實現解密,因此可防止中間人的竊聽與篡改。
以上方案在使用時,發送方A的第2步的加密順序不可倒換,即不可先加密再簽名,如k=Eda(Eeb(k))。否則,k被中間人C截取后,他可以使用發送方公鑰ea去除原簽名得到Eeb(k),即使他無法獲取真正的k,但可以生成自己的簽名k=Edc(Eeb(k)),繼續發送m| k給B;此時B將受到欺騙,認為m是C發出的。
改進的算法并不能解決所有的密鑰交換的安全問題,如接收者抵賴、信息重放及針對RSA算法的攻擊等。必須綜合使用各種安全策略,并對信息交互流程進行合理優化,才能盡可能地降低網絡通信中所遇到的各種風險。
【參考文獻】
[1]張珂.一種改進的抗攻擊密鑰協商協議研究[J].鄭州輕工業學院學報:自然科學版,2011(3):53-57.
[2]宋芬.安全電子郵件的相關協議和標準[J].微計算機應用,2006(5):546-549.
[責任編輯:鄧麗麗]