密碼學之DH祕鑰交換協議
DH祕鑰交換協議簡介
- 普遍大家都認爲公鑰密碼體制是迪菲(W.Diffie)和赫爾曼(E.Hellman)發明的!
Diffie-Hellman:一種確保共享KEY安全穿越不安全網絡的方法,它是OAKLEY的一個組成部分。Whitefield與Martin Hellman在1976年提出了一個奇妙的密鑰交換協議,稱爲Diffie-Hellman密鑰交換 協議/算法 (Diffie-Hellman Key Exchange/Agreement Algorithm).這個機制的巧妙在於需要安全通信的雙方可以用這個方法確定 對稱密鑰 。然後可以用這個密鑰進行 加密和解密 。但是注意,這個密鑰交換協議/算法只能用於密鑰的交換,而不能進行消息的加密和解密。雙方確定要用的密鑰後,要使用其他對稱密鑰操作加密算法實現加密和解密消息。
DHKE 是最早的 公鑰協議 之一,它允許兩方安全地交換數據,因此有人嗅探雙方之間的通信,交換的信息就可以泄露。
Oakley 協議是對Diffie-Hellman密鑰交換算法的優化,它保留了後者的優點,同時克服了其弱點。
Diffie–Hellman (DH) 方法是 匿名密鑰協商方案 :它允許彼此沒有先驗知識的兩方共同建立 通過不安全通道 的共享密鑰。
注意DHKE方法對嗅探攻擊(數據攔截)有抵抗力,但容易受到man- 中間人攻擊(攻擊者祕密中繼並可能 改變兩方之間的通信 )。
DH祕鑰交換協議可以使用 離散對數(經典的 DHKE 算法)實現或使用 橢圓曲線加密([ECDH](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie–Hellman)算法)。
Diffie–Hellman Key Exchange 以下簡稱爲 (DHKE)DH祕鑰交換協議
通過混合顏色進行密鑰交換引出DH祕鑰交換思想
DH祕鑰交換協議 與“通過混合顏色交換密鑰”的概念非常相似,具有很好的視覺表現,簡化了其理解。 這就是爲什麼我們首先要解釋如何通過混色來交換祕密顏色。
- 混色密鑰交換方案的設計假設 前提:如果我們有兩種不同顏色的液體,我們可以輕鬆地混合顏色並獲得新的顏色,但反向操作幾乎是不可能的:沒有辦法將顏色分開 混合顏色 恢復到它們原來的顏色成分。
這是換色場景,步驟如下:
- Alice 和 Bob,就不需要保密的任意 起始(共享)顏色達成一致(例如 黃色)。
- Alice 和 Bob 分別選擇他們自己保留的祕密顏色(例如 red 和 sea green)。
- 最後 Alice 和 Bob 將他們的祕密顏色與他們共同共享的顏色混合在一起。 獲得的混合顏色區域準備公開交換(在我們的例子中橙色和淺天藍色)。
得到MIxed colors 之後的後續步驟如下:
-
Alice 和 Bob 公開交換混色。
- 我們假設沒有有效的方法從混合顏色中提取(分離)祕密顏色,因此知道混合顏色的第三方無法透露祕密顏色。
- 最後,Alice 和Bob 將他們從合作伙伴那裏收到的顏色與他們自己的祕密顏色混合在一起。
- 結果是最終顏色混合(黃棕色),與合作伙伴的顏色混合相同。
- 這個最終混色就是 安全交換的共享密鑰 shared key。
如果第三方攔截了顏色交換過程,那麼他們在計算上很難確定祕密顏色。
總結:
- Alice 和 Bob 擁有協同一致的起始顏色,黃色
- Alice 和 Bob交換混合顏色,也就是 公鑰
- Alice 和 Bob擁有自己的私鑰 紅色和綠色
- Alice 和 Bob通過起始顏色混合私鑰,得到公鑰Mixed
- Alice 和 Bob交換公鑰(Mixed)
- Alice 和 Bob 公鑰+私鑰=最終一樣的Shared key共享祕鑰
- Alice 和 Bob用**Shared key共享祕鑰 ** todo something
DH祕鑰交換協議基於類似的概念,但使用 離散對數(discrete logarithms) 和 模冪運算(modular exponentiations) 而不是顏色混合。
Diffie-Hellman 密鑰交換 (DHKE) 協議
現在,讓我們解釋一下 DHKE 協議是如何工作的。
DHKE 背後的數學
DHKE 基於 (模冪運算)modular exponentiations 的一個簡單屬性:
(ga)b mod p = (gb)a mod p
其中 g、a、b 和 p 是正整數。
如果我們有 A = ga mod p 和 B = gb mod p,我們可以計算 gab mod p**,不顯示 **a 或 b(稱爲 祕密指數)。
在計算理論中,這些都不是可以找到祕密指數的有效算法。 如果我們有以下等式中的 m、g 和 p:
m = gs mod p
沒有找到祕密指數 s 的有效(快速)算法。 這被稱爲 離散對數問題 (DLP)。
離散對數問題 Discrete Logarithm Problem (DLP)
計算機科學中的離散對數問題 (DLP) 定義如下:
- 在密碼學中,許多算法依賴於 DLP 問題的計算難度在精心挑選的組上,不存在有效的算法。
- 離散對數問題是指從已知的A, g, p,很難求得a,這裏的計算很難的關鍵是p是個很大的素數,比如1024-bit, 2048-bit, 3076-bit。
DHKE 協議
現在,在我們熟悉了模冪的上述數學性質後,我們準備解釋DHKE協議。 這是它的工作原理:
讓我們解釋一下這個密鑰交換過程的實例:
- Alice 和 Bob 同意使用兩個公共整數:modulus p 和 base g(其中 p 是 (質數)prime, g 是 原始根模 p)。
- 例如,讓 p = 23 和 g = 5。
- 整數 g 和 p 是公共的,通常是源代碼中的硬編碼常量。
- Alice 選擇一個 祕密整數 a(例如 a = 4),然後計算並向 Bob 發送數字 A = ga mod p。
- 數字A 是公開的。 它是通過公共信道發送的,它的攔截不能泄露祕密指數a。
- 在我們的例子中,我們有:A = 54 mod 23 = 4。
- Bob 選擇一個 祕密整數 b(例如 b = 3),然後計算併發送給 Alice 數字 B = gb mod p。
- 在我們的例子中,我們有:B = 53 mod 23 = 10
- Alice 計算 s = Ba mod p
- 在我們的例子中:s = 104 mod 23 = 18
- Bob 計算 s = Ab mod p
- 在我們的例子中:s = 43 mod 23 = 18
- Alice和Bob現在共享一個祕密號碼 s
- s = Ab mod p = Ba mod p = (ga)b mod p = (gb)a mod p = gab mod p = 18
- 共享密鑰 s 無法從公開可用的數字 A 和 B 計算,因爲無法有效計算祕密指數 a 和 b。
在最常見的 DHKE 實現中(遵循 RFC 3526),基數是 g = 2 和模數 p 是一個很大的 質數(1536 ... 8192 位)。
DHKE 協議的安全性 Security of the DHKE Protocol
DHKE 協議基於 Diffie-Hellman 問題 的實際難度,它是計算機科學中衆所周知的 DLP (離散對數問題),仍然沒有有效的算法存在。
DHKE 通過不安全的公共(可嗅探)通道(例如通過電纜或通過空氣波傳播的信號)交換非祕密整數序列,但不會透露祕密交換的共享私鑰.
再次提醒,DHKE 協議以其經典形式易受到 [中間人攻擊](https://en.wikipedia.org/wiki/Man-in-the -middle_attack),黑客可以在其中攔截和修改雙方之間交換的消息。
最後,請注意整數 g、p、a 和 p 通常是非常大的數字(1024、2048 或 4096 位甚至更大),這使得 蠻力攻擊 毫無意義。
DHKE - Live Example
As live example, you can play with this online DHKE tool: http://www.irongeek.com/diffie-hellman.php
ECDH - 基於橢圓曲線的 Diffie-Hellman 密鑰交換協議
The Elliptic-Curve Diffie–Hellman (ECDH) 是一種匿名密鑰協商協議,允許兩方(每方都有一個橢圓曲線公私密鑰對)在不安全的通道上建立共享祕密。
ECDH 是經典 DHKE 協議的變體,其中模冪計算被橢圓曲線計算取代,以提高安全性。 稍後我們將詳細解釋 橢圓曲線密碼(ECC) 部分。