Encryption

用 CCA 打破一個時間墊

  • March 29, 2016

我被教導:

although OTP is CPA secure, it is not the case with CCA.

我試圖通過展示它如何未能通過 IND 測試來弄清楚如何用 CCA 打破 OTP。

注意:看到這個答案,但沒有設法提取適當的證明

  • 所以根據測試,攻擊者選擇兩條長度相同的消息m1、m2,發送給測試者。
  • 在下一階段,測試人員私下創建一個加密密鑰,隨機選擇要加密的消息,並返回 c*,即選擇的加密消息。
  • 現在,只要他選擇的消息不是 c*,攻擊者就可以使用他選擇的密文能力並解密他想要的任何消息(可能是消息 - 我不確定這個細節),以便猜測哪個消息已加密(m1 或 m2)。

我已經想到的:

也許我們可以將 c* 分開,解密兩個部分並連接。或者我們也可以在 c* 的末尾添加一個 0,然後解密結果。

但是這兩種方法都不起作用,因為密鑰在原始消息的長度中 - 所以它不能解密其他長度的消息。

所以我添加了一個條件,即攻擊者只能解密相同長度 c* 的消息(顯然還有原始消息)。

所以現在我考慮解密 c* 但將最後一位替換為 0。

假設 c* 長度為 n,所以在加密結果中,表示為 r*,我知道前 n-1 位是 m1 或 m2,除了最後一個,所以我會通過比較來區分消息每個都有 n-1 位(當然,這需要為測試發送不同的消息)。

我覺得我錯過了一些東西,但無法弄清楚到底是什麼。

有沒有人有更好的用 CCA 打破 OTP 的例子,或者可以證明我的回答是正確的?

PS只是澄清一下:我當然假設在每次加密中都會替換密鑰(但這並不重要,因為解密是使用相同的密鑰完成的)。

它實際上相當簡單。攻擊者知道 $ m_0 $ , $ m_1 $ ,以及挑戰密文 $ c = m_r \oplus s $ , 對於未知位 $ r $ 和一個未知的字元串 $ s $ ; 他的工作是恢復 $ r $ .

他可以嘗試的一件事是選擇任意密文 $ c’ $ (它需要與挑戰密文不同,但可以是相同長度的任何其他內容),並要求對其進行解密。解密是 $ m’ = c’ \oplus s $ ; 然後他可以恢復 $ m_r = c’ \oplus m’ \oplus c $ ; 然後他可以比較 $ m_r $ 至 $ m_0 $ 和 $ m_1 $ 推斷 $ r $ .

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