場景設定
兩位領主 Francis 與 Henry 各自駐紮在營帳(pavilion)中,想要「安全地」通訊。他們事先當面商定了三樣東西:
一個加密方法:用一把秘密金鑰把訊息(message)轉成密文(ciphertext);
一個解密方法:用同一把秘密金鑰把密文還原成訊息;
一把秘密金鑰(他們互相耳語,確保沒人聽見)。
之後 Francis 要傳訊給 Henry 時:加密 \(\to\) 寫在羊皮紙(parchment)上 \(\to\) 交給最信任的騎士(rider)送達 \(\to\) Henry 解密閱讀。
如果兩位領主不太聰明,設計出的加密方案很「壞」——這裡的「壞」可能是什麼意思?
羊皮紙上的密文可以被改動、增補、加長、縮短、重新排列嗎?改過之後解密出來還會「有意義」嗎?
騎士可能被俘、被殺、被收買、被威脅,或被迫延遲送達嗎?
這三組問題分別對應到本週接下來的三個主題:保密性(第 [sec:iterations] 節)、完整性(第 [sec:integrity] 節)、以及保密性與完整性之外的性質(第 [sec:beyond] 節)。
秘密金鑰加密(SKE):語法與正確性(講義 pp. 8, 11)
語法(syntax)
講義說「我們會不厭其煩地回到這個定義」(ad nauseam)。上面的思想實驗其實已經描述了一個,又稱對稱式加密(symmetric encryption)或私鑰加密(private-key encryption)。
一個秘密金鑰加密方案是三個演算法的三元組 \(\SKE = (\KGen, \Enc, \Dec)\):
\(\KGen\)(key generation):不需輸入(或只輸入安全參數),輸出一把秘密金鑰 \(\sk \in \calK\): \[\sk \gets \KGen.\]
\(\Enc\)(encrypt):輸入金鑰 \(\sk\) 與訊息 \(m \in \calM\),輸出密文 \(c \in \calC\): \[c = \Enc(\sk, m) \quad\text{(若 $\Enc$ 隨機化,則寫 } c \gets \Enc(\sk, m)\text{)}.\]
\(\Dec\)(decrypt):輸入金鑰 \(\sk\) 與密文 \(c\),輸出訊息 \(m\)(或一個特殊符號 \(\bot\) 表示「拒絕」): \[m = \Dec(\sk, c).\]
\(\calK, \calM, \calC\) 分別稱為金鑰空間、訊息空間與密文空間。
講義特別強調:「上面的敘述完全沒有說到正確性或安全性,只有語法。」 這是本週最重要的觀念之一。語法只規定「有哪些演算法、各吃什麼、吐什麼」; 一個語法上合格的 SKE 可以完全沒用(解不回來)或完全不安全(密文就是明文)。 三者的關係如圖 2。
正確性(correctness)
若以秘密金鑰 \(\sk\) 把訊息 \(m\) 加密成密文 \(c = \Enc(\sk, m)\), 則以同一把金鑰解密該密文會還原出同一個訊息:\(m = \Dec(\sk, c)\)。 用量詞寫出來: \[\forall\, \sk \gets \KGen,\ \forall\, m \in \calM:\qquad \Dec\bigl(\sk, \Enc(\sk, m)\bigr) = m .\] 若 \(\Enc\) 是隨機化的,則上式要求對 \(\Enc\) 的每一種隨機選擇都成立(完美正確性,perfect correctness);有些方案只要求「以壓倒性的機率成立」。
講義再次提醒:「這完全沒有說到安全性!」正確性只保證「合法的收件人解得回來」,對敵手能做什麼隻字未提。
「什麼都不做」方案(講義 p. 12):\(\Enc(\sk, m) = m\),\(\Dec(\sk, c) = c\)。顯然正確(\(\Dec(\sk,\Enc(\sk,m)) = m\)),但密文就是明文,毫無保密性可言。
「全部吞掉」方案:\(\Enc(\sk, m) = 0\)(不論 \(m\) 為何),\(\Dec\) 隨便輸出。敵手從密文確實學不到任何關於 \(m\) 的資訊——但 Henry 也一樣,方案不正確,沒有任何用途。
這兩個極端告訴我們:正確性與安全性是互相拉扯的要求,好的方案要同時滿足兩者。
KL-IMC 把金鑰寫成 \(k\)、演算法寫成 \(\mathsf{Gen}, \mathsf{Enc}_k(m), \mathsf{Dec}_k(c)\),並加入安全參數 \(1^n\)(\(\mathsf{Gen}(1^n)\) 輸出長度 \(\ge n\) 的金鑰)。講義的 \(\sk \gets \KGen\)、\(\Enc(\sk, m)\) 與之完全對應,只是省略了安全參數。考試時兩種寫法都可接受,但請前後一致。
能默寫 SKE 的語法(三個演算法、各自的輸入輸出與空間)。
能用量詞寫出正確性,並說明「正確性不蘊含安全性」(舉「什麼都不做」方案為例)。
能說明思想實驗中三類「會出錯的地方」分別對應哪個安全性質。