跳轉到

1974 - Diffie 公鑰構想#

案件摘要#

1974 年,29 歲的 Whitfield Diffie 拋下一切,與斯坦福的 Martin Hellman 合作,追查一個看似不可能的問題:兩個從未見面的人,如何在不安全的信道上協商出共享秘密? 1975–76 年他們構想出「公鑰密碼學」——加密與解密用不同金鑰,公鑰可公開、私鑰自己藏。這個構想解開了密碼學兩千年的死結(金鑰分發問題),並催生了數位簽章、零知識證明與整個現代數位世界。

前因 -- 為什麼會有這個案子#

兩千年來,密碼學的基本假設:通信雙方必須先共享秘密(金鑰)。但這個假設有雞生蛋問題:

  • 你要加密給對方,必須先把金鑰送到對方手上
  • 送金鑰需要安全信道——但你就是因為沒有安全信道才要加密!

軍事解法: couriers(信使)、外交郵袋、預先分發密碼本——只適合少數機構。商業困境:1970 年代的銀行電子轉帳,成千上萬的客戶,不可能每人派信使。

Diffie 的背景:MIT 電機畢業、輾轉於斯坦福、長期思考「隱私在數位時代」的問題。1974 年他聽到 Hellman 在講密碼學,登門拜訪——兩人開始了密碼學史上最重要的合作。

線索與推理 -- 數學式、程式、理論#

公鑰構想的誕生#

Diffie–Hellman 的推理:

  1. 問題:兩方 \(A, B\) 無共享秘密,要在竊聽者 \(E\) 監視下協商金鑰
  2. 關鍵轉折(Diffie 的洞察):把金鑰拆成兩半——加密金鑰(可公開)與解密金鑰(保密)
\[ \text{公鑰 } P_K: \text{任何人可加密} \quad \text{私鑰 } S_K: \text{只有主人可解密} \]
\[ E_{P_K}(m) = c, \quad D_{S_K}(c) = m, \quad \text{且 } P_K \text{ 無法推出 } S_K \]
  1. 這是不對稱的:兩千年來所有密碼都是對稱的(加密 = 解密的反向)。不對稱要求存在「單向陷門函數」:
\[ f: X \to Y \text{ 容易計算,} f^{-1} \text{ 難,但知道陷門 } t \text{ 時 } f^{-1} \text{ 容易} \]

「容易算、難逆推、有後門」——這個概念當時沒有實例!

兩個突破(1976)#

突破一:金鑰交換(見 1976-DiffieHellman金鑰交換.md)——Diffie–Hellman 協議,用離散對數的單向性實現不見面協商金鑰。

突破二:數位簽章的構想——公鑰密碼的反向使用:

\[ \text{簽章:} \sigma = D_{S_K}(m) \quad \text{驗證:} E_{P_K}(\sigma) = m \]

只有私鑰能簽,任何人可用公鑰驗證——手寫簽名的數學化:不可偽造、可驗證、不可否認。這解開了認證問題(Shannon 1949 區分的第二目標,見 1949-Shannon保密理論.md)。

單向陷門函數的候選#

Diffie–Hellman 1976 年的論文《New Directions in Cryptography》沒有給出公鑰加密的完整實現(只有金鑰交換),並列出了單向陷門函數的候選問題——這個懸案吊在 1977 年被 RSA(見 1977-RSA.md)用大數分解解決。

候選問題的譜系: - 大數分解(RSA, 1977): \(n = pq\) ,容易乘、難分解 - 離散對數(Diffie–Hellman, 1976):容易冪、難取對數 - 背包問題(Merkle–Hellman, 1978):NP 完備問題的陷門化(後被破,見 1979-MerkleHellman背包密碼.md)

程式碼:金鑰分發問題與公鑰構想#

import random

# 雞生蛋問題:對稱密碼的金鑰分發
def symmetric_channel_problem():
    """A、B 要共享金鑰 k,但信道被 E 竊聽——無解!"""
    k = random.getrandbits(128)     # 金鑰
    # k 怎麼送給 B?任何信道都被竊聽——死結
    return k

# 公鑰構想:拆成兩半
class PublicKeyConcept:
    """單向陷門函數:容易算、難逆、有陷門"""
    def __init__(self):
        self.public_key = None
        self.private_key = None     # 陷門

    def encrypt(self, msg):         # 任何人可算
        raise NotImplementedError
    def decrypt(self, cipher):      # 只有私鑰能算
        raise NotImplementedError

# RSA(1977)的解決:n = pq,容易乘、難分解
# Diffie-Hellman(1976)的解決:金鑰交換協議
print("Diffie-Hellman 的洞察:把金鑰拆成兩半")
print("  公鑰:任何人可加密(或用於交換)")
print("  私鑰:只有主人可解密")
print("  單向陷門函數:容易算、難逆推、知道陷門則容易")

隱私的政治哲學#

Diffie 的視野不止技術:1970 年代的水門事件、電腦化資料庫的隱私危機。Diffie 與 Landau 後來合著《Privacy on the Line》——密碼學是公民自由。這個視野引發 1990 年代的「密碼戰爭」(Crypto Wars):美國政府限制密碼出口(公鑰密碼被列為軍品),公民密碼學家對抗——最終密碼學自由化(2000 年前後)。

偵探筆記:Diffie–Hellman 的推理是「範式轉移」——兩千年的假設「通信必先共享秘密」被推翻。提出問題比解決問題更重要:1976 年的論文沒有完整實現,但定義了整個現代密碼學的問題空間(公鑰加密、數位簽章、認證協議)。

結案 -- 後果與影響#

  • 公鑰密碼學問世:RSA(1977)、ElGamal(1985)、ECC——現代數位世界的基礎。
  • 數位簽章:手寫簽名的數學化——電子商務、軟體發行、區塊鏈的基礎。
  • 金鑰分發問題解決:TLS 的每次連線都在跑 Diffie–Hellman——HTTPS 的基礎。
  • 密碼戰爭:政府 vs 公民密碼學家(1990s),最終密碼學自由化。
  • 圖靈獎:Diffie 與 Hellman 獲 2015 年圖靈獎——延遲 40 年的正名。

關鍵人物與文獻#

  • Whitfield Diffie(1944–):New Directions in Cryptography (1976);圖靈獎 2015
  • Martin Hellman(1945–):斯坦福;圖靈獎 2015
  • Ralph Merkle:同時期的公鑰構想(背包密碼,見 1979-MerkleHellman背包密碼.md)
  • James Ellis / Clifford Cocks / Malcolm Williamson(英國 GCHQ):1969–1974 秘密發明等價概念(保密至 1997 才公開——密碼學史的又一冤案)
  • 交叉參照:1976-DiffieHellman金鑰交換.md、1977-RSA.md、1949-Shannon保密理論.md