Encryption based on codebooks can be shoehorned into the formalism of an SKE. If Alice and Bob wish to communicate they take the Oxford English Dictionary (OED) and for each word in order, e.g. starting with aardvark, they choose another word, e.g. cryptography, that has not been chosen before. They each write aardvark in the left hand column of their codebook and cryptography in the same row of the right hand column. (Formally, this is a permutation of the words of the English language.) This represents key generation with the codebook being \(\sk\). To encrypt a word, find it in the left hand column and write the word in the same row of the right hand column. This is easy, as hopefully the left hand column is in alphabetical order. To decrypt a word, find it in the right hand column and write the word in the same row of the left hand column… (註:OED 第二版有二十冊、21,730 頁。)

先把碼書寫成 SKE

令 \(\calW\) 為 OED 的單字集合,\(N=\abs{\calW}\)(約 17 萬個現行詞條)。

  • \(\calK=\mathrm{Sym}(\calW)\):\(\calW\) 上所有排列 \(\pi\) 的集合,\(\abs{\calK}=N!\)。\(\KGen\) 依題述程序逐字選擇未用過的字,恰好抽出一個排列(若每次均勻選擇,則 \(\pi\) 均勻)。碼書就是 \(\pi\) 的「表列」:左欄 \(w\)、右欄 \(\pi(w)\)。

  • \(\calM=\calC=\calW^*\)(單字序列)。\(\Enc(\pi,w_1\cdots w_\ell)=\pi(w_1)\cdots\pi(w_\ell)\);\(\Dec(\pi,v_1\cdots v_\ell)=\pi^{-1}(v_1)\cdots\pi^{-1}(v_\ell)\)。

  • 正確性:\(\pi^{-1}(\pi(w))=w\)。\(\Esk\) 逐字是雙射(Problem 1 (iv)),解密無歧義。

金鑰的資訊量約 \(\log_2 N!\approx N\log_2(N/e)\approx2.7\times10^6\) 位元——約 340 KB,遠大於任何現代金鑰。

本質上這是以單字為字母的單字母替換密碼(monoalphabetic substitution over a huge alphabet):確定性、逐符號、金鑰空間巨大。下週分析替換密碼的所有結論(頻率分析)都適用。

碼書與反向碼書:(ii) 的解法是把金鑰加倍。

(i) 逐條檢視 Kerckhoffs 原則

Consider the above with respect to each of Kerckhoffs’ principles. Which are satisfied and which are not?

@C0.85cmL3.2cmC1.1cmL8.9cm@ & 原則 & 判定 & 理由
& 實務上不可破譯 & & 金鑰空間 \(N!\) 大到無法暴力破解,但系統是確定性的單字替換:高頻字(the、of、and)、固定句型(「致……司令部」)、已知明文、上下文都讓敵手逐步重建碼書。對「長期、大量」的軍事通訊(Kerckhoffs 的設定)不滿足。
& 系統不需保密 & & 「用碼書做單字替換」這個方法可以完全公開;秘密只在 \(\pi\)。形式上滿足。但金鑰本身就是整個系統的全部內容——碼書被繳獲 = 全盤皆輸,而這會牽動 。
& 金鑰可不靠筆記傳遞與記憶、可隨時更換 & & 致命缺陷。金鑰是二十冊、21,730 頁的書:不可能記憶(違反「sans le secours de notes écrites」),分發要靠實體運送,更換金鑰 = 重新產生並印製整套碼書給所有通訊者。一旦疑似外洩,無法「au gré des correspondants」即時更換。
& 相容於電報 & & 密文是英文單字,可以打電報(歷史上商用電碼本正是為電報省費用而生)。但:(a) 單字沒有冗餘,電報一個字母傳錯整個字就錯、無法更正;(b) 不在 OED 裡的人名、地名、數字需要額外的拼字表。
& 可攜、一人可用 & & 一人可以操作,但二十冊書談不上「portatif」。
& 易用、不費心神、無冗長規則 & & 加密容易(左欄按字母序,翻查即可);解密困難——右欄是隨機順序,找一個字要線性掃過十幾萬列。規則本身簡單,但操作負擔不對稱。→ (ii)

