DH密鑰交換算法


算法描述

DH 是 Diffie-Hellman的首字母縮寫,是Whitefield與Martin Hellman在1976年提出了一個的密鑰交換協議。該算法的唯一目的是使得兩個用戶能夠安全地交換密鑰,得到一個共享的安全密鑰,算法本身不能用於加解密。

算法的安全性基於求離散對數的困難性。

圖表示DH密鑰交換過程,其中p是大素數,a是p的本原根,p和a作為公開的全程元素。用戶A選擇一個保密的隨機整數XA,並將YA=a^XA mod p 發送給用戶B,類似地,用戶B選擇一個保密的隨機整數XB,並將YB=a^XB mod p 發送給用戶A,然后A和B分別由K=YB^XA mod p和K=YA^XB mod p 計算出的就是共享密鑰,這是因為

 (YB)^ XA mod = (a^XB modp)^ XA mod p = (a^XB)^ XA mod p = (a^XA) ^XB mod p    =(a^XA modp)^ XB mod p= (YA) ^XB mod p

 

由於XA和XB是保密的,而第三方只有pa、YB、YA可以利用,想要得到K,則必須得到XA,XB中的一個,只有通過取離散對數來確定密鑰,但對於大的素數p,計算離散對數是十分困難的。

例子:

假如用戶Alice和用戶Bob希望交換一個密鑰。

取一個素數p =97和97的一個原根a=5。

Alice和Bob分別選擇秘密密鑰XA=36和XB=58,並計算各自的公開密鑰:

YA=a^XA mod p=5^36 mod 97=50

YB=a^XB mod p=5^58 mod 97=44

Alice和Bob交換了公開密鑰之后,計算共享密鑰如下:

Alice:K=(YB) ^XA mod p=44^36 mod 97=75

Bob:K=(YA) ^XB mod p=50^58 mod 97=75 

安全性

當然,為了使這個例子變得安全,必須使用非常大的XA, XB 以及p, 否則可以實驗所有的可能取值。(總共有最多97個這樣的值, 就算XA和XB很大也無濟於事)。
如果 p 是一個至少 300 位的質數,並且XA和XB至少有100位長, 那么即使使用全人類所有的計算資源和當今最好的算法也不可能從a, p和a^(XA*XB) mod p 中計算出 XA*XB。
這個問題就是著名的離散對數問題。注意g則不需要很大, 並且在一般的實踐中通常是2或者5。
在最初的描述中,迪菲-赫爾曼密鑰交換本身並沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊
一個中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。
而攻擊者可以解密(讀取和存儲)任何一個人的信息並重新加密信息,然后傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。
有很多種安全身份驗證解決方案使用到了迪菲-赫爾曼密鑰交換。例如當Alice和Bob共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM