1998 - SSL 與網路加密#
案件摘要#
1994–1998 年,Netscape 發明 SSL(Secure Sockets Layer):把 RSA(見 1977-RSA.md)與對稱加密(見 1977-DES.md)組合成「混合加密」的網路協議——公鑰交換對稱金鑰,對稱加密資料。1998 年起的網路瀏覽器普及(Netscape Navigator、IE),2000 年代 HTTPS 全面化,今天網路上 90% 以上的流量被加密。這是密碼學從「軍事與學術」走向「全民基礎設施」的分水嶺——每次網路連線都在跑 Diffie–Hellman。
前因 -- 為什麼會有這個案子#
1990 年代中期的困境:網際網路是明文的——
- 電子郵件、HTTP、FTP 全部明文傳輸——任何路由器上的竊聽者都能看到
- 1995 年的電子商務(Amazon 1995、eBay 1995)需要信用卡——明文傳信用卡號 = 自殺
需求:把 RSA 的「金鑰交換 + 簽章」與對稱加密的「快速」組合起來,嵌入 TCP/IP 協議棧。
Taher ElGamal(ElGamal 密碼的發明者,1985,見 1985-ElGamal.md)1995 年加入 Netscape Security,領導 SSL 3.0 的設計——密碼學理論家直接參與工程實現(與 Turing 的炸彈機、Shannon 的戰時工作同源的傳統)。
線索與推理 -- 數學式、程式、理論#
混合加密(Hybrid Encryption)#
RSA 加密資料太慢(KB/s 級),對稱加密太快但需要金鑰交換(GB/s 級)。SSL 的架構:
數學:
- 客戶端 C 驗證伺服器 S 的憑證(S 的 RSA 公鑰,由 CA 簽章)
- C 生成隨機對稱金鑰 \(k\) ,用 S 的公鑰加密: \(c = E_{P_K^S}(k)\)
- S 用私鑰解密得 \(k\) ;之後全部資料用 \(k\) 對稱加密
分工(現代密碼學的標準架構):
| 原語 | 角色 | 速度 |
|---|---|---|
| RSA/ECC | 身份驗證、金鑰交換 | 慢(只握手一次) |
| AES/ChaCha20 | 資料加密 | 快(全程) |
| SHA/HMAC | 完整性 | 快 |
憑證與 CA:信任的鏈條#
新問題:C 怎麼知道 \(P_K^S\) 真的是 S 的公鑰?——中間人攻擊(見 1976-DiffieHellman金鑰交換.md):竊聽者替換公鑰。
解法:公鑰憑證(certificate):
信任鏈:C 信任 CA(根憑證預裝在瀏覽器/OS),CA 用私鑰簽章 S 的公鑰——信任的傳遞:
CA 的工業化:Verisign(1995)、Let's Encrypt(2015,免費自動化憑證)——今天 HTTPS 普及的推手。弱點:CA 的單點信任(2011 年 DigiNotar 被入侵偽造憑證)——憑證透明度(certificate transparency, 2013)的動機。
程式碼:HTTPS 握手的概念#
import random, hashlib
def mod_pow(b, e, n):
result = 1; b %= n
while e > 0:
if e & 1: result = result * b % n
b = b * b % n; e >>= 1
return result
# 概念:TLS 1.3 的握手(ECDHE + AES)
# 1. 伺服器憑證(CA 簽章的 RSA/ECDSA 公鑰)——驗證身份
# 2. ECDHE 交換對稱金鑰——前向保密
# 3. AES-GCM 加密資料——快速 + 認證
p = 2**61 - 1
server_pub = mod_pow(3, 12345, p) # 伺服器 DH 公鑰(概念)
client_priv = random.getrandbits(40)
client_pub = mod_pow(3, client_priv, p)
shared = mod_pow(server_pub, client_priv, p) # 共享秘密
session_key = hashlib.sha256(str(shared).encode()).digest()
print(f"會話金鑰 = {session_key[:8].hex()}...(AES 加密資料)")
print("信任鏈:CA 簽章 -> 伺服器公鑰 -> ECDHE -> 會話金鑰 -> AES")
前向保密(Forward Secrecy)#
問題:若伺服器的 RSA 私鑰洩漏,歷史錄下的所有密文都能被解(先存後解)。
解法:前向保密(FS)——每次會話用暫態 DH(ECDHE):
推理:金鑰的生命週期 = 會話的生命週期——洩漏損害的最小化。TLS 1.3(2018)強制要求前向保密——RSA 金鑰交換被廢除。
偵探筆記:SSL 的推理是「混合加密 + 信任鏈」——公鑰解決身份與金鑰交換,對稱解決速度,CA 解決信任傳遞。每個原語各司其職——與 Kerckhoffs 原則(見 1883-Kerckhoffs原則.md)的「分工」思想同源:把複雜性放在該放的地方。
結案 -- 後果與影響#
- HTTPS 普及:2010 年代 Let's Encrypt + 瀏覽器強制 → 今天 90%+ 流量加密——密碼學成為全民基礎設施。
- TLS 1.3(2018):簡化握手、強制前向保密、廢除弱演算法(MD5、RC4、DES)——現代加密協議的典範。
- CA 工業化:Verisign → Let's Encrypt——免費自動化憑證改變了網路安全。
- 憑證透明度(2013):CA 的單點信任問題——公開日誌監督 CA。
- 密碼戰爭的結束:2000 年美國密碼出口自由化——SSL 的普及與密碼學自由化互相推動。
- 「先存後解」的威脅:前向保密的動機——長期安全需要暫態金鑰(與 Shor 演算法的威脅疊加,見
1994-Shor演算法.md)。
關鍵人物與文獻#
- Taher ElGamal(1955–):Netscape SSL 3.0 領導者(1995)
- Netscape:SSL 1.0 (1994)、Navigator 瀏覽器
- IETF:TLS 1.0 (1999)、TLS 1.2 (2008)、TLS 1.3 (2018)
- DigiNotar:2011 年入侵事件——憑證透明度的動機
- Let's Encrypt:2015——免費自動化憑證
- 交叉參照:
1977-RSA.md、1977-DES.md、1976-DiffieHellman金鑰交換.md、2017-後量子密碼學.md