總結:形式上滿足 ,勉強滿足 ,部分滿足 、,嚴重違反 、。Kerckhoffs 當年要批評的正是這類「秘密在一本厚書裡」的系統。

(ii) 讓解密更有效率:把金鑰加倍

How might we make decryption more efficient? (Hint: \(\sk\) is already huge, why not double its size?)

製作反向碼書:把碼書的每一列 \((w,\pi(w))\) 依右欄 \(\pi(w)\) 的字母序重新排序並抄成第二本書(圖 1)。第二本書就是 \(\pi^{-1}\) 的表列:左欄是密文字(按字母序),右欄是對應的明文字。解密時在第二本書中二分搜尋,和加密一樣快(\(O(\log N)\) 次翻頁,而非 \(O(N)\) 的線性掃描)。 代價:金鑰(兩人各自持有的秘密)從一本變成兩本——「double its size」——而且兩本必須一致、都要保密。

密碼史上這正是與的區別。一部碼的明文與碼字同時按順序排列(例如字母序對應數字遞增),一本書即可雙向查詢,但敵手只要破出幾個碼字,就能靠「順序」內插出鄰近的字,極為脆弱。二部碼把碼字隨機指派(即本題的隨機排列 \(\pi\)),安全得多,但必須印兩本書:加密本(encoding book)與解密本(decoding book)。德國外交部的 0075、13040 碼與各國海軍碼都是二部碼。安全與效率的代價就是金鑰加倍——Kerckhoffs 在 1883 年批評的,就是這種體積龐大、難以更換的碼書。

  • 問題 1 (vi) 說「單射保證 \(\Esk^{-1}\) 存在」;本題說明存在不等於好算。SKE 定義裡 \(\Dec\) 是「演算法」,隱含必須有效率(PPT)。

  • 碼書的解法是空間換時間:明寫 \(\pi^{-1}\)。現代區塊加密走另一條路:金鑰只有 128 位元,\(\Esk\) 與 \(\Esk^{-1}\) 都由同一把短金鑰透過結構化的回合函數「算出來」(例如 Feistel 結構天生可逆、AES 每個步驟各有反運算),不必儲存任何表。

  • 無論哪種做法,金鑰決定了一個排列及其反排列;差別只在「存」還是「算」。

(iii) 用現代語言重寫 Kerckhoffs 原則

How might we rewrite Kerckhoffs’ principles in the modern day? Do we need to rewrite them all?

@C0.85cmL3.4cmL10.0cm@ & 1883 年 & 現代重寫
& 實務上(即使非數學上)不可破譯 & 方案必須對所有有效率(PPT)的敵手滿足明確定義的安全目標(IND-CPA/IND-CCA、EUF-CMA……),且安全性最好能歸約到公認困難的問題;「實務上 vs. 數學上」= 計算安全 vs. 資訊論安全。安全必須對所有攻擊成立,不只是暴力破解。
& 系統不需保密 & 不變。演算法、協定、程式碼都假設公開(Shannon:the enemy knows the system);安全只依賴金鑰。進一步:應該公開並接受公眾審查與標準化(AES、SHA-3、PQC 競賽);不要自創密碼。
& 金鑰可不靠筆記記憶、可隨時更換 & 金鑰應短(128–256 位元)、均勻隨機產生、易於更換(金鑰輪替、每次會話新金鑰、前向保密)、由金鑰交換協定安全地建立,並妥善儲存(硬體安全模組、金鑰派生)。「不靠筆記」的現代版是「不要把金鑰寫死在程式碼或貼在螢幕上」。
& 相容於電報 & 相容於當代通訊媒介與協定:以位元組為介面、低延遲、低頻寬開銷、可在不可靠通道上運作(封包遺失、重排——Week 1 的計數器)、可與現有協定(TLS、IP)整合。
& 可攜、一人可用 & 可在受限裝置上有效率地實作(智慧卡、IoT、手機),可自動化(不需人工介入、不需多方同時在場),軟硬體皆可實作且抗側通道。
& 易用、不費心神、無冗長規則 & 難以誤用(misuse resistance):API 不讓使用者選錯模式、重用 nonce、忘記驗證;預設值安全(secure by default);對使用者透明(HTTPS 的鎖頭)。「一長串規則」的現代版是「開發者必須記得的 15 個注意事項」——好的函式庫把它們藏起來。

