Block-Cipher
為什麼我們只在 Counter Mode 中加密 nounce + counter?
我不明白,僅加密 nonce + Ctr 並將其異或到我們的明文,而不是加密所有內容的優勢是什麼。(如果我們的分組密碼可以很容易地解密)
轉向的其他缺點是什麼
$ c_i = E_k(n + i) \oplus m_i $
進入
$ c_i’ = E_k((n + i) \oplus m_i) $
這應該可以防止在不破壞整個塊的情況下翻轉一點,對吧?
這應該可以防止在不破壞整個塊的情況下翻轉一點,對吧?
是的,它確實這樣做了,但代價是失去了類似於歐洲央行的安全性。
因此,讓我們通過竊聽者的安全遊戲,為簡單起見選擇 $ n_1=0 $ 和 $ n_2=2^{32} $ .
- 挑戰者生成密鑰 $ k $ .
- 攻擊者生成兩條長度相同的消息 $ m_0=m\parallel (m+1) $ 和 $ m_1=m\parallel m $ 對於任意選擇 $ m $ 並送出。
- 挑戰者加密它們並返回 $ c_b=n_b\parallel \operatorname{CTR’}_k(m_b)=n_b\parallel c’\parallel c’’ $ 對於一個統一選擇的 $ b\in{0,1} $ .
- 對手檢查是否 $ c’=c’’ $ ,如果是,則返回 0,否則返回 1,並且此答案始終正確,因此針對竊聽者(!) 的安全性已被完全破壞。
雖然上面的內容既好又簡單,但它需要可預測的隨機數才能工作。fgrieu 在評論中提出了一種不可預測的隨機數的變體,對上述內容進行了以下修改:
- $ m_0=0\parallel 1 \parallel 0 $ (即第一個和第三個塊全為零,第二個塊只有 LSB 集)和 $ m_1=0\parallel 0\parallel 0 $ (即三個全零塊)
- 現在的加密是 $ c_b=n_b\parallel c’\parallel c’’\parallel c’’’ $
- 對手現在返回 1 如果所有三個 $ c’,c’’ $ 和 $ c’’’ $ 成對不同,否則對手返回 0。