2.3 維吉尼亞密碼與 Enigma#
維吉尼亞密碼:多表替代的經典#
維吉尼亞密碼(16 世紀)使用一個關鍵字當金鑰,對明文第 i 個字母用「移位量 = 關鍵字第 i mod L 個字母」加密,等於循環使用 L 張凱薩替代表。它因此被稱為「不可破的密碼」達三百年,直到被 Kasiski/Babbage 破解。
演算法步驟#
- 選定關鍵字,如
KEY(L=3)。 - 對明文第 i 個字母 p,取
k = K[i mod L]的字母編號。 - 加密:
C = (P + k) mod 26;解密:P = (C - k) mod 26。
Python 實作#
def vigenere(text: str, key: str, decrypt: bool = False) -> str:
key = [ord(c.upper()) - 65 for c in key if c.isalpha()]
out, i = [], 0
for ch in text:
if ch.isalpha():
base = ord('A') if ch.isupper() else ord('a')
shift = key[i % len(key)]
if decrypt:
shift = -shift
out.append(chr((ord(ch) - base + shift) % 26 + base))
i += 1
else:
out.append(ch)
return ''.join(out)
ct = vigenere("ATTACKATDAWN", "LEMON")
print(ct) # LXFOPVEFRNHR
print(vigenere(ct, "LEMON", True)) # ATTACKATDAWN
破密:Kasiski 測試與金鑰長度#
- Kasiski 測試:在密文中尋找重複片段,其間距若為金鑰長度 L 的倍數,則 L 是各間距的最大公因數候選。
- 索引重合度(IC):把密文切成 L 組(每 L 個字母取一),若 L 正確,每組都是單表替代,其 IC 接近英文的 0.0667;若 L 錯誤則接近隨機的 0.0385。
- 確定 L 之後:每組各自變成 2.2 節的頻率分析問題,26 次試驗逐組破解。
教訓:維吉尼亞的崩潰不是因為「多表」不好,而是因為金鑰循環使用——金鑰週期 L 就是攻擊的把手。現代串流加密(4.3 節)正是它的後裔:把「循環短金鑰」換成「不重複的偽隨機金鑰流」,金鑰流重複正是現代串流加密最致命的錯誤(nonce 重用)。
Enigma:機械多表密碼的巔峰與崩潰#
Enigma(德國,1930 年代起)把多表替代推到極致:
- 3 個轉輪(自備 5 個選 3),每鍵一字輪轉一格,像「加密週期長達 26³」的維吉尼亞;
- 接線板額外交換最多 13 對字母,令金鑰空間暴增;
- 反射器讓加解密同一程序,但也造成「沒有任何字母能加密成自己」這一致命結構弱點。
Enigma 為何被破解#
- 金鑰空間雖大(約 10^23),但每天的金鑰只有幾十位元,且程序規定每則訊息開頭傳送「訊息金鑰」兩次(為防傳輸錯誤),同一組設定加密兩次出現的位置 1 與 4——波蘭數學家 Rejewski 正是利用這個程序漏洞用純數學重建了轉輪接線。
- 已知明文充足:每日固定格式的天氣報告(
WETTER)與禮貌用語(HEIL HITLER)提供了大量已知明文攻擊素材(1.2 節的模型)。 - 「不加密成自己」:Turing 的 Bombe 電路利用這一特性大幅剪枝,機械化窮舉每日金鑰。
- 金鑰管理與人為惰性:操作員偏好「女友名字」等可猜測的訊息金鑰。
教訓(對應 1.3 節)#
| Enigma 的問題 | 現代對應 |
|---|---|
| 訊息金鑰重複傳兩次 | 協定設計失誤(如 WEP 的 IV 重用) |
| 依賴操作員自選金鑰 | 弱金鑰、弱密碼(9.3 節) |
| 結構自帶「不加密成自己」 | 演算法層面的結構性洩漏 |
安全性分析與現代意義#
維吉尼亞與 Enigma 共同說明:金鑰流的週期性與可預測性是替代式密碼的阿基里斯腱。現代解法是第 3、4 章的路線——一次性密碼本(真隨機、等長、不重複)或 AES/ChaCha20(金鑰流由偽隨機函數產生、週期天文數字)。當你之後學到 CBC 的 IV 要求、CTR 模式的 nonce 禁止重用時,都會看到維吉尼亞的幽靈。
練習#
- 用關鍵字
PYTHON加密CRYPTOGRAPHY IS FUN,並寫程式驗證解密正確。 - 寫程式實作 IC(索引重合度)函數,對一段維吉尼亞密文掃描 L=1~20,找出最可能的金鑰長度。
- 上網查詢 Enigma 反射器的「不加密成自己」特性,思考:這個特性讓 Bombe 能剪掉哪些金鑰假設?用一個簡單例子(3 字母迷你版)說明。