密碼學(xué)之DH秘鑰交換協(xié)議
DH秘鑰交換協(xié)議簡介
- 普遍大家都認(rèn)為公鑰密碼體制是迪菲(W.Diffie)和赫爾曼(E.Hellman)發(fā)明的!
Diffie-Hellman:一種確保共享KEY安全穿越不安全網(wǎng)絡(luò)的方法,它是OAKLEY的一個(gè)組成部分。Whitefield與Martin Hellman在1976年提出了一個(gè)奇妙的密鑰交換協(xié)議,稱為Diffie-Hellman密鑰交換 協(xié)議/算法 (Diffie-Hellman Key Exchange/Agreement Algorithm).這個(gè)機(jī)制的巧妙在于需要安全通信的雙方可以用這個(gè)方法確定 對(duì)稱密鑰 。然后可以用這個(gè)密鑰進(jìn)行 加密和解密 。但是注意,這個(gè)密鑰交換協(xié)議/算法只能用于密鑰的交換,而不能進(jìn)行消息的加密和解密。雙方確定要用的密鑰后,要使用其他對(duì)稱密鑰操作加密算法實(shí)現(xiàn)加密和解密消息。
DHKE 是最早的 公鑰協(xié)議 之一,它允許兩方安全地交換數(shù)據(jù),因此有人嗅探雙方之間的通信,交換的信息就可以泄露。
Oakley 協(xié)議是對(duì)Diffie-Hellman密鑰交換算法的優(yōu)化,它保留了后者的優(yōu)點(diǎn),同時(shí)克服了其弱點(diǎn)。
Diffie–Hellman (DH) 方法是 匿名密鑰協(xié)商方案 :它允許彼此沒有先驗(yàn)知識(shí)的兩方共同建立 通過不安全通道 的共享密鑰。
注意DHKE方法對(duì)嗅探攻擊(數(shù)據(jù)攔截)有抵抗力,但容易受到man- 中間人攻擊(攻擊者秘密中繼并可能 改變兩方之間的通信 )。
DH秘鑰交換協(xié)議可以使用 離散對(duì)數(shù)(經(jīng)典的 DHKE 算法)實(shí)現(xiàn)或使用 橢圓曲線加密([ECDH](https://en.wikipedia.org/wiki/Elliptic-curve_Diffie–Hellman)算法)。
Diffie–Hellman Key Exchange 以下簡稱為 (DHKE)DH秘鑰交換協(xié)議
通過混合顏色進(jìn)行密鑰交換引出DH秘鑰交換思想
DH秘鑰交換協(xié)議 與“通過混合顏色交換密鑰”的概念非常相似,具有很好的視覺表現(xiàn),簡化了其理解。 這就是為什么我們首先要解釋如何通過混色來交換秘密顏色。
- 混色密鑰交換方案的設(shè)計(jì)假設(shè) 前提:如果我們有兩種不同顏色的液體,我們可以輕松地混合顏色并獲得新的顏色,但反向操作幾乎是不可能的:沒有辦法將顏色分開 混合顏色 恢復(fù)到它們原來的顏色成分。
這是換色場景,步驟如下:
- Alice 和 Bob,就不需要保密的任意 起始(共享)顏色達(dá)成一致(例如 黃色)。
- Alice 和 Bob 分別選擇他們自己保留的秘密顏色(例如 red 和 sea green)。
- 最后 Alice 和 Bob 將他們的秘密顏色與他們共同共享的顏色混合在一起。 獲得的混合顏色區(qū)域準(zhǔn)備公開交換(在我們的例子中橙色和淺天藍(lán)色)。

得到MIxed colors 之后的后續(xù)步驟如下:
-
Alice 和 Bob 公開交換混色。
- 我們假設(shè)沒有有效的方法從混合顏色中提?。ǚ蛛x)秘密顏色,因此知道混合顏色的第三方無法透露秘密顏色。
- 最后,Alice 和Bob 將他們從合作伙伴那里收到的顏色與他們自己的秘密顏色混合在一起。
- 結(jié)果是最終顏色混合(黃棕色),與合作伙伴的顏色混合相同。
- 這個(gè)最終混色就是 安全交換的共享密鑰 shared key。

如果第三方攔截了顏色交換過程,那么他們在計(jì)算上很難確定秘密顏色。
總結(jié):
- Alice 和 Bob 擁有協(xié)同一致的起始顏色,黃色
- Alice 和 Bob交換混合顏色,也就是 公鑰
- Alice 和 Bob擁有自己的私鑰 紅色和綠色
- Alice 和 Bob通過起始顏色混合私鑰,得到公鑰Mixed
- Alice 和 Bob交換公鑰(Mixed)
- Alice 和 Bob 公鑰+私鑰=最終一樣的Shared key共享秘鑰
- Alice 和 Bob用**Shared key共享秘鑰 ** todo something
DH秘鑰交換協(xié)議基于類似的概念,但使用 離散對(duì)數(shù)(discrete logarithms) 和 模冪運(yùn)算(modular exponentiations) 而不是顏色混合。
Diffie-Hellman 密鑰交換 (DHKE) 協(xié)議
現(xiàn)在,讓我們解釋一下 DHKE 協(xié)議是如何工作的。
DHKE 背后的數(shù)學(xué)
DHKE 基于 (模冪運(yùn)算)modular exponentiations 的一個(gè)簡單屬性:
(ga)b mod p = (gb)a mod p
其中 g、a、b 和 p 是正整數(shù)。
如果我們有 A = ga mod p 和 B = gb mod p,我們可以計(jì)算 gab mod p**,不顯示 **a 或 b(稱為 秘密指數(shù))。
在計(jì)算理論中,這些都不是可以找到秘密指數(shù)的有效算法。 如果我們有以下等式中的 m、g 和 p:
m = gs mod p
沒有找到秘密指數(shù) s 的有效(快速)算法。 這被稱為 離散對(duì)數(shù)問題 (DLP)。
離散對(duì)數(shù)問題 Discrete Logarithm Problem (DLP)
計(jì)算機(jī)科學(xué)中的離散對(duì)數(shù)問題 (DLP) 定義如下:
- 在密碼學(xué)中,許多算法依賴于 DLP 問題的計(jì)算難度在精心挑選的組上,不存在有效的算法。
- 離散對(duì)數(shù)問題是指從已知的A, g, p,很難求得a,這里的計(jì)算很難的關(guān)鍵是p是個(gè)很大的素?cái)?shù),比如1024-bit, 2048-bit, 3076-bit。
DHKE 協(xié)議
現(xiàn)在,在我們熟悉了模冪的上述數(shù)學(xué)性質(zhì)后,我們準(zhǔn)備解釋DHKE協(xié)議。 這是它的工作原理:

