講義一開始並沒有急著給出公式,而是先問一個看似簡單的問題:「密碼學是什麼?」 教師刻意列出七種來源各異的「定義」,目的不是要你背下其中一個,而是要你體會:對同一個學科,不同的人會因為關心的面向不同而給出不同的界定;而一旦下了定義,就等於劃出了界線(Wilde:「to define is to limit」)。

如果有人請你描述你對密碼學這門學問(或它所扮演的角色)的理解,分別在

  • 學術(academic)場域、

  • 產業或經濟(industrial / economic)場域、

  • 文化或社會(cultural / societal)場域,

你會怎麼回答?(先自己想一分鐘再往下讀。)

七種定義的比較

L2.4cmL6.6cmL5.8cm 來源 & 定義(原文大意) & 著眼點/評註
Oxford English Dictionary & 以代碼或密碼書寫的技藝或實務;加密的科學。 & 只談「加密」。教師明言「這是壞的定義」:它把密碼學等同於保密通訊,完全遺漏了完整性、鑑別、數位簽章、零知識證明、安全多方計算等現代密碼學的核心主題。
Katz–Lindell(KL-IMC) & 研究用以保護數位資訊、系統與分散式計算、使其免受敵手攻擊的數學技術。 & 強調「數學」與「敵手」(adversarial):安全是相對於攻擊者而言的,而且要能被嚴格論證。
Rosulek(R-JC) & 研究如何控制資訊的存取(controlling access to information)。 & 最精簡。「存取」同時涵蓋「誰能讀」(保密性)與「誰能寫/改」(完整性、鑑別)。
Martin & 研究計算的極限。 & 把密碼學放回理論計算機科學:安全性建立在「某些問題難以計算」之上(例如大數分解、離散對數、格問題)。
Eamonn(授課教師) & 研究如何讓計算變得安全,以及——或許更重要的——「讓計算安全」到底是什麼意思。 & 本課程的主旋律:定義(definition)本身就是研究對象。第一週幾乎全部在談「怎麼定義安全」。
Wilde & 「下定義就是設限。」 & 提醒:任何定義都有盲點;上面每一句都排除了某些東西。
Blanchette & 密碼學是為了規範行為而寫的程式碼(code created with the sole purpose of regulating behaviour)。 & 社會學/STS 的視角:密碼學不只是數學,它是「用技術手段強制某些規則」的工具,因此必然涉及權力、法律與政治(見第 [sec:munitions] 節的出口管制歷史)。

一個好的定義應該能涵蓋這門學科實際在做的事。現代密碼學至少包括:

  • 保密性(confidentiality / secrecy):加密。

  • 完整性與鑑別(integrity / authenticity):MAC、數位簽章——這是本週後半的主題,而牛津定義完全沒提。

  • 更進階的功能:零知識證明(在不洩漏秘密的情況下證明你知道它)、安全多方計算(多方在不互相揭露輸入的情況下共同計算)、同態加密(直接對密文運算)等。

把密碼學等同於「加密」,就像把「醫學」定義成「開刀」。

從「通訊」出發,但不止於通訊

講義 p. 6 指出:被問到密碼學時,多數人會想到安全通訊(secure communications)。這確實是歷史上最悠久的用途——從斯巴達的 scytale、凱撒密碼、二戰的 Enigma 到今天的 TLS。因此講義也選擇從一個「兩位領主互相傳訊」的中世紀思想實驗出發(第 [sec:thought] 節)。但請記住講義最後一頁預告的討論題目之一就是「cryptography beyond secure communications」:磁碟加密(自己和未來的自己通訊)、密碼學貨幣、電子投票、匿名通訊等,都超出了「兩人傳訊」的框架。

延伸補充:現代密碼學的三個原則(KL-IMC §1.4)

講義提到「有興趣的人可以讀 KL-IMC 第 1、2 節」。KL-IMC 第一章把「現代密碼學」與「古典密碼學」的分水嶺總結為三個原則,它們正好解釋了為什麼本週要花那麼多篇幅談「定義」:

  1. 形式化定義(Principle 1 – Formal Definitions):在設計或分析任何方案之前,必須先精確地說清楚「安全」是什麼意思。沒有定義,就無法判斷一個方案是否達標,也無法比較兩個方案。

  2. 精確的假設(Principle 2 – Precise Assumptions):多數方案的安全性依賴某個「某問題很難」的假設(例如大數分解困難)。假設必須明確陳述,才能被檢驗、被比較、被替換。

  3. 安全證明(Principle 3 – Proofs of Security):在定義與假設之下,以嚴格的數學證明說明方案安全——通常是「若存在攻破方案的敵手,則可將其轉化為解決困難問題的演算法」(歸約,reduction)。

本週講義的「五次迭代」(第 [sec:iterations] 節)與 Problem Set 1 全部都在練習第一原則:怎麼寫出一個既不太弱、又能達成的定義。

荷蘭語言學家 Auguste Kerckhoffs 在 1883 年提出:一個密碼系統即使除了金鑰以外的一切都被敵人知道,仍應是安全的。換言之,演算法公開、只有金鑰保密。理由有三:(1) 金鑰比演算法容易保密、容易更換;(2) 公開的演算法可以接受公眾檢驗;(3) 大量使用者可以共用同一套演算法而各持不同金鑰。 講義中兩位領主「當面商定加密方法與解密方法」,但真正需要「耳語」保密的只有金鑰——這正是 Kerckhoffs 原則的體現。本週的所有安全定義也都預設敵手完全知道演算法 \(\Enc, \Dec, \Tag, \Vf\)。

  • 能列舉至少三種密碼學的定義並指出各自的著眼點;能說明為何「密碼學 \(=\) 加密」是不足的。

  • 記住「to define is to limit」的寓意:定義是研究工具,而非真理;本課程大量工作就是在挑選合適的定義。

  • Kerckhoffs 原則:安全性只能依賴金鑰的保密,不能依賴演算法的保密。