關於反證CCA安全性的問題
我對Katz & Lindell 的教科書(第 2 版)第 97 頁第 3.7 章中給出的 CCA 安全性反駁有疑問。它的工作原理如下:
- 考慮我們基於 PRF 的構造: $ \text{Enc}(k, m) := (r , s) = (r , F (k, r ) \oplus m) $
- 放 $ m_0 = 0^n $ 和 $ m_1 = 1^n $
- 對手 A 獲得 $ (r , s) $ 並翻轉 s 的第一位。將密文表示為 $ (r , s’ ) $
- A 發送 $ (r , s’ ) $ 到他的解密神諭
- A獲得 $ 0\mathbin|1^{n−1} $ 或者 $ 1\mathbin|0^{n−1} $ 這讓他贏得了比賽
**我的問題:**為什麼 A 沒有獲得 $ 0\mathbin|1^{n−1} $ 和 $ 1\mathbin|1^{n−1} $ 或者 $ 0\mathbin|0^{n−1} $ 和 $ 1\mathbin|0^{n−1} $ 因此仍然可以區分消息,如果 $ n>2 $ ?
當神諭得到 $ (r,s’) $ 這意味著它得到 $ m’ = 0\mathbin|1^{n−1} $ 或者 $ m’ = 1\mathbin|0^{n−1} $ 因為預言機向對手發送了加密的 $ m_0 $ 或者 $ m_1 $ 那是 $ (r,s) $ .
$ 0\mathbin|0^{n−1} $ 或者 $ 1\mathbin|1^{n−1} $ 並非如此,因為位翻轉不會影響 $ F $ . 神諭會得到 $ (r,s’) $ 然後它會計算 $ F(k,r) $ ,那麼流將與 $ s’ $ . 如果我們用子索引來表示位
$$ F(k,r) \oplus s’ = \left[F(k,r)_0 \oplus \color{red}{s’_0},F(k,r)1 \oplus s’1, \ldots, F(k,r){n-1} \oplus s’{n-1}\right] $$那麼我們有
$$ F(k,r) \oplus s’ = \left[F(k,r)0 \oplus \color{red}{\overline{s_0}},F(k,r)1 \oplus s_1, \ldots, F(k,r){n-1} \oplus s{n-1}\right] $$
正如我們所看到的,只有一個位置受到影響,即第一個位置。