Hmac

為什麼經過身份驗證的加密再次對同一消息不安全?

  • May 24, 2020

它是Boneh 和 Shoup的應用密碼學研究生課程一書中的練習 9.14 (9.1)。

讓 $ (E, D) $ 是一個 AE 安全密碼。

一個。 $ E_1(k,m):=(E(k,m), E(k,m)); $ $$ D_1(k,(c_1,c_2)):= \begin{cases} D(k,c_1) & & \text{ if } D(k,c_1)=D(k,c_2),\ \text{ reject } & & otherwise \end{cases} $$

灣。 $ E_2(k,m):={c \leftarrow E(k,m),\text{ output } (c,c) }; $ $$ D_2(k,(c_1,c_2)):= \begin{cases} D(k,c_1) & & \text{if } c_1=c_2,\ \text{reject} & &otherwise \end{cases} $$

證明 (b) 部分是 AE 安全的,但 (a) 部分不是。

我知道(a)和(b)的不同之處在於 $ E(k,m) $ 再次使用將產生不同的密碼。

我執行以下操作:

讓算法使用 XOR,

令 R 是算法的隨機數,

$ c_1 = E(m)\oplus R_1; c_2 = E(m)\oplus R_2 $

$ c_1 \oplus c_2 = R_1 \oplus R_2 = R_3 $

讓 $ B=u \oplus v $ ,其中 u 是原始標頭,v 是我的標頭。

$ c_1 \oplus B \oplus R_3 = E(m) \oplus B \oplus R_2 $

然後消息由我更改,因此它不是 AE 安全的。

但是我的老師要求我不要假設算法,我不知道我現在該怎麼做。

我猜 HMAC 兩次使用相同的密鑰可能是重點,但我仍然不知道我現在該怎麼辦。

有人能幫幫我嗎?

謝謝!

回想一下定義:一個密碼是 AE 安全的,當且僅當它對於選擇的密文攻擊是安全的並且具有密文的完整性。嘗試通過攻擊遊戲 $ (E_1,D_1) $ 和 $ (E_2,D_2) $ : 如果對手成功了,他能成功嗎? $ (E,D) $ ?

很容易看出 $ (E_1,D_1) $ 和 $ (E_2,D_2) $ 是 CPA 安全的。如果攻擊者可以區分兩個消息在任一密碼下的加密,那麼他可以與原始密碼進行 CPA 遊戲,送出所有輸出 $ E $ 從原始遊戲中,並贏得與原始密碼的 CPA 遊戲。這意味著 CPA 的安全性 $ (E_1,D_1) $ 和 $ (E_2,D_2) $ 減少到 $ (E,D) $ .

讓我們看一下密文完整性遊戲 $ (E_2,D_2) $ . 如果對手可以製作有效的密文 $ (c,c) $ , 然後 $ (c,c) $ 不是攻擊遊戲定義的先前獲得的任何密文,這意味著對手已經獲得了新的密文 $ c $ 對於原始密碼 $ (E,D) $ . 所以密文完整性為 $ (E_2,D_2) $ 減少到 $ (E,D) $ .

現在讓我們看一下密文完整性遊戲 $ (E_1,D_1) $ . 假設對手已經獲得了有效的密文 $ (c^1,c^2) $ 通過加密一條消息 $ m $ . 回想一下,對手的目標是創建一個他以前從未見過的有效密文。他能做到嗎?

是的,很容易: $ (c^2,c^1) $ 是一個有效的密文,並且具有壓倒性的機率 $ c^1 \ne c^2 $ 所以這是一個與對手已經看到的不同的密文。

現在假設對手送出 $ m $ 再次,並獲得第二個有效密文 $ (c^3,c^4) $ 對於相同的明文 $ m $ . 對手可以創建一個新的有效密文嗎?

是的:混搭。例如 $ (c^1,c^3) $ 是另一個有效的密文,它有別於以前的具有壓倒性機率的密文。

第一個反例很容易修復:您可以修改 $ E_1 $ 進入 $ E_3 $ 哪個

對兩個密文進行排序,並且 $ D_1 $ 進入 $ D_3 $ 它檢查密文的順序是否正確。密碼 $ (E_3,D_3) $ 不會受到第一個反例的影響,但仍然容易受到第二個反例的影響(要麼 $ (c^1,c^3) $ 或者 $ (c^3,c^1) $ 是一個新的有效密文)。

第二個反例更有趣,因為它表明兩者 $ (E_1,D_1) $ 和 $ (E_3,D_3) $ 從根本上被打破。它們的弱點是它們允許攻擊者測試兩個密文是否是相同明文的加密。假設對手想知道某個消息是什麼 $ m $ 是給定密文的 $ (c^1,c^2) $ ,並且他們設法猜測該消息在一個小集合中 $ {m_1,\ldots,m_n} $ . 他可以送出每個 $ m_i $ 用於加密,獲取密文 $ {(c_1^1,c_1^2), \ldots, (c_n^1,c_n^2)} $ . 如果他可以測試哪個密文 $ {(c_1^1,c^2), \ldots, (c_n^1,c^2)} $ (或每對適當交換 $ (E_3,D_3) $ ) 是有效的,例如通過觀察嘗試解密的結果或時間,讓對手找出消息是什麼。

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