正式定義(講義 p. 7)
令 \(\alpha=\{\ct{a},\dots,\ct{z}\}\)(與 \(\Zn{26}\) 對應)。 \[\calK=\{0,1,\dots,25\}=\Zn{26},\qquad \calM=\calC=\alpha^* .\]
\(\KGen\):從 \(\calK\) 均勻抽出 \(\sk\)。
\(\Enc(\sk,m)\):把 \(m=m_1m_2\cdots m_\ell\) 拆成單一字元;對 \(i\in[\ell]\) 令 \(c_i=m_i+\sk\bmod26\),回傳 \(c=c_1c_2\cdots c_\ell\)。
\(\Dec(\sk,c)\):把 \(c=c_1c_2\cdots c_\ell\) 拆成單一字元;對 \(i\in[\ell]\) 令 \(m_i=c_i-\sk\bmod26\),回傳 \(m=m_1m_2\cdots m_\ell\)。
正確性:\((m_i+\sk)-\sk=m_i\)(反元素與結合律)。
幾點觀察:
固定 \(\sk\) 後,單一字母上的映射 \(x\mapsto x+\sk\) 是 \(\alpha\) 上的雙射(反函數是 \(x\mapsto x-\sk\)),因此 \(\Esk\) 在每個長度 \(\ell\) 上都是 \(\alpha^\ell\to\alpha^\ell\) 的雙射——符合 Week 2 的「\(\Esk\) 必須單射」。
\(\Enc\) 是確定性、無狀態的:同一 \((\sk,m)\) 永遠給同一個 \(c\)。Week 2 定理 6.1 已經告訴我們:這種方案不可能 IND-CPA 安全。
\(\sk=0\) 是合法金鑰,此時 \(c=m\)。這不是 bug——見 §[sec:p2] (v) 的討論:把它拿掉反而會洩漏資訊。
據傳 Caesar 最愛用的金鑰是 \(\ct{d}\leftrightarrow3\);\(\sk=13\) 的特例叫 ROT13,因為 \(13+13=26\equiv0\),加密與解密是同一個操作。
取 \(m=\ct{veni vidi vici}\)、\(\sk=3\): \[\begin{array}{r*{4}{c}@{\quad}*{4}{c}@{\quad}*{4}{c}} m: & \ct{v}&\ct{e}&\ct{n}&\ct{i} & \ct{v}&\ct{i}&\ct{d}&\ct{i} & \ct{v}&\ct{i}&\ct{c}&\ct{i}\\ & 21&4&13&8 & 21&8&3&8 & 21&8&2&8\\ +3: & 24&7&16&11 & 24&11&6&11 & 24&11&5&11\\ c: & \ct{y}&\ct{h}&\ct{q}&\ct{l} & \ct{y}&\ct{l}&\ct{g}&\ct{l} & \ct{y}&\ct{l}&\ct{f}&\ct{l} \end{array}\] 得 \(c=\ct{yhql ylgl ylfl}\)(空白保留不加密)。解密把每個數字減 3:\(24-3=21=\ct{v}\),依此類推。
Caesar 密碼的名字來自 Suetonius《羅馬十二帝王傳》〈神聖的尤利烏斯〉第 56 章:Caesar 寫機密信件時「把字母表的順序改變,使人讀不出任何一個字;若要解讀,須以第四個字母 D 代替 A,其餘類推」。 Suetonius 也記載其繼承人 Augustus 用位移 1(B 代 A、C 代 B……),且最後一個字母不繞回而寫成 AA。 當時並無任何破譯單字母密碼的技術記載;已知最早的頻率分析出自 9 世紀巴格達的 al-Kindī(§[sec:mono])。
討論:如何「均勻抽樣」金鑰?(講義 p. 8)
若 \(\abs{\calK}=N\),均勻抽樣指每把金鑰被選中的機率恰為 \(1/N\)。 講義的提示「擲五枚硬幣」:五個公平位元給出 \(2^5=32\) 個等機率結果,但我們只要 26 個。
重複執行:擲五枚硬幣得 \(x\in\{0,\dots,31\}\);若 \(x\le25\) 則輸出 \(\sk=x\),否則丟棄重來。 每一輪被接受的機率是 \(26/32=81.25\%\),期望輪數 \(32/26\approx1.23\);在「被接受」的條件下,\(0,\dots,25\) 每個的機率都是 \(\frac{1/32}{26/32}=\frac1{26}\),所以輸出恰好均勻。
一個常見的錯誤是直接取 \(\sk=x\bmod26\):此時 \(0,1,2,3,4,5\) 各有兩個 \(x\)(\(x\) 與 \(x+26\))對應,機率 \(2/32\),其餘 20 個只有 \(1/32\)。 六把金鑰比別人兩倍可能,敵手暴力搜尋時先試這六把,平均成本立刻下降。 對 Caesar 這只是小傷;對 \(26!\) 把金鑰的替換密碼,有偏差的抽樣可能讓「有效金鑰空間」縮水好幾個數量級(§[sec:mono])。 一般原則:從 \(2^k\) 個等機率結果得到 \(N\) 個等機率結果,若 \(N\nmid2^k\),必須拒絕一部分結果——沒有不丟棄又均勻的方法(因為 \(1/N\) 不是 \(1/2^k\) 的整數倍)。
討論:潛在弱點(講義 p. 8)
講義列出五個弱點,每一個都對應到 Week 2 的某個概念:
L4.6cmL9.8cm 弱點(講義原文) & 說明與對應概念
small \(\calK\) implies efficient brute force, if one can check guesses for \(\sk\) & \(\abs{\calK}=26\):敵手把 26 把金鑰全試一遍(§[sec:cryptanalysis])。「能檢查猜測」是前提:需要知道明文大概長什麼樣(Week 2 的唯一解距離:Caesar 只需約 1.5 個字母)或有一對 \((m,c)\)。
message, ciphertext pairs give \(\sk\) & 一對 \((m,c)\) 中任一個位置就給出 \(\sk=c_i-m_i\)。這是「已知明文攻擊」的極端:一個字母就完全破解。
structure, e.g. ‘gaps’ between consecutive letters, preserved & 相鄰字母的差 \(c_{i+1}-c_i=m_{i+1}-m_i\) 不受金鑰影響(講義 p. 22 的 trace,§[sec:cryptanalysis])。
frequency analysis & 每個明文字母都被同一個位移送到同一個密文字母,字母頻率分布只是整體平移(§[sec:cryptanalysis])。
(more fundamentally) deterministic encryption & Week 2 定理 6.1:確定性加密不可能 IND-CPA。事實上連 IND-EAV 都不過:\(m_0=\ct{aa}\)、\(m_1=\ct{ab}\),看密文兩字母是否相同即知 \(b\)(Week 2 §6.3、本週 Problem 1 (iii))。
講義強調:五個弱點中只有第一個可以靠把 \(\calK\) 變大來「修補」,而且這是必要而非充分的。 下一節的單字母替換密碼有 \(26!\approx2^{88}\) 把金鑰,暴力搜尋完全不可行,卻仍被頻率分析輕易攻破;其他四個弱點一個也沒有消失。 安全性不是「金鑰夠多」就好,而是要對一個明確的定義(IND-EAV/CPA/CCA)給出論證。