本頁使用了標題或全文手工轉換

迪菲-赫爾曼密鑰交換

維基百科,自由的百科全書
跳到: 導覽搜尋

迪菲-赫爾曼密鑰交換英語:Diffie–Hellman key exchange,縮寫為D-H) 是一種安全協定。它可以讓雙方在完全沒有對方任何預先資訊的條件下通過不安全信道建立起一個金鑰。這個金鑰可以在後續的通訊中作為對稱金鑰加密通訊內容。公鑰交換的概念最早由瑞夫·墨克Ralph C. Merkle)提出,而這個密鑰交換方法,由惠特菲爾德·迪菲Bailey Whitfield Diffie)和馬丁·赫爾曼Martin Edward Hellman)在1976年首次發表。馬丁·赫爾曼曾主張這個密鑰交換方法,應被稱為迪菲-赫爾曼-墨克密鑰交換英語:Diffie–Hellman–Merkle key exchange)。

迪菲-赫爾曼金鑰交換的同義詞包括:

  • 迪菲-赫爾曼金鑰協商
  • 迪菲-赫爾曼金鑰建立
  • 指數金鑰交換
  • 迪菲-赫爾曼協定

雖然迪菲-赫爾曼金鑰交換本身是一個匿名(無認證)的金鑰交換協定,它卻是很多認證協定的基礎,並且被用來提供傳輸層安全協定的短暫模式中的前向安全性

該協定的歷史[編輯]

迪菲-赫爾曼金鑰交換是在美國密碼學家惠特菲爾德·迪菲馬丁·赫爾曼的合作下發明的,發表於1976年。它是第一個實用的在非保護信道中建立共享金鑰英語Shared secret方法。它受到了瑞夫·墨克的關於公鑰分配工作的影響。約翰·吉爾英語John Gill (climber)John Gill)提出了離散對數問題的應用。該方案首先被英國GCHQ馬爾科姆·J·威廉森英語Malcolm J. Williamson(Malcolm J. Williamson)在稍早的幾年前發明,但是GCHQ直到1997年才決定將其公開,這時在學術界已經沒有了研究這個演算法的熱潮了。

這個方法被發明後不久出現了RSA,另一個進行公鑰交換的演算法。它使用了非對稱加密演算法

2002年,馬丁·赫爾曼寫到:

這個系統...從此被稱為「迪菲-赫爾曼金鑰交換」。 雖然這個系統首先是在我和迪菲的一篇論文中描述的,但是這卻是一個公鑰交換系統,是墨克提出的概念,因此如果加上他的名字,這個系統實際上應該稱為「Diffie–Hellman–Merkle金鑰交換」。我希望這個小小的講壇可以幫助我們認識到墨對公鑰密碼學的同等重要的貢獻。

The system...has since become known as Diffie–Hellman key exchange. While that system was first described in a paper by Diffie and me, it is a public key distribution system, a concept developed by Merkle, and hence should be called 'Diffie–Hellman–Merkle key exchange' if names are to be associated with it. I hope this small pulpit might help in that endeavor to recognize Merkle's equal contribution to the invention of public key cryptography. [1]

描述了這個演算法的美國專利 4,200,770,已經於1997年4月29日後過期,專利檔案表明了Hellman、Diffie和Merkle是演算法的發明者。

描述[編輯]

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

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

Diffie–Hellman 密鑰交換

最簡單,最早提出的這個協定使用一個質數p整數模n乘法群以及其原根g。下面展示這個演算法,綠色表示非秘密資訊, 紅色粗體表示秘密資訊:

愛麗絲
秘密 非秘密 計算
p, g
a
ga mod p
(gb mod p)a mod p
=
鮑伯
計算 非秘密 秘密
p, g
b
gb mod p
(ga mod p)b mod p
  1. 愛麗絲與鮑伯協定使用 p=23以及base g=5.
  2. 愛麗絲選擇一個秘密整數a=6, 計算A = ga mod p並行送給鮑伯。
    • 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.

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

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

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

愛麗絲和鮑伯就同時協商出群元素,它可以被用作共享秘密。因為群是乘法交換的。 (見.)

圖示[編輯]

下面的圖示可以方便你理解每個資訊都只有誰知道。(伊芙是一個竊聽者——她可以看到愛麗絲和鮑伯的通訊內容,但是無法改變它們)

  • Let s = 共享金鑰。 s = 2
  • Let a = 愛麗絲的私鑰。如 a = 6
  • Let A = 愛麗絲的公鑰。如 A = ga mod p = 8
  • Let b = 鮑伯的私鑰。如 b = 15
  • Let B = 鮑伯的公鑰。如 B = gb mod p = 19
  • Let g = 公共原根。如 g=5
  • Let p = 公共質數. 如 p = 23
愛麗絲
知道 不知道
p = 23
base g = 5
a = 6
b = 15
A = 56 mod 23 = 8
B = 5b mod 23 = 19
s = 196 mod 23 = 2
s = 8b mod 23 = 2
s = 196 mod 23 = 8b mod 23
s = 2
鮑伯
知道 不知道
p = 23
base g = 5
a = 6
b = 15
B = 515 mod 23 = 19
A = 5a mod 23 = 8
s = 815 mod 23 = 2
s = 19a mod 23 = 2
s = 815 mod 23 = 19a mod 23
s = 2
伊芙
知道 不知道
p = 23
base g = 5
a = 6
b = 15
A = 5a mod 23 = 8
B = 5b mod 23 = 19
s = 19a mod 23
s = 8b mod 23
s = 19a mod 23 = 8b mod 23
s = 2

注意:對愛麗絲來說解開鮑伯的私鑰或鮑伯要解開愛麗絲的私鑰應該都很困難。如果對愛麗絲來說解開鮑伯的私鑰不難的話(反之亦然),伊芙可以輕易地替換掉她自己的私鑰/公鑰對,把鮑伯的公鑰插到她自己的私鑰,產生出一個假的共享密鑰,並解開鮑伯的私鑰(然後用這個解開共享私鑰。伊芙可以試着選擇一個能讓她輕鬆解開鮑伯的私鑰的公鑰/私鑰對)。

安全性[編輯]

在選擇了合適的Gg時,這個協定被認為是竊聽安全的。偷聽者("Eve")可能必須通過求解迪菲-赫爾曼問題來得到gab。在當前,這被認為是一個困難問題。如果出現了一個高效的解決離散對數問題的演算法,那麼可以用它來簡化a或者b的計算,那麼也就可以用來解決迪菲-赫爾曼問題,使得包括本系統在內的很多公鑰密碼學系統變得不安全。

G應當是一個素數,或者它有一個足夠大的素因子以防止使用Pohlig–Hellman演算法來得到a或者b。由於這個原因,一個索菲熱爾曼素數 q可以用來計算素數p=2q+1,這樣的p稱為安全素數,因為使用它之後G的階只能被2和q整除。g有時被選擇成Gq階子群的生成元,而不是G本身的生成元,這樣ga勒讓德符號將不會顯示出a的低位。

如果Alice和Bob使用的亂數生成器不能做到完全隨機並且從某種程度上講是可預測的,那麼Eve的工作將簡單的多。

秘密的整數ab對談結束後會被丟棄。因此,迪菲-赫爾曼金鑰交換本身能夠天然地達到完備的前向安全性,因為私鑰不會存在一個過長的時間而增加泄密的危險。

身份驗證[編輯]

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

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

參見[編輯]

參照[編輯]

外部連結[編輯]