Diffie-Hellman密鑰交換算法及其優化

首次發表的公開密鑰算法出現在DiffieHellman的論文中,這篇影響深遠的論文奠定了公開密鑰密碼編碼學。由於該算法本身限於密鑰交換的用途,被許多商用產品用作密鑰交換技術,因此該算法通常稱之爲Diffie-Hellman密鑰交換。這種密鑰交換技術的目的在於使得兩個用戶安全地交換一個祕密密鑰以便用於以後的報文加密。
Diffie-Hellman密鑰交換算法的有效性依賴於計算離散對數的難度。簡言之,可以如下定義離散對數:首先定義一個素數p的原根,爲其各次冪產生從1 p-1的所有整數根,也就是說,如果a是素數p的一個原根,那麼數值
                  a mod p, a2 mod p, ..., ap-1 mod p
是各不相同的整數,並且以某種排列方式組成了從1p-1的所有整數。
對於一個整數b和素數p的一個原根a,可以找到惟一的指數i,使得
                  b = ai mod p     其中0 ≤ i ≤ (p-1)
指數i稱爲b的以a爲基數的模p的離散對數或者指數。該值被記爲inda ,p(b)
基於此背景知識,可以定義Diffie-Hellman密鑰交換算法。該算法描述如下:
1、有兩個全局公開的參數,一個素數q和一個整數aaq的一個原根。
2、假設用戶AB希望交換一個密鑰,用戶A選擇一個作爲私有密鑰的隨機數XA<q,並計算公開密鑰YA=aXA mod qAXA的值保密存放而使YA能被B公開獲得。類似地,用戶B選擇一個私有的隨機數XB<q,並計算公開密鑰YB=aXB mod qBXB的值保密存放而使YB能被A公開獲得。
3、用戶A產生共享祕密密鑰的計算方式是K = (YB)XA mod q。同樣,用戶B產生共享祕密密鑰的計算是K = (YA)XB mod q。這兩個計算產生相同的結果:
              K = (YB)XA mod q
                = (aXB mod q)XA mod q
                = (aXB)XA mod q                   (根據取模運算規則得到)
                = aXBXA mod q
                = (aXA)XB mod q
                = (aXA mod q)XB mod q
                = (YA)XB mod q
因此相當於雙方已經交換了一個相同的祕密密鑰。
4、因爲XAXB是保密的,一個敵對方可以利用的參數只有qaYAYB。因而敵對方被迫取離散對數來確定密鑰。例如,要獲取用戶B的祕密密鑰,敵對方必須先計算
               XB = inda ,q(YB)
然後再使用用戶B採用的同樣方法計算其祕密密鑰K
Diffie-Hellman密鑰交換算法的安全性依賴於這樣一個事實:雖然計算以一個素數爲模的指數相對容易,但計算離散對數卻很困難。對於大的素數,計算出離散對數幾乎是不可能的。
下面給出例子。密鑰交換基於素數q = 9797的一個原根a = 5AB分別選擇私有密鑰XA = 36XB = 58。每人計算其公開密鑰
                YA = 536 = 50 mod 97
                YB = 558 = 44 mod 97
在他們相互獲取了公開密鑰之後,各自通過計算得到雙方共享的祕密密鑰如下:
                    K = (YB)XA mod 97 = 4436 = 75 mod 97
                    K = (YA)XB mod 97 = 5058 = 75 mod 97
|5044|出發,***者要計算出75很不容易。 
下圖給出了一個利用Diffie-Hellman計算的簡單協議。
 
 
 
 
 
 
 
 
 
 
 
 
假設用戶A希望與用戶B建立一個連接,並用一個共享的祕密密鑰加密在該連接上傳輸的報文。用戶A產生一個一次性的私有密鑰XA,並計算出公開密鑰YA並將其發送給用戶B。用戶B產生一個私有密鑰XB,計算出公開密鑰YB並將它發送給用戶A作爲響應。必要的公開數值qa都需要提前知道。另一種方法是用戶A選擇qa的值,並將這些數值包含在第一個報文中。
下面再舉一個使用Diffie-Hellman算法的例子。假設有一組用戶(例如一個局域網上的所有用戶),每個人都產生一個長期的私有密鑰XA,並計算一個公開密鑰YA。這些公開密鑰數值,連同全局公開數值qa都存儲在某個中央目錄中。在任何時刻,用戶B都可以訪問用戶A 的公開數值,計算一個祕密密鑰,並使用這個密鑰發送一個加密報文給A。如果中央目錄是可信任的,那麼這種形式的通信就提供了保密性和一定程度的鑑別功能。因爲只有AB可以確定這個密鑰,其它用戶都無法解讀報文(保密性)。接收方A知道只有用戶B才能使用此密鑰生成這個報文(鑑別)。
Diffie-Hellman算法具有兩個吸引力的特徵:
1、僅當需要時才生成密鑰,減小了將密鑰存儲很長一段時間而致使遭受***的機會。
2、除對全局參數的約定外,密鑰交換不需要事先存在的基礎結構。
然而,該技術也存在許多不足:
1、沒有提供雙方身份的任何信息。
2、它是計算密集性的,因此容易遭受阻塞性***,即對手請求大量的密鑰。受***者花費了相對多的計算資源來求解無用的冪係數而不是在做真正的工作。
3、沒辦法防止重演***。
4、容易遭受中間人的***。第三方C在和A通信時扮演B;和B通信時扮演AAB都與C協商了一個密鑰,然後C就可以監聽和傳遞通信量。中間人的***按如下進行:
(1)B在給A的報文中發送他的公開密鑰。
(2)C截獲並解析該報文。CB的公開密鑰保存下來並給A發送報文,該報文具有B的用戶ID但使用C的公開密鑰YC,仍按照好像是來自B的樣子被髮送出去。A收到C的報文後,將YCB的用戶ID存儲在一塊。類似地,C使用YCB發送好像來自A的報文。
(3)B基於私有密鑰XBYC計算祕密密鑰K1A基於私有密鑰XAYC計算祕密密鑰K2C使用私有密鑰XCYB計算K1,並使用XCYA計算K2
(4)從現在開始,C就可以轉發A發給B的報文或轉發B發給A的報文,在途中根據需要修改它們的密文。使得AB都不知道他們在和C共享通信。
Oakley算法是對Diffie-Hellman密鑰交換算法的優化,它保留了後者的優點,同時克服了其弱點。
Oakley算法具有五個重要特徵:
1、它採用稱爲cookie程序的機制來對抗阻塞***。
2、它使得雙方能夠協商一個全局參數集合。
3、它使用了現時來保證抵抗重演***。
4、它能夠交換Diffie-Hellman公開密鑰。
5、它對Diffie-Hellman交換進行鑑別以對抗中間人的***。
Oakley可以使用三個不同的鑑別方法:
1、數字簽名:通過簽署一個相互可以獲得的散列代碼來對交換進行鑑別;每一方都使用自己的私鑰對散列代碼加密。散列代碼是在一些重要參數上生成的,如用戶ID和現時。
2、公開密鑰加密:通過使用發送者的私鑰對諸如ID和現時等參數進行加密來鑑別交換。
3、對稱密鑰加密:通過使用某種共享密鑰對交換參數進行對稱加密,實現交換的鑑別。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章