Stream-Cipher

關於兩次攻擊的基本問題

  • March 14, 2021

Dan Boneh 的 Crypto 1 Course 包括關於流密碼的課程,幻燈片如下:

在此處輸入圖像描述

他問這個問題:

在此處輸入圖像描述

而他給出的答案是 $ m \oplus p $ ,這就是為什麼這是不安全的。

但我不明白為什麼這是正確的。

如果:

  • $ m = 0011 $
  • $ k = 1100 $
  • $ p = 1010 $

然後 $$ m \oplus k = 1111 $$

和 $$ (m \oplus k) \oplus p = 0101 $$

和 $$ m \oplus p = 1001 $$

所以 $$ m \oplus p \neq ((m \oplus k) \oplus p) $$

我在上面做錯了什麼?

這不是兩次填充攻擊,這是 OTP 或任何流密碼的延展性。延展性意味著主動攻擊者可以將密文更改為另一個可以解密的密文,而在解密過程中不會出現任何錯誤。這就是為什麼我們需要完整性和身份驗證。

這個怎麼運作; 你發送 $ m\oplus k $ 在通信通道上,主動攻擊者擷取(也可能停止)並修改密文 $ p $ 那麼消息是 $ m \oplus k \oplus p $ , 當接收者用密鑰解密時 $ k $ 他們將收到修改後的消息 $ m \oplus p $ . 如果消息已知或其格式已知,這可能非常危險。例如,攻擊者可以Attack at the noon!轉向Attack at the moon!

對於最後一個方程;

$$ m \oplus p \neq (m \oplus k) \oplus p $$

這是我們所期望的,除了 $ k=0 $ .

引用自:https://crypto.stackexchange.com/questions/88755