建議先遮住解答、限時 40 分鐘作答。題型刻意模仿「定義-反例-論證」的筆試風格。

寫出 SKE 的語法與正確性。接著給一個正確但完全不安全的 SKE,並說明它為何能通過「敵手無法恢復金鑰」這條檢驗。

語法:\(\sk \gets \KGen\);\(c = \Enc(\sk,m)\);\(m = \Dec(\sk,c)\)。正確性:\(\forall \sk, m:\ \Dec(\sk,\Enc(\sk,m)) = m\)。 「什麼都不做」方案 \(\Enc(\sk,m) = m\) 正確;因為 \(\Enc\) 不使用 \(\sk\),密文與金鑰獨立,敵手恢復金鑰的機率只有亂猜的 \(1/|\calK|\)——但訊息完全曝光,顯示「金鑰不被恢復」不是正確的安全目標。

  1. 完美保密的加密方案一定能偵測密文是否被竄改。

  2. 一個 MAC 若滿足 ,則它一定滿足 。

  3. 存在滿足 的 MAC,只是我們還沒找到。

  4. 確定性的 MAC 一定不安全,因為同一訊息永遠得到同一標籤。

  5. 確定性的加密一定不是 CPA 安全。

(a) 否:一次性密碼本完美保密但可延展。 (b) 是:能恢復金鑰就能對新訊息偽造(引理 [lem:d3d1])。 (c) 否:正確性保證「照抄黑盒輸出」即是偽造, 對所有正確的 MAC 都不成立(定理 [thm:d2impossible])。 (d) 否:MAC 的目標是不可偽造,不是隱藏;同一訊息同一標籤不構成偽造。實務 MAC 幾乎都是確定性的,而且因此自動強不可偽造。 (e) 是:查詢 \(m_0\) 得 \(c_0\),挑戰 \((m_0,m_1)\),比對 \(c^\ast \overset{?}{=} c_0\) 必勝。

以下定義的(\(\ast\))與(\(\dagger\))各是什麼?「敵手在觀察任意多個由誠實方產生的密文後,無法區分一個新密文對應的是 \(m_0\) 還是 \(m_1\)。」它比講義的迭代 (v) 強還是弱?為什麼?

(\(\ast\)):以明顯高於 \(1/2\) 的機率區分 \(m_0\) 與 \(m_1\) 的密文。(\(\dagger\)):被動觀察誠實方產生的密文(已知/任意明文,但不能選擇)。 比迭代 (v) 弱:(v) 允許敵手選擇被加密的明文與被解密的密文(CPA/CCA),能力更強,所以 (v) 的定義更難達成、更強。

給定一個滿足 的 MAC \((\KGen,\Tag,\Vf)\)。構造一個 MAC \(\MAC''\),使它仍滿足 但不是強不可偽造,且你的構造不能使用隨機位元(即 \(\Tag''\) 保持確定性)。

令 \(\Tag''(\ik,m) = \Tag(\ik,m)\concat 0\),而 \(\Vf''(\ik, m, \tau\concat b) = \Vf(\ik,m,\tau)\) 對任何 \(b \in \bits\) 都接受。 \(\Tag''\) 是確定性的;對新訊息的偽造仍對應到底層 MAC 的偽造,故滿足 ;但敵手查詢一次得到 \(\tau\concat 0\),輸出 \((m, \tau\concat 1)\) 即為新的合法對,違反 \(^{+}\)。 注意這個 \(\Vf''\) 不是典範驗證(它接受 \(\Tag''\) 不會輸出的標籤)——與命題 [prop:canonical-strong] 一致:典範驗證是「 \(\Rightarrow\) \(^{+}\)」的關鍵前提。

Alice 使用 Encrypt-and-MAC:送出 \((\Enc(\sk,m), \Tag(\ik,m))\),其中 \(\Enc\) 是 CPA 安全的隨機化加密、\(\Tag\) 是確定性的安全 MAC。說明一個只會竊聽的敵手可以學到什麼。