需要全部重寫嗎?

  • 幾乎一字不改——它是唯一被升格為「原則」的一條,而且被整個現代密碼學內化(安全遊戲裡敵手知道演算法)。

  • 的精神完全不變(金鑰小、可換、可管理),只是從「人腦記憶」換成「機器產生與儲存」。

  • 需要實質重寫:Kerckhoffs 只有模糊的「indéchiffrable」,現代有精確的定義與歸約證明。這是 1883 與今日最大的差距。

  • – 字面過時(電報、可攜、心神),但它們指向的工程與可用性面向不但沒過時,反而是當代多數真實漏洞的來源(Heartbleed、nonce 重用、padding oracle 都不是「數學被破」)。它們值得重寫,而非刪除。

(iv) 違反 Kerckhoffs 原則的災難

Find an example where the failure to apply one or more of Kerckhoffs’ principles has been catastrophic.

主例:MIFARE Classic 與秘密密碼 Crypto-1(違反 、)。

  • 系統:NXP(前 Philips)自 1994–95 年起銷售的非接觸式智慧卡晶片,用於倫敦 Oyster 卡、荷蘭 OV-chipkaart、澳洲 SmartRider、全球無數門禁與票務系統;2008 年時累計售出逾 10 億顆、約 2 億張在用,占非接觸卡市場約 85%。

  • 違反 :卡片的加密與認證依賴專有串流密碼 Crypto-1,設計保密、金鑰僅 48 位元。48 位元在 1998 年(EFF 的 DES 破解機)就已知不足;NXP 實際上依賴的是「沒人知道演算法」。

  • 被逆向:2007 年 12 月 Karsten Nohl 與 Henryk Plötz 在 24C3 以晶片切片顯微攝影還原大部分電路;2008 年 3 月 Radboud 大學(Garcia、de Koning Gans、Jacobs 等)純粹從卡片與讀卡機的通訊紀錄完整還原 Crypto-1 與認證協定。

  • 災難性的結果:Crypto-1 本身有嚴重的密碼學弱點(線性回饋移位暫存器搭配弱的濾波函數、16 位元狀態的弱亂數產生器),加上協定缺陷,Radboud 的第二個攻擊只需一到兩次對讀卡機的部分認證、不到一秒、約 8 MB 記憶體即可還原金鑰;卡片可被完整複製,Oyster 卡被示範免費搭車,荷蘭政府大樓的門禁卡被複製。

  • 法律與後果:NXP 向法院聲請禁止 Radboud 在 ESORICS 2008 發表,2008 年 7 月 18 日 Arnhem 法院以言論自由駁回,並指出「損害並非來自發表,而是來自卡片明顯的缺陷」。荷蘭 OV-chipkaart 計畫大幅修改、各系統陸續遷移到使用公開演算法(3DES/AES)的 MIFARE DESFire,耗費數年與鉅資。Garcia 等人的結論一語中的:「Security by obscurity is volatile. Do not develop your own crypto but use standards.」

其他案例 A:演算法保密(違反 ,連帶 )
*[0.5em]

