Cbc

Padding Oracle Attack CBC Mode:如果明文的字元集已知,那麼可以加快程序嗎

  • November 24, 2020

考慮 AES-256、128 位塊和 PKCS#5 填充。

在 Padding Oracle Attack 期間,一個經過處理的密文字節被發送到 oracle,我們最終希望找出相應的明文字節是什麼。

如果我知道明文中可能的字元集只會是小寫英文字母,那麼有什麼方法可以加快解密過程嗎?如果是這樣,那麼具體會是什麼樣子?

我假設您大致了解填充預言攻擊的機制。假設我們有一些密文塊 $ c_i = c_{i-1} \oplus E(k,m_i) $ 我們想找到最後一個字節 $ m_i $ . 讓 $ b $ 表示最後一個字節 $ m_i $ ,我們正在努力尋找。

考慮形式的密文 $ (c_{i-1} \oplus \texttt{00} \cdots \texttt{00} g,c_i) $ , 在哪裡 $ g $ 是一個字節。這樣的密文解密為 $ m_i $ ,除了最後一個字節已從 $ b $ 至 $ b \oplus g $ . 當伺服器解密時,它看到一個以字節結尾的字元串 $ b \oplus g $ — 這個字元串有有效的填充嗎?在大多數情況下,只有在 $ b \oplus g = \texttt{01} $ (讓我們假設 $ m_i $ 並沒有結束 $ \cdots \texttt{02},b $ 或者 $ \cdots \texttt{0303},b $ , ETC)。當伺服器告訴我們選擇哪個 $ g $ 導致有效的填充,我們可以解決 $ b = \texttt{01} \oplus g $ .

如果你知道 $ b $ 是僅有的 26 個可能值之一,那麼只有 26 個可能的值 $ g $ 您需要嘗試的 - 與您必須嘗試所有 256 個字節選擇的一般情況相比 $ g $ . 我只提到了查找明文最後一個字節的情況,但同樣的邏輯適用於任何字節。

如果我知道明文中可能的字元集只會是小寫英文字母,那麼有什麼方法可以加快解密過程嗎?如果是這樣,那麼具體會是什麼樣子?

是的,它有幫助。首先,請記住填充預言的工作原理是伺服器只發回一個資訊。填充不正確

在 padding oracle 中,修改前一個密文的字節 $ C_{n-1} $ 並希望伺服器不會返回不正確的填充。我們發送給伺服器的是 IV 加上更新後的整個密文 $ C_{n-1} $ 希望它會洩露最後一個區塊的資訊 $ C_n $ . (嗯,這只是最後一個塊。在 Padding 預言機攻擊中,實際上,伺服器是一個解密預言機,可以用來解密所有塊)。

解密 $ S_n = Dec(k, C_n) $ 不受攻擊者的控制。這將用於顯示伺服器端的最後一個塊; $ P_n = S_n \oplus C_{n-1} $ .

雖然攻擊者不知道 $ S_n $ 他們可以設置的字節 $ C_{n-i} $ 使 $ P_n $ 在小寫字母和大寫字母加上從0x00to的填充字節的範圍內0x10(像 AES 一樣的 16 字節長度分組密碼)。我們可以從中看出這一點;

m is in the 26 message characters
r is random
x is not known random

P_n   = ..............m
-----------------------
S_n   = ..............x
          x-or
C_n-1 = ..............r

我們知道方程 $ P_n = S_n \oplus C_{n-1} $ 我們可以使用 26 個字元來修改方程$$ m \oplus t = \texttt{0x01}. $$26 個不同的值 $ t $ 足以測試最後一個填充。其他職位類似。

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