因為 \(\Tag\) 確定性且算在明文上,\(\Tag(\ik,m_i) = \Tag(\ik,m_j) \iff m_i = m_j\):敵手能看出哪些訊息相同、各出現幾次(相等性與頻率洩漏),即使加密本身是隨機化的。在是/否投票、公式化訊息的場景中這等於破解。這就是 E&M 不通用安全的原因(Bellare–Namprempre 2000)。

Alice 與 Bob 共用 \((\sk,\ik)\),使用 Problem 2 的 EtM 流程但沒有方向位元。Alice 送出「\(m =\) 請把密碼重設連結寄給我」。描述敵手如何讓 Alice 誤以為 Bob 向她提出同樣的請求;再說明方向位元為何能擋住它。

敵手攔下 \(\tilde c = (c,\tau)\) 並原封不動送回給 Alice。Alice 用同一把 \(\ik\) 驗證通過、用同一把 \(\sk\) 解密成功,得到「請把密碼重設連結寄給我」,以為是 Bob 的請求並照辦——敵手一個位元都沒改。 加入方向位元後,\(c\) 內含 \(b_{A\to B}\);Alice 只接受 \(b_{B\to A}\),解析出 \(b_{A\to B}\) 時立即拒絕。另一解法是兩個方向使用不同金鑰。

某即時語音系統在 UDP 上使用 Problem 2 (ii) 的協定。工程師抱怨「只要掉一個封包整通電話就斷了」。問題出在哪?你會怎麼改?改了之後敵手多了什麼能力?

嚴格計數器(只接受 \(\ctr =\) 期望值)在有自然遺失的通道上會失同步。改用滑動視窗:接受視窗內未見過的序號、丟棄視窗外或重複者(DTLS/SRTP 的做法),並由上層處理亂序。代價:敵手可以選擇性刪除某些封包而與自然遺失無法區分,且視窗內的重排被容忍;重放仍被擋住。

(a) 在典範驗證、確定性 \(\Tag\) 的假設下,用一句話說明為什麼給敵手 \(\Vf\) 預言機不會讓它更強。 (b) 若 \(\Vf\) 的實作用逐位元組比較並在第一個不同處提早返回,說明敵手如何利用時間偽造一個 16 位元組的標籤,並估計所需的查詢次數。

(a) \(\Vf(\ik,m,\tau)\) 的輸出只是 \([\tau = \Tag(\ik,m)]\),而 \(\Tag(\ik,m)\) 敵手本來就能向黑盒查到,所以 \(\Vf\) 給不出任何新資訊(嚴謹版見 Problem 1 (viii))。 (b) 逐位元組:對第 \(i\) 個位元組嘗試 256 個值,拒絕時間最長者即正確(因為比較多進行了一個位元組)。16 個位元組約 \(16 \times 256 = 4096\) 次查詢(期望值約一半),遠少於暴力的 \(2^{128}\)。對策:常數時間比較。

「只要加密夠強,就不需要 MAC。」請以不超過 150 字反駁,至少引用本週的兩個概念。

保密性與完整性是不同的性質,需要不同的工具:一次性密碼本是最強的保密(完美保密),卻可被位元翻轉任意竄改(可延展性)。敵手不需讀懂密文就能把「付 100」改成「付 900」。要讓收件端能偵測竄改,必須有一個依賴另一把秘密金鑰、且敵手無法偽造的標籤——這就是 MAC(EUF-CMA)。正確的組合是 Encrypt-then-MAC:對密文貼標籤、先驗證後解密。

用三句話說明「刻意削弱密碼學」在歷史上造成了什麼後果,並連結到 Blanchette 對密碼學的定義。

1990 年代美國出口管制迫使 Netscape 等產品在國際版使用 40 位元對稱金鑰與 512 位元 RSA。這些「出口級」套件在 2015 年仍被許多伺服器支援,成為 FREAK 與 Logjam 降級攻擊的入口——弱點比政策活得更久。這印證 Blanchette 的觀點:密碼學是規範行為的程式碼,因此必然被政治與法律介入,而介入的技術後果會長期留存。