close

 

原理

讓通信雙方在完全沒有對方任何預先資訊的條件下,透過不安全的通道進行密鑰協商以建立一個金鑰,此金鑰可以在後續的通訊中作為對稱金鑰來加密通訊內容。

DH密鑰至少需要2048 bit (見參考資料3),才能保證有足够的安全。

發送方和接收方設置相同的大數n和g,這兩個數不是保密的,他们可以通過非安全通道来協商这兩個質數,以下為協商方法:

發送方選擇一個大隨機整數x,計算**X = g^x mod n**,發送X给接收者
x: 發送方的私鑰
X: 發送方的公鑰

接收方選擇一個大隨機整數y,計算**Y = g^y mod n**,發送Y给接收者
y: 接受方的私鑰
Y: 接受方的公鑰

雙方計算密鑰: 由"自己的私鑰"和"對方的公鑰"計算密鑰
- 發送方密鑰為k1=Y^x mod n = (g^y mod n)^x mod n = g^(x+y) mod n
- 接收方密鑰為k2=X^y mod n = (g^x mod n)^x mod n = g^(x+y) mod n

其他人可以知道n、g、X和Y,但是他們不能計算出密鑰,除非他们能恢復x和y。

DH算法不能抵擋中間人攻擊,中間人可以偽造假的X和Y分别發送给雙方来獲取他們的秘密密鑰,所以需要保證X和Y的来源合法性。

參考資料

  1. 《openssl 编程》之 DH
  2. Is it possible to “hack” Diffie-Hellman by knowing the prime number and the generator parameters?
  3. 不能信任 1024 bit 的 DH 質數
arrow
arrow

    UCT 發表在 痞客邦 留言(0) 人氣()