Padding-Oracle

每個塊都用 AES 填充嗎?

  • September 29, 2018

我正在查看有關 Oracle 填充攻擊的教程,我想知道,如果 1 個塊上只有填充,你如何找到其餘的塊(不是最後一個)?

我沒有正確理解填充嗎?

我沒有正確理解填充嗎?

您沒有正確理解填充攻擊。

是的,只有最後一個塊(通常)在 CBC 模式下被填充,但這並不意味著我們只能攻擊最後一個塊;這意味著我們只能使用最後一個塊。

在 CBC 模式下,塊的解密 $ i $ 計算為 $ P_i = D_k( C_i ) \oplus C_{i-1} $ , 在哪裡 $ D_k $ 是使用未知(對攻擊者)密鑰的解密 $ k $ . 現在,攻擊者可以看到 $ C_i, C_{i-1} $ , 所以如果他能推斷出這個值 $ D_k( C_i ) $ ,然後他找到了明文塊的值 $ P_i $ .

因此,攻擊者所做的是構造密文,其中 $ C_i $ 顯示為最後一個密文塊 $ C’_n $ ,他嘗試了倒數第二塊的各種值

$$ 1 $$ $ C’_{n-1} $ ; 他送出這些密文,並查看解密後是否有有效的填充。 他們是否(主要)取決於最後一個解密的明文塊,即 $ P’n = D_k( C’n ) \oplus C’{n-1} $ ; 通過嘗試各種值 $ C’{n-1} $ , 他可以推導出值 $ D_k( C’_n ) $ .

因此,這種填充預言攻擊可用於解密任何塊,而不僅僅是最後一個塊。


$$ 1 $$倒數第二個塊,如果你(像我一樣)更喜歡正確使用“倒數第二個”這個詞……

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