1976 - Diffie–Hellman 金鑰交換#
案件摘要#
1976 年 11 月,Diffie 與 Hellman 發表《New Directions in Cryptography》:提出金鑰交換協議——兩個從未見面的人,在竊聽者面前公開交換訊息,卻能協商出共享秘密。這是人類第一次解決「金鑰分發問題」,公鑰密碼學正式問世。協議的安全性建立在離散對數問題的單向性上:公開傳輸 \(g^a, g^b\) ,竊聽者算出 \(g^{ab}\) 需要解離散對數——被認為難。
前因 -- 為什麼會有這個案子#
Diffie 與 Hellman(見 1974-Diffie公鑰構想.md)已構想公鑰密碼學,但缺一個實例。他們的問題:存在單向函數嗎?有沒有「容易算、難逆推」的具體數學運算? 答案來自數論的老朋友:指數運算。
線索與推理 -- 數學式、程式、理論#
離散對數的單向性#
取質數 \(p\) 與生成元 \(g\) ( \(\mathbb{Z}_p^*\) 的生成元)。指數運算容易:
離散對數難:
(現代:數域篩法 \(2^{n^{1/3}}\) 級——次指數,但仍遠難於指數運算。)
單向性:乘 \(g\) 容易,除 \(g\) 難。
Diffie–Hellman 協議#
公開參數:質數 p,生成元 g
A: 私密選 a,公開發送 A = g^a mod p
B: 私密選 b,公開發送 B = g^b mod p
A 計算:B^a = (g^b)^a = g^{ab} mod p
B 計算:A^b = (g^a)^b = g^{ab} mod p
共享秘密:s = g^{ab} mod p
竊聽者 E 看到: \(g, p, g^a, g^b\) ——要算 \(g^{ab}\) ,需要解Diffie–Hellman 問題(CDH):
CDH 被認為 ≈ 離散對數難(2000 年的證明:隨機自歸約下,CDH 難 ⟺ DDH 難 ⟹ DL 難)。
為什麼這是革命#
對照兩千年的困境:
- 之前:加密需要先共享金鑰 → 金鑰需要安全信道 → 死結
- 之後:兩方公開交換 \(g^a, g^b\) (信道不安全沒關係)→ 各自算出 \(s\) → \(s\) 作為對稱加密的金鑰
實際架構(今天的 HTTPS):
非對稱解決金鑰分發,對稱加密解決資料加密——兩者各司其職,這是現代密碼學的標準架構。
程式碼:Diffie–Hellman#
import random
def mod_pow(base, exp, mod):
"""平方乘法:O(log exp) 次模乘"""
result = 1
base %= mod
while exp > 0:
if exp & 1:
result = result * base % mod
base = base * base % mod
exp >>= 1
return result
def is_generator(g, p):
"""檢查 g 是否為 Z_p* 的生成元"""
need = {k for k in range(1, p) if p % k == 0} # 簡化示範
return True
# 公開參數(實務用 2048 位質數;此處示範小質數)
p, g = 2**61 - 1, 3
# A 與 B 各自私密選亂數
a = random.getrandbits(40)
b = random.getrandbits(40)
# 公開交換
A = mod_pow(g, a, p) # E 看得到
B = mod_pow(g, b, p) # E 看得到
# 各自算出共享秘密
s_A = mod_pow(B, a, p) # (g^b)^a = g^{ab}
s_B = mod_pow(A, b, p) # (g^a)^b = g^{ab}
print(s_A == s_B) # True:共享秘密協商成功
# 竊聽者:知道 g, p, A, B,要算 g^{ab}——需解離散對數
# 中間人攻擊的防範:需要認證(數位簽章,見 1977-RSA)
中間人攻擊:認證的必要#
DH 協議的弱點:中間人攻擊(MITM)——竊聽者 \(E\) 攔截並替換:
A ←— g^e1 —→ E ←— g^e2 —→ B
A ←— g^e2 —→ E ←— g^e1 —→ B
\(A\) 與 \(E\) 共享 \(g^{a e_1}\) , \(B\) 與 \(E\) 共享 \(g^{b e_2}\) —— \(E\) 居中解密重加密。DH 解決竊聽,不解決冒充——需要認證(數位簽章,RSA 1977 或憑證)。TLS 的「憑證 + DH」架構正是補這個洞。
偵探筆記:Diffie–Hellman 的推理是「利用單向性的交換律」—— \((g^a)^b = (g^b)^a\) 的交換律(指數的性質)讓兩方各自到達同一點,而竊聽者無法。用數學結構的交換性代替共享秘密——這個模式後來出現在所有金鑰交換協議(ECDH、post-quantum DH)中。
結案 -- 後果與影響#
- HTTPS 的基礎:每次 TLS 握手(DHE、ECDHE)都在跑 Diffie–Hellman——網路加密的基礎設施。
- 公鑰密碼學問世:1976 年論文正式定義公鑰密碼學,RSA(1977)補上加密實現。
- ECDH:橢圓曲線版本(1985,見
2005-橢圓曲線密碼學.md)——更短金鑰、更快,今天行動裝置的標準。 - 數位簽章的構想:同一論文提出的簽章構想,由 RSA(1977)與 ElGamal(1985)實現。
- 圖靈獎:Diffie 與 Hellman 獲 2015 年圖靈獎。
- 量子威脅:Shor 演算法(1994,見
1994-Shor演算法.md)破離散對數——DH 需要後量子替代(見2017-後量子密碼學.md)。
關鍵人物與文獻#
- Whitfield Diffie(1944–)與 Martin Hellman(1945–):New Directions in Cryptography (1976, IEEE Trans. Info. Theory);圖靈獎 2015
- Ralph Merkle:同時期的貢獻(論文第三作者被拒——冤案)
- Malcolm Williamson(GCHQ):1974 秘密發明等價協議
- 交叉參照:
1974-Diffie公鑰構想.md、1977-RSA.md、2005-橢圓曲線密碼學.md、2017-後量子密碼學.md