定義(講義 p. 27)
把上一節的方案從 \(\Zn{26}\) 換成 \(\Zn2=\{0,1\}\),加法變成 XOR,就是。講義的標題寫 Miller–Vernam–Mauborgne,是它的三位「發明人」(§1.3)。
令 \(\calK=\{0,1\}^n\),\(\calM=\calC=\{0,1\}^{\le n}\)。
\(\KGen\):從 \(\{0,1\}^n\) 均勻抽出 \(\sk\)(擲 \(n\) 枚公平硬幣)。
\(\Enc(\sk,m)\):若 \(m=m_1\cdots m_\ell\),回傳 \(c=m\oplus\sk_1\cdots\sk_\ell\)(逐位元 XOR 金鑰的前 \(\ell\) 位)。
\(\Dec(\sk,c)\):若 \(c=c_1\cdots c_\ell\),回傳 \(m=c\oplus\sk_1\cdots\sk_\ell\)。
正確性:\((m\oplus k)\oplus k=m\oplus(k\oplus k)=m\oplus0^\ell=m\),依序用了結合律、XOR 的自反性、單位元——§[sec:modular] 的群性質。加密與解密是同一個函數。
\(m=\ct{01000101}\)(ASCII 的 ),\(\sk=\ct{01110110}\): \[\begin{array}{r@{\;}c@{\;}*{8}{c}} m &=& 0&1&0&0&0&1&0&1\\ \sk &=& 0&1&1&1&0&1&1&0\\\hline c=m\oplus\sk &=& 0&0&1&1&0&0&1&1 \end{array}\] 解密:\(c\oplus\sk=\ct{00110011}\oplus\ct{01110110}=\ct{01000101}=m\) ✓。
對任意固定長度 \(\ell\le n\),OTP 在 \(\{0,1\}^\ell\) 上完美保密。
Proof. 固定 \(m,c\in\{0,1\}^\ell\)。\(\Enc(K,m)=c\iff K_1\cdots K_\ell=m\oplus c\),而 \(K\) 的前 \(\ell\) 位在 \(\{0,1\}^\ell\) 上均勻,所以 \(\Pr_K[\Enc(K,m)=c]=2^{-\ell}\),與 \(m\) 無關;由 KL-IMC Lemma 2.4 得證。 ◻
等價的「遊戲」說法:在 IND-EAV 遊戲中,不論 \(b\) 為何,挑戰密文 \(c=m_b\oplus K\) 都是 \(\{0,1\}^\ell\) 上的均勻隨機字串,與 \(b\) 獨立;任何敵手(再聰明、算力再大)猜中 \(b\) 的機率都恰好是 \(\tfrac12\)。
千萬不要重用金鑰(講義 p. 28)
講義 p. 28 的整頁只有一張圖(來源:davidlowryduda 與 crypto.stackexchange):
單獨看,\(c_1\) 和 \(c_2\) 都是完美的均勻雜訊;但 \[c_1\oplus c_2=(m_1\oplus\sk)\oplus(m_2\oplus\sk)=m_1\oplus m_2 ,\] 金鑰完全消失,兩張圖片疊在一起清晰可見。圖片的例子特別有說服力,因為人眼本身就是極好的「訊息分布先驗」。
已知其中一則:\(m_2=c_1\oplus c_2\oplus m_1\)——另一則立刻全部暴露。
兩則都不知道(crib dragging):猜 \(m_1\) 的某一小段是常見字(如 ),把它 XOR 到 \(m_1\oplus m_2\) 的每個位置上;若某個位置出現可讀的英文,猜測大概正確,而且得到 \(m_2\) 的一段,再回頭推 \(m_1\) 的下一段……如此交替「拖行」直到兩則全部還原。VENONA 計畫(§[sec:p2])本質上就是對數千對重用的密碼本做這件事。
IND-CPA 攻擊:敵手查詢 \(\Enc(\sk,0^\ell)=\sk_1\cdots\sk_\ell\),直接拿到金鑰(Problem 2 (ii))。或用 Week 2 的兩次查詢:先查 \(m_0\) 得 \(c'\),挑戰 \((m_0,m_1)\) 得 \(c\);\(c=c'\iff b=0\)。
可塑性:不必知道金鑰也能把 \(c\) 改成 \(c\oplus\Delta\),解密成 \(m\oplus\Delta\)——例如把匯款金額的某幾位翻轉。OTP 對完整性毫無保障。
「幾乎」重用也不行:若金鑰不是真均勻(例如由打字員「隨手亂打」、或由確定性機器產生),統計偏差就會洩漏訊息;二戰德國外交部的 GEE 系統用機器產生的「偽隨機」密碼本,1944 年被美方破解。
歷史:Miller、Vernam、Mauborgne(與 Shannon、Kotelnikov)
1882:加州銀行家 Frank Miller 出版《Telegraphic Code to Insure Privacy and Secrecy in the Transmission of Telegrams》,描述用「只用一次、用後銷毀」的隨機位移數列加密電報代碼——OTP 的全部要素。此事 2011 年才由 Steven Bellovin 重新發現(Cryptologia 35(3))。
1917–1919:AT&T 工程師 Gilbert Vernam 發明用打孔紙帶把金鑰與明文的 Baudot 碼逐位元 XOR 的電傳打字機加密(美國專利 1,310,719,1918 年 9 月 13 日申請、1919 年 7 月 22 日核准)。Vernam 原本的金鑰帶是會循環的。
約 1918–1920:美國陸軍的 Joseph Mauborgne 指出金鑰必須真隨機且永不重複,否則可破(他 1914 年便出版過密碼分析小冊,深知重複金鑰的弱點;Parker Hitt 1916 年的《Manual for the Solution of Military Ciphers》也系統化了這類攻擊)。「Vernam 的機器 + Mauborgne 的要求」= 一次性密碼本。
1941:蘇聯的 V. A. Kotelnikov 在 1941 年 6 月 19 日的機密報告中獨立證明了 OTP 的不可破性。
1945/1949:Claude Shannon 於 1945 年的機密報告(1949 年公開發表為〈Communication Theory of Secrecy Systems〉)嚴格定義完美保密、證明 OTP 達成它,並證明任何完美保密方案的金鑰都至少和訊息一樣長——即 §[sec:perfect] 的兩個定理。
講義投影片把 Mauborgne 拼成「Maugborgne」,是筆誤。
反思:完美但脆弱(講義 p. 29)
講義 p. 29 的三個要點:
1. 完美保密做得到,但「脆弱」。
它的安全性證明建立在三個全部必須成立的條件上:金鑰真正均勻、至少與訊息一樣長、絕不重用。違反任何一條,不只是「安全性下降一點」,而是像 VENONA 那樣整批崩潰。
2. 邊緣用例:華府—莫斯科「紅色電話」。
訊息量極小、只有兩個通訊方、而且雙方都有外交管道可以安全遞送成卷的金鑰紙帶——一般通訊都不具備這些條件。
古巴飛彈危機(1962 年 10 月)期間,外交訊息的傳遞與解碼耗時數小時,促成 1963 年 6 月 20 日美蘇在日內瓦簽署備忘錄;熱線於 1963 年 8 月 30 日啟用。
它從來不是電話,而是電傳打字機線路(經倫敦、哥本哈根、斯德哥爾摩、赫爾辛基到莫斯科的有線電報,另有一條無線電備援)。
加密設備是挪威 Standard Telefon og Kabelfabrik 製造的 ETCRRM II(Electronic Teleprinter Cryptographic Regenerative Repeater Mixer)——一台 Vernam 式一次性紙帶混合器。雙方各自產生自己方向的金鑰紙帶,透過大使館交換。
1986 年升級為傳真、2008 年改為加密電子郵件鏈路。
3. 金鑰分發是密碼學的難題。
OTP 需要「和所有未來訊息加起來一樣長」的金鑰,並且要事先安全地送到對方手上。但如果有辦法安全地送這麼長的金鑰,為什麼不直接送訊息? 我們真正想要的是短金鑰、長訊息——與完美保密所允許的恰恰相反。 Shannon 的定理說這在資訊論意義下不可能;出路是放寬定義:
只要求對多項式時間的敵手安全(Week 2 的 IND 定義),
並允許可忽略的優勢。
下週起的主角——偽隨機生成器(PRG)——正是用一把短金鑰「偽造」一條長得像均勻的金鑰流,把 OTP 變成串流密碼。它的安全性不再是無條件的,而是依賴一個明確陳述的計算假設——這正是 §[sec:reflections] 描述的現代路線。
能完整寫出 OTP 的 \((\calK,\calM,\calC,\KGen,\Enc,\Dec)\),用群性質證明正確性,並證明完美保密(\(\Pr[\Enc(K,m)=c]=2^{-\ell}\))。
金鑰重用:推導 \(c_1\oplus c_2=m_1\oplus m_2\),並說明 crib dragging 與已知明文的後果。
\(\abs\calK\ge\abs\calM\) 的證明思路(\(\calM(c)\) 的大小論證)。
三個限制(長金鑰、單次使用、金鑰分發)及它們為何「不可避免」。
歷史:Miller/Vernam/Mauborgne、Shannon 1949、VENONA、熱線。