陳珍英
(福州英華職業學院,福建 福州 350018)
Whitefield與Martin Hellman在1976年提出了一個奇妙的密鑰交換協議,稱為Diffie-Hellman密鑰交換協議/算法 (Diffie-Hellman Key Exchange/Agreement Algorithm),通常稱作DH算法。這個算法的優勢在于正在安全通信的雙方可以用這個算法來確定對稱密鑰,然后可以用這個密鑰進行加密和解密。然而,經過一系列的經驗與實踐證明:這個密鑰交換協議(算法)只能用于密鑰的交換,而不能進行消息數據的加密和解密。所以,Diffie-Hellman是一種建立密鑰的方法,而不是加密方法。需要通信的雙方確定要用的密鑰之后,要使用其他對稱密鑰進行加密和解密消息。DH算法的有效性,多半依賴于計算離散對數的難度程度上。

圖1 DH算法協議過程
如何來理解“DH算法的有效性是基于計算離散對數的難度上”?首先要從它的協議過程來看。協議過程流程圖如下:到B的響應返回的消息后,利用已選擇的大數X,計算(gymod n)x=gxymod n。如此,A與B就共享了一個秘密的密鑰gxymod n。因此我們說DH算法是制造密鑰的算法(協議)。
在A、B對話中,作為攻擊者本身,能夠得到A、B之間通信的消息,它要計算出私密密鑰,必須計算出X、Y,但是單純只根據gxmod n,或者gymod n要求出X或者Y,是很復雜和困難的,這也說明了離散對數求解的困難度。
DH算法有兩個特征:(1)需要時才生成密鑰,縮短密鑰存儲時間過長,給攻擊者創造破解的時間和機會。
(2)密鑰交換無需預先存在基礎結構。
DH算法的不足:(1)無法知道雙方身份的任何信息。(2)易導致阻塞性攻擊,即計算的密集性過于頻繁,攻擊者請求大量的密鑰,受攻擊者花費較多的資源來計算無用的冪系數,而不是做真正地在做保護或加密工作。(3)沒有辦法防衛重演攻擊。(4)易受中間人攻擊。
針對DH算法的第一個不足,需要辯證地來看,無法知道雙方身份的任何信息其實在某種安全領域是需要的,目前匿名追蹤以及群簽名的發展是在保護發送方和接收方的身份信息。
而對于DH算法易受中間人攻擊的不足,理論上按兩個方向進行優化,一是純粹防止中間人攻擊,而是引入“第三者”作為“中間人”防止中間人攻擊。
對于純粹的中間人攻擊可如下簡單圖示:
圖1-1算法協議過程實現前提有兩個:
(1)A、B必須同時知道兩個大的質數n,g且(n-1)/2和(g-1)/2都是質數,這兩個數字都是公開的,都可被除A、B另外的人知道。
(2)A、B各自選擇的大數X、Y必須保密。在這個協議流程圖中可以看到,B收到A發送的消息后,利用已確定的大數Y,計算(gxmod n)y=gxymod n,同樣,A在得

圖2中間人攻擊過程轉換圖
圖2中的C稱之為第三方,C和A通信時充當B,和B通信時扮演A,A、B、C三方兩兩協商定義出了一個密鑰,然后C就可以竊聽、外傳甚至泄露通信消息和數據。
引入“中間人”防止中間人攻擊其實是DH的優化,而這個“中間人”是什么?怎么合理設定“中間人”,在文章后面會相繼闡述。
Oakley是一個密鑰交換協議,它允許認證過的雙方通過不安全的網絡交換秘鑰的一部分元素,這一過程是通過DH算法(Diffie-Hellmankeyexchange)來實現的。鑒于DH算法的不足,Oakley算法可以算是對其進行優化,特別是在阻止中間人攻擊上。Oakley使用三種不同的算法鑒別中間人攻擊:(1)數字簽名。(2)公開密鑰加密。(3)對稱密鑰加密。
針對洪泛攻擊時DH算法的脆弱性,Oakley算法采用了cookie程序機制來對抗阻塞攻擊,可以使A、B雙方協商一個全局參數集合;又可以用現時來抵擋重演攻擊。密鑰決定協議的三個組件是:(1)cookie交換(可選,無狀態)。( 2)Diffe-Hellman半密鑰交換。( 3)驗證。
Oakley的特點是在DH算法基礎上附加了一些加密算法如RSA算法、散列算法等。它是使用附加的算法加密來增加源密鑰的安全性。用于加密的源密鑰不僅要使用DH算法,還和通信雙方所使用的安全驗證的方法密切相關。
Oakley在Internet密鑰交換協議中使用廣泛。Internet密鑰交換協議IKE是早期的Oakley算法和SkEME的安全協議結合而成的綜合性協議,其中Oakley算法指定了密鑰交換的順序,并描述清楚提供的服務,SkEME協議則交代了密鑰交換的具體方法。
基于第三方簽名認證密鑰算法可以有效地防止中間人攻擊。其過程是:(1)生成并發送報文。(2)數據加密。(3)接收方利用報文進行身份驗證。(4)接收數據。(5)數據解密。
可以用以下幾張簡單的流程圖來描述基于第三方簽名認證過程:

