迪菲-赫爾曼通過公共信道交換一個信息,就可以創建一個可以用於在公共信道上安全通信的共享祕密(shared secret)。
以下解釋它的過程(包括算法的數學部分):
最簡單,最早提出的這個協議使用一個素數p的整數模n乘法羣以及其原根g。下面展示這個算法,綠色表示非祕密信息, and紅色粗體表示祕密信息:
|
|
|
|
愛麗絲和鮑伯最終都得到了同樣的值,因爲在mod p下gab 和 gba相等。 注意a, b 和 gab = gba mod p 是祕密的。 其他所有的值 – p, g, ga mod p, 以及 gb mod p – 都可以在公共信道上傳遞。 一旦愛麗絲和鮑伯得出了公共祕密,他們就可以把它用作對稱密鑰,以進行雙方的加密通訊,因爲這個密鑰只有他們才能得到。 當然,爲了使這個例子變得安全,必須使用非常大的a, b 以及 p, 否則可以實驗所有gab mod 23 的可能取值(總共有最多22個這樣的值, 就算a和b很大也無濟於事)。 如果 p 是一個至少 300 位的質數,並且a和b至少有100位長, 那麼即使使用全人類所有的計算資源和當今最好的算法也不可能從g, p和ga mod p 中計算出 a。這個問題就是著名的離散對數問題。注意g則不需要很大, 並且在一般的實踐中通常是2或者5。
以下是一個更爲一般的描述:
- 愛麗絲和鮑伯寫上一個有限循環羣 G 和它的一個生成元生成元 g。 (這通常在協議開始很久以前就已經規定好;g是公開的,並可以被所有的攻擊者看到。)
- 愛麗絲選擇一個隨機自然數 a 並且將 ga mod p 發送給鮑伯。
- 鮑伯選擇一個隨機自然數 b 並且將 gb mod p 發送給愛麗絲。
- 愛麗絲 計算 (gb)a.
- 鮑伯 計算 (ga)b.
愛麗絲和鮑伯就同時協商出羣元素gab,他可以被用作共享祕密。(gb)a 和(ga)b因爲羣是乘法交換的。 (見冪.)
身份驗證
在最初的描述中,迪菲-赫爾曼密鑰交換本身並沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊。 一箇中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。而攻擊者可以解密(讀取和存儲)任何一個人的信息並重新加密信息,然後傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。
有很多種安全身份驗證解決方案使用到了迪菲-赫爾曼密鑰交換。當Alice和Bob共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名,也可以像MQV那樣簽名ga和gb;STS以及IPsec協議的IKE組件已經成爲了Internet協議的一部分;當Alice和Bob共享一個口令時,他們還可以從迪菲-赫爾曼算法使用口令認證密鑰協商,類似於ITU-T的建議X.1035。這已經被用作了G.hn的家庭網絡標準。