講義用蘇格拉底式的問答,連續提出五個候選定義,每提出一個就問「Strong enough?」,再用一個反例推翻(或修正)它。這段推演是理解「安全定義為何微妙」的最佳範例,也是 Problem Set 1 第一題的直接前身——那裡會對 MAC 做一模一樣的事。
五次迭代
夠強嗎?不夠。 反例:「什麼都不做」方案(\(\Enc(\sk,m)=m\))根本不使用金鑰,敵手當然無法從密文「恢復」金鑰——但訊息完全曝光。 教訓:金鑰不是我們真正想保護的東西,訊息才是。以「金鑰不被恢復」作為目標,瞄準錯了對象。 (形式名稱:key recovery security,KR。)
夠強嗎?不夠。 反例:想像一個方案讓敵手只能恢復訊息的第一個字母或第一個單字。「無法恢復(整個)訊息」被滿足了,但洩漏第一個字顯然不可接受——「ATTACK AT DAWN」與「RETREAT AT DAWN」的第一個字母就足以決定戰局。 (形式名稱:one-wayness,OW。)
夠強嗎?不夠。 反例:想像一個方案不洩漏訊息的任何一個位元,卻洩漏統計資訊——例如每個字母出現的次數。字母頻率足以攻破所有單表代換密碼;更一般地,「這兩封信是不是同一封」、「這封信比平常長很多」等資訊都可能致命。 教訓:「部分」太狹隘;敵手學到的可能是關於訊息的函數值,而不是訊息的子字串。
夠強嗎?接近了(Getting warmer)。 講義承認這不是形式化的敘述(「有意義」、「新的」要怎麼定義?),但它抓到了正確的直覺:前三次迭代其實都是這句話的特例。形式化之後就是 Goldwasser–Micali(1982)的語意安全(semantic security),以及與之等價、更好操作的不可區分性(indistinguishability)——見第 1.3 小節。 講義接著問:如果敵手的能力更強呢?
夠強嗎?是\(^{\ast}\)。 這涵蓋了我們預期會遇到的敵手:選擇明文攻擊(chosen plaintext attack, CPA)與選擇密文攻擊(chosen ciphertext attack, CCA)。星號的意思是:這真的「合理」嗎?給敵手這麼大的能力是否過於悲觀?答案見下方的「現實中的預言機」。
為什麼允許敵手「讓選定的訊息被加密」是合理的?因為現實系統常常主動替敵手加密:
中途島(1942):美軍懷疑日軍密電中的目標代號「AF」是中途島,便命令中途島守軍以明文發報「淡水蒸餾設備故障、缺水」。不久美軍截獲日軍情報「AF 缺水」——美軍成功讓敵方「加密了自己選定的明文」,證實 AF 即中途島。這是教科書級的選擇明文攻擊。
網頁 cookie:伺服器把使用者的資料加密後存成 cookie;使用者(可能是敵手)可以藉由修改自己的帳號名稱、購物車內容等,讓伺服器加密幾乎任意的明文。
解密預言機:伺服器收到密文後若回報「解密失敗/填充格式錯誤」,就等於洩漏了解密結果的一部分。Bleichenbacher(1998)對 RSA PKCS#1 v1.5 與 Vaudenay(2002)對 CBC 填充的填充預言機攻擊(padding oracle attack)都是用這種「一個位元的解密預言機」完整還原明文。
所以「Yes\(^{\ast}\)」的星號答案是:是的,這很現實。寧可悲觀地假設敵手很強。
安全定義的兩個面向:(\(\ast\))與(\(\dagger\))
講義 p. 17 把上面的練習抽象成一句話:「定義安全是微妙的!」並歸納出任何安全定義都隱含的兩個面向。這是全週(也是整門課)的核心框架,Problem Set 1 的 (iv) 小題會直接考它。
一個安全定義由兩個部分組成:
(\(\ast\))什麼事情不應該可能發生(what should not be possible)——敵手的目標或「獲勝條件」。例如:推論出關於訊息的有意義資訊;偽造一個合法的標籤。
(\(\dagger\))在什麼能力之下(given what capabilities)——敵手的能力或「攻擊模型」。例如:只能觀察密文;或額外能讓選定的訊息被加密、選定的密文被解密。
固定其中一個面向,就能直覺地比較定義:
(\(\dagger\))給敵手越多能力 \(\Rightarrow\) 定義越強(越難達成),因為方案必須抵擋更強的敵手。
(\(\ast\))敵手的獲勝條件越容易達到(例如「恢復任何部分資訊」比「恢復整把金鑰」容易)\(\Rightarrow\) 定義越強,因為方案必須連「小勝」都不讓敵手拿到。
五次迭代中,(i)\(\to\)(iv) 是在放寬(\(\ast\))——讓敵手越來越容易「算贏」;(iv)\(\to\)(v) 則是在加強(\(\dagger\))。
講義指出,這類「敵手學不到訊息內容」的性質常被統稱為機密性/保密性(confidentiality),有些文獻偏好 secrecy。KL-IMC 多用 secrecy,Bellare 等人的論文多用 privacy。三者在本課程中視為同義。
延伸補充:如何把「學不到任何新資訊」形式化?
講義把形式化留給後續週次與 KL-IMC §§1–3,這裡先給一個「預告」,幫助你理解 (iv)、(v) 到底在說什麼。
完美保密(Shannon, 1949;KL-IMC 第 2 章)。
最強的版本:密文與訊息在統計上完全獨立——對任意訊息分布、任意 \(m\) 與 \(c\), \[\Prob[M = m \mid C = c] = \Prob[M = m].\] 敵手看到密文後對訊息的「後驗信念」與「先驗信念」一模一樣,等於什麼都沒學到。一次性密碼本(one-time pad)達成此性質,但 Shannon 證明任何完美保密方案的金鑰必須至少與訊息一樣長且不能重複使用——實務上太昂貴,於是現代密碼學改採「計算上」的版本。
不可區分性(indistinguishability;KL-IMC §3.2)。
把「學不到新資訊」改寫成一場遊戲(實驗,experiment):
挑戰者執行 \(\sk \gets \KGen\)。
敵手 \(\adv\) 選兩個等長的訊息 \(m_0, m_1\) 交給挑戰者。
挑戰者擲一枚公平硬幣 \(b \in \bits\),回傳 \(c^\ast \gets \Enc(\sk, m_b)\)。
\(\adv\) 輸出猜測 \(b'\);若 \(b' = b\) 則 \(\adv\) 獲勝。
方案安全,若所有(計算能力有限的)敵手獲勝機率都只比亂猜的 \(\tfrac12\) 高出一個可忽略的量。 直覺:如果連「這是 \(m_0\) 還是 \(m_1\) 的密文」這種一個位元的資訊都猜不準,那麼敵手就不可能學到任何更複雜的資訊。
只給敵手上面這些 \(\Rightarrow\) EAV-security(竊聽者安全;對應迭代 (iv))。
另外給敵手一個加密預言機 \(\Enc(\sk,\cdot)\) \(\Rightarrow\) IND-CPA(KL-IMC §3.4)。
再給一個解密預言機 \(\Dec(\sk,\cdot)\)(不得查詢 \(c^\ast\) 本身)\(\Rightarrow\) IND-CCA(KL-IMC §5.1)。對應迭代 (v)。
再強的定義也必須允許某些事:(1) 訊息長度(遊戲要求 \(|m_0| = |m_1|\),因為一般的加密無法隱藏長度——隱藏長度需要填充,代價很高);(2) 「有通訊發生」這件事本身(流量分析屬於另一個領域)。 把這些排除在外並不是漏洞,而是誠實地宣告定義的邊界——再次呼應「to define is to limit」。
能依序說出五次迭代,並為每一次給出講義的反例(這類「為什麼 X 不夠強」的題目很適合筆試)。
能明確說出一個安全定義的兩個面向(\(\ast\))、(\(\dagger\)),並用它們分析任何給定的定義。
知道 CPA/CCA 中「預言機」的現實對應(中途島、cookie、padding oracle)。
知道不可區分性遊戲的大致流程,以及為何要求 \(|m_0| = |m_1|\)。