Chosen-Plaintext-Attack

在填充 oracle 攻擊後創建自己的密文?

  • July 21, 2017

我已經編寫了一個腳本,該腳本根據填充 oracle 為分配中斷密文,但想知道如何繼續使用我想要的任何純文字創建自己的密文?

班級論壇上有人提到異或中間步驟(或 $ D(C_i) $ 在異或之前 $ C_{i-1} $ )(取自破解原始密文的過程)與我選擇生成的純文字[Ci−1Math Processing Error]. 我不明白這是如何工作的,或者我是否誤解了海報是一起異或的。我看怎麼樣 $ C_{i-1} $ $ D(C_i) \oplus C_{i-1} = P_i $ ,但不確定如何以這種方式使用自己的純文字。

我正在尋找有關如何處理此問題的提示,或對第 2 段的說明。

如果您使用 CBC 模式,您應該能夠使用填充 oracle 攻擊為任何給定的明文生成密文。您需要能夠修改 IV 才能使其完全工作。

這是因為每次您打亂較早的塊時,您都可以通過修改之前塊的密文(或第一個塊的 IV)來修復它。如果您無法修改 IV,您將無法修改除第一個塊之外的所有塊(第一個塊將變成垃圾)。

這個想法是從頭開始,並創建一個隨機密文塊 $ C_n $ (這可以是完全隨機的、一組零或您想要的任何特定值)。然後,當您對該塊使用 padding oracle 攻擊時,您將收到該塊的解密值: $ \operatorname{Dec}(C_n) $ (因為這就是填充預言可以為您做的:解密您傳遞給它的任何密文,無論它是否有效)。

注意 $ \operatorname{Dec}(C_n) $ 將是垃圾,但是,由於您使用的是 CBC 模式,您可以修改前面的塊[Cn−1Math Processing Error]在某種程度上,它實際上會異或 $ C_{n-1} $ $ \operatorname{Dec}(C_n) $ 到您選擇的明文 $ P_n $ : $ C_{n-1} := \operatorname{Dec}(C_n) \oplus P_n $ .

完成後,繼續執行這些步驟。你已經知道了[Cn−1Math Processing Error], 計算 $ C_{n-1} $ $ \operatorname{Dec}(C_{n-1}) $ 使用oracle,然後設置 $ C_{n-2} $ 所以CBC模式會將它異或成[Pn−1Math Processing Error], ETC。 $ P_{n-1} $

唯一的問題是第一個塊。如果您有權設置 $ IV $ 那麼這不是問題,您只需確保 $ IV $ 設置為一個值,因此它將異或 $ \operatorname{Dec}(C_1) $ 進入[P1Math Processing Error]. 否則你會被卡住,你必須把第一個塊當作垃圾。 $ P_1 $

另請參閱https://crypto.stackexchange.com/a/50027/34606

我已經編寫了一個腳本,該腳本根據填充 oracle 為分配中斷密文,但想知道如何繼續使用我想要的任何純文字創建自己的密文?

你不能。填充 oracle 攻擊不會為您提供足夠的資訊來生成任何明文的密文。不過,您可以對一些純文字執行此操作。

最簡單的例子是任何一個塊消息。由於填充 oracle 攻擊為您提供了對 $ y = E(x) $ ,您可以計算(填充的)單塊明文 $ p $ 密文[(x⊕p)||yMath Processing Error]使用任何這樣的對。(這裡的第一個塊是 IV。) $ (x \oplus p) || y $

如果您願意加擾前一個明文塊,您還可以修改擷取的原始消息的任何塊。這是班級論壇的人在談論的內容:

你決定修改[PiMath Processing Error]至[Pi′Math Processing Error]. 自從 $ P_i $ $ P_i’ $ $ P_i = D(c_i) \oplus c_{i-1} $ 你想要 $ P_i’ = D(c_i’) \oplus c_{i-1}’ $ , 讓 $ c_{i-1}’ = c_{i-1} \oplus P_i \oplus P_i’ $ . 那改變[Pi−1Math Processing Error]到某個隨機值,除非你碰巧知道什麼 $ P_{i-1} $ $ D(c_{i-1}’) $ 是並且可以計算明文(甚至可以通過加擾來修改[Pi−2Math Processing Error]反過來)。 $ P_{i-2} $

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