@L2.4cmL1.5cmL6.3cmL4.0cm@ 案例 & 違反 & 發生了什麼 & 後果
GSM 的 COMP128、A5/1、A5/2(1998–2003)& 、 & SIM 認證演算法 COMP128 與語音加密 A5 設計保密。1998 年 4 月 Briceno、Goldberg、Wagner 由外洩文件與逆向還原 COMP128,一天內找到致命弱點(「narrow pipe」),約 \(2^{17}\) 次查詢即可複製 SIM;1999 年從手機逆向出 A5/1、A5/2,A5/2(出口弱化版)當場被破,2003 年 Barkan–Biham–Keller 給出即時唯密文攻擊。& 全球數億用戶的 SIM 可被複製、通話可被即時竊聽;A5/2 的存在還讓攻擊者能對 A5/1 用戶發動降級攻擊。
DVD 的 CSS(1999)& 、 & 內容擾亂系統使用保密的 40 位元串流密碼。1999 年因某播放器未保護其金鑰而被逆向(DeCSS),隨後 Frank Stevenson 證明可在 \(2^{25}\) 步內破解。& 整個 DVD 版權保護體系失效;訴訟與「程式碼是否為言論」之爭(Week 1)。
KeeLoq 汽車遙控器(2006–08)& 、 & Microchip 的專有區塊加密(64 位元金鑰)用於多家車廠的遙控門鎖與防盜器;演算法 2006 年外洩,2007–08 年出現實用的代數攻擊與側通道攻擊。& 遙控器可被複製、車廠主金鑰可被還原。
TETRA 的 TEA1(1995–2023)& 、 & 歐洲警用、軍用與關鍵基礎設施無線電標準的加密演算法 TEA1–TEA4 由 ETSI 保密、僅簽 NDA 者可見。2023 年 Midnight Blue(TETRA:BURST)從 Motorola 無線電韌體逆向出全部演算法,發現 TEA1 把 80 位元金鑰內部縮減為 32 位元——筆電一分鐘可暴力破解。& 全球使用 TEA1 的警察、電網、管線通訊二十餘年來實際上可被竊聽與注入;ETSI 直到 2023–25 年才公開演算法。

其他案例 B:金鑰管理與操作(違反 、)
*[0.5em]

@L2.4cmL1.5cmL6.3cmL4.0cm@ 案例 & 違反 & 發生了什麼 & 後果
Zimmermann 電報(1917)& & 德國外交部的二部碼碼書(0075、13040)體積龐大、難以更換;舊碼 13040 早被英國 Room 40 大量重建。駐華府大使館把電報改用舊碼 13040 重新編碼轉發墨西哥,英國遂取得完整明文。& 電報公開後美國於 1917 年 4 月參戰;碼書「不可隨時更換」的代價是戰略級的。
Enigma 的金鑰表(1939–45)& 、 & 機器本身的設計波蘭人 1932 年已重建(符合 的預期),但每月紙本金鑰表(違反「不靠筆記」)屢次被繳獲(U-110、氣象船 München、Lauenburg),加上繁瑣的指示程序導致操作員犯錯(重複指示、固定開頭)。& 盟軍長期讀取 U 艇通訊,大西洋戰役轉向。

共同教訓:違反 的系統往往同時違反 ——因為沒有公眾審查,設計者看不到自己的弱點(Crypto-1 的濾波函數、COMP128 的窄管線、TEA1 的金鑰縮減);而一旦演算法被逆向(晶片切片、韌體分析、文件外洩——總是會發生),就沒有任何東西剩下。違反 的系統則敗在金鑰無法更換:被繳獲的碼書與金鑰表會一直被利用下去。

  • TETRA 的 TEA1 弱化據稱是為了符合出口管制(Wassenaar)。這與 Week 1 的 Netscape 40 位元出口版是同一個故事:刻意的弱點 + 保密的設計 = 二十年後的災難。

  • 「演算法保密」在上述每個案例中都延後了攻擊幾年,但也延後了修補:公開的 DES 在 1970 年代就被徹底分析並在設計時就知道壽命;Crypto-1 用了 13 年才被外界檢視。保密買到的是「不知道自己有多弱」。

  • 如果你是 1995 年 ETSI 的設計者,Kerckhoffs 會建議你怎麼做?(公開演算法、由金鑰長度而非演算法保密控制出口強度、讓學界審查。)