圖3 生成報文并發送報文的流程

圖4加密過程

圖5解密過程

圖6生成報文并發送報文的流程
基于第三方簽名認證的密鑰交換算法是一種具有保密和鑒別能力的密鑰交換算法,在VPN網絡中有廣泛的應用。這種簽名算法相比于DH算法來說引入了“中間人”,這就是文章前面所提及的用“中間人”來防止“中間人”的做法。但是筆者認為,這個“中間人”是不是百分百的可信賴是值得探討的。在可認證的、可信任的信道中,“第三方”也就是所謂的“中間人”在安全性存在一定穩定信任域,但是如果中間人是存在于非認證的信道上呢?因此考慮到“中間人”的信任度,我們是用感知和經驗還是用可量化的方式進行刻畫?顯然,不能用感知和經驗,這個做法太冒險。而量化的方式換句話說就是用計算的方式從大量的數據中訓練出一個信任閾值,但是這個計算量涉及到數據分析的復雜度和計算量大的問題。當然,這也就成為了基于第三方簽名認證密鑰交換算法的一個缺點,因在保證安全和效率的前提下,最大可能地降低可信賴第三方的參與,依賴度越小影響力就越小,影響力越小安全系數就越高。
雖然引入公開密鑰加密的算法以及某些證書機制可以避免攻擊,但是算法仍是非常的復雜。為了解決這個問題,有人提出了SAKA協議,稱為簡單密鑰交換協議。該協議是基于DH算法的,這個協議也是可以抵抗中間人攻擊的。該協議雙方A、B預先共享一個密鑰P,同時系統使用兩個在DH中定義的公開參數g和n,n是一個大素數,在得出n之前需要進行素數檢測。該協議過程如下:
(1)使用預先定義的函數從密鑰P中得出兩個整數Q和 Q-1mod( n-1)
(2)A選擇一個隨機整數a,并且發給B:X=gaQmodn。
(3)B選擇一個隨機整數b,并且發給B:Y=gbQmodn。
(4)A計算K1=YaQ-1mod n=gabmod n
(5)B計算K2=Xb Q-1mod n=gabmod n
如此,A與B共享一個密鑰K=K1=K2,為了身份認證,A計算K1Qmod n發送給B,B計算K2Qmod n發送給A,A與B分別用Q-1對收到的值作指數進行運算,找出密鑰檢驗能否與自己所生成的密鑰相同,如果相同則相信彼此,否則就拒絕接收相應信息。如此,顯然可以防止中間人攻擊。
也有學者提出N-PAKE協議,即基于口令認證的密鑰交換協議。這種方法的基礎也是DH算法,N-PAK這種可證的兩方口令認證密鑰交換協議可以抵御服務器泄露攻擊和離線字典攻擊,當然也可以防止中間人攻擊。
密鑰的管理在整個安全協議中占據非常重要的作用,分為密鑰的分配和交換。而密鑰交換作為核心問題,必須在提高速度和解決各個算法弊端的基礎上不斷優化,一個有效的密鑰交換機制的實現應盡量引入密鑰的安全傳送和安全措施,不以犧牲存儲空間或者計算速度為代價的前提下,逐步提高安全性。
[1]劉志會.基于RSA密鑰交換算法的研究[D].遼寧工程科技大學,2005.
[2]方勇,周安民,劉嘉勇,蔡建.Oakley密鑰確定協議[J].計算機工程與應用,2003(24).
[3]王繼林,伍前紅,陳德人,王育民.匿名技術的研究進展[J].通信學報,2005( 2).
[4]項順伯,彭志平,柯文德.一種可證安全的口令認證密鑰交換協議[J].計算機工程,2013( 1).