DH 密鑰交換

迪菲-赫爾曼通過公共信道交換一個信息,就可以創建一個可以用於在公共信道上安全通信的共享祕密(shared secret)。

以下解釋它的過程(包括算法的數學部分):

Diffie–Hellman 密鑰交換

最簡單,最早提出的這個協議使用一個素數p整數模n乘法羣以及其原根g。下面展示這個算法,綠色表示非祕密信息, and紅色粗體表示祕密信息:

愛麗絲
祕密 非祕密 計算
  p, g  
a    
    ga mod p
   
  (gb mod p)amod p  
 
 
 
 
\rightarrow
\leftarrow
=
鮑伯
計算 非祕密 祕密
  p, g  
    b
   
gbmod p    
  (ga mod p)bmod p  
  1. 愛麗絲與鮑伯協定使用 p=23以及base g=5.
  2. 愛麗絲選擇一個祕密整數a=6, 計算A = ga modp併發送給鮑伯。
    • A = 56 mod 23 = 8.
  3. 鮑伯選擇一個祕密整數b=15, 計算B = gb mod p併發送給愛麗絲。
    • B = 515 mod 23 = 19.
  4. 愛麗絲計算s = B a mod p
    • 196 mod 23 = 2.
  5. 鮑伯計算s = A b mod p
    • 815 mod 23 = 2.

愛麗絲和鮑伯最終都得到了同樣的值,因爲在mod pgab 和 gba相等。 注意ab 和 gab = gba mod p 是祕密的。 其他所有的值 – pgga mod p, 以及 gb mod p – 都可以在公共信道上傳遞。 一旦愛麗絲和鮑伯得出了公共祕密,他們就可以把它用作對稱密鑰,以進行雙方的加密通訊,因爲這個密鑰只有他們才能得到。 當然,爲了使這個例子變得安全,必須使用非常大的ab 以及 p, 否則可以實驗所有gab mod 23 的可能取值(總共有最多22個這樣的值, 就算ab很大也無濟於事)。 如果 p 是一個至少 300 位的質數,並且ab至少有100位長, 那麼即使使用全人類所有的計算資源和當今最好的算法也不可能從gpga mod p 中計算出 a。這個問題就是著名的離散對數問題。注意g則不需要很大, 並且在一般的實踐中通常是2或者5。

以下是一個更爲一般的描述:

  1. 愛麗絲和鮑伯寫上一個有限循環羣 G 和它的一個生成元生成元 g。 (這通常在協議開始很久以前就已經規定好;g是公開的,並可以被所有的攻擊者看到。)
  2. 愛麗絲選擇一個隨機自然數 a 並且將 ga mod p 發送給鮑伯。
  3. 鮑伯選擇一個隨機自然數 b 並且將 gb mod p 發送給愛麗絲。
  4. 愛麗絲 計算 (gb)a.
  5. 鮑伯 計算 (ga)b.

愛麗絲和鮑伯就同時協商出羣元素gab,他可以被用作共享祕密。(gb)a 和(ga)b因爲羣是乘法交換的。 (見.)


身份驗證

在最初的描述中,迪菲-赫爾曼密鑰交換本身並沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊。 一箇中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。而攻擊者可以解密(讀取和存儲)任何一個人的信息並重新加密信息,然後傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。

有很多種安全身份驗證解決方案使用到了迪菲-赫爾曼密鑰交換。當Alice和Bob共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名,也可以像MQV那樣簽名gagbSTS以及IPsec協議的IKE組件已經成爲了Internet協議的一部分;當Alice和Bob共享一個口令時,他們還可以從迪菲-赫爾曼算法使用口令認證密鑰協商,類似於ITU-T的建議X.1035。這已經被用作了G.hn的家庭網絡標準。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章