注意事項:
- SSL中密鑰交換算法有6種:無效(沒有密鑰交換)、RSA、匿名Diffie-Hellman、暫時Diffie-Hellman、固定Diffie-Hellman、Fortezza
- 生成對話密鑰一共需要三個隨機數。(客戶端生成隨機數、服務器生成隨機數、客戶端使用服務器公鑰加密的隨機數);考慮到中間人攻擊,中間人可以獲得客戶端生成隨機數、服務器生成隨機數和對稱加密使用的算法,安全性完全依靠第三個加密的隨機數(客戶端使用服務器公鑰加密的隨機數),盡管只要服務器的公鑰足夠長,破解的難度很大。因此部分 算法使用?DH密鑰交換算法;不需要使用第三個參數,僅僅根據 先前傳遞的隨機數 計算這個 隨機數
- 迪菲-赫爾曼密鑰交換(Diffie–Hellman key exchange,簡稱“D–H”) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道建立起一個密鑰。這個密鑰可以在后續的通訊中作為對稱密鑰來加密通訊內容。
算法描述
- 離散對數的概念:
- 原根:如果a是素數p的一個原根,那么數值:amodp,a^2?modp,…,a^(p-1)?modp?是各不相同的整數,且以某種排列方式組成了從1到p-1的所有整數。
- 離散對數:如果對于一個整數b和素數p的一個原根a,可以找到一個唯一的指數?i,使得:
- b?=(a的i次方)?modp???其中0≦i?≦p-1?那么指數i稱為b的以a為基數的模p的離散對數。
- Diffie-Hellman?算法的有效性依賴于計算離散對數的難度,其含義是:當已知大素數p和它的一個原根a后,對給定的?b,要計算?i?,被認為是很困難的,而給定?i?計算b?卻相對容易。
Diffie-Hellman算法:
- 假如用戶A和用戶B希望交換一個密鑰。
- 取素數p和整數a,a是p的一個原根,公開a和p。
- A選擇隨機數XA<p,并計算YA=a^XA mod p。
- B選擇隨機數XB<p,并計算YB=a^XB mod p。
- 每一方都將X保密而將Y公開讓另一方得到。
- A計算密鑰的方式是:K=(YB) ^XA modp
- B計算密鑰的方式是:K=(YA) ^XB modp
證明:
?????????????????????(YB)^ XA mod?p?= (a^XB modp)^ XA mod?p
???????????????????? ?= (a^XB)^ XA mod?p?= (a^XA) ^XB mod?p??? (<-- 密鑰即為 a^(XA*XB) mod?p)
???????????????????? ?= (a^XA modp)^ XB mod?p= (YA) ^XB mod?p
- 由于XA和XB是保密的,而第三方只有p、a、YB、YA可以利用,只有通過取離散對數來確定密鑰,但對于大的素數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共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名。
參考鏈接
- DH密鑰交換算法_NowOrNever-CSDN博客_dh算法
- 算法學習筆記(40): 原根 - 知乎