讓我們解釋一下這個(gè)密鑰交換過程的實(shí)例:
- Alice 和 Bob 同意使用兩個(gè)公共整數(shù):modulus p 和 base g(其中 p 是 (質(zhì)數(shù))prime, g 是 原始根模 p)。
- 例如,讓 p = 23 和 g = 5。
- 整數(shù) g 和 p 是公共的,通常是源代碼中的硬編碼常量。
- Alice 選擇一個(gè) 秘密整數(shù) a(例如 a = 4),然后計(jì)算并向 Bob 發(fā)送數(shù)字 A = ga mod p。
- 數(shù)字A 是公開的。 它是通過公共信道發(fā)送的,它的攔截不能泄露秘密指數(shù)a。
- 在我們的例子中,我們有:A = 54 mod 23 = 4。
- Bob 選擇一個(gè) 秘密整數(shù) b(例如 b = 3),然后計(jì)算并發(fā)送給 Alice 數(shù)字 B = gb mod p。
- 在我們的例子中,我們有:B = 53 mod 23 = 10
- Alice 計(jì)算 s = Ba mod p
- 在我們的例子中:s = 104 mod 23 = 18
- Bob 計(jì)算 s = Ab mod p
- 在我們的例子中:s = 43 mod 23 = 18
- Alice和Bob現(xiàn)在共享一個(gè)秘密號(hào)碼 s
- s = Ab mod p = Ba mod p = (ga)b mod p = (gb)a mod p = gab mod p = 18
- 共享密鑰 s 無法從公開可用的數(shù)字 A 和 B 計(jì)算,因?yàn)闊o法有效計(jì)算秘密指數(shù) a 和 b。
在最常見的 DHKE 實(shí)現(xiàn)中(遵循 RFC 3526),基數(shù)是 g = 2 和模數(shù) p 是一個(gè)很大的 質(zhì)數(shù)(1536 ... 8192 位)。
DHKE 協(xié)議的安全性 Security of the DHKE Protocol
DHKE 協(xié)議基于 Diffie-Hellman 問題 的實(shí)際難度,它是計(jì)算機(jī)科學(xué)中眾所周知的 DLP (離散對(duì)數(shù)問題),仍然沒有有效的算法存在。
DHKE 通過不安全的公共(可嗅探)通道(例如通過電纜或通過空氣波傳播的信號(hào))交換非秘密整數(shù)序列,但不會(huì)透露秘密交換的共享私鑰.
再次提醒,DHKE 協(xié)議以其經(jīng)典形式易受到 [中間人攻擊](https://en.wikipedia.org/wiki/Man-in-the -middle_attack),黑客可以在其中攔截和修改雙方之間交換的消息。
最后,請注意整數(shù) g、p、a 和 p 通常是非常大的數(shù)字(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 密鑰交換協(xié)議
The Elliptic-Curve Diffie–Hellman (ECDH) 是一種匿名密鑰協(xié)商協(xié)議,允許兩方(每方都有一個(gè)橢圓曲線公私密鑰對(duì))在不安全的通道上建立共享秘密。
ECDH 是經(jīng)典 DHKE 協(xié)議的變體,其中模冪計(jì)算被橢圓曲線計(jì)算取代,以提高安全性。 稍后我們將詳細(xì)解釋 橢圓曲線密碼(ECC) 部分。