如何在 CBC 中創建生成所需明文的密文(以前的密文和明文都是已知的)
我正在努力理解這部分文獻:
可以假設整個密文和明文都是已知的。
考慮到加密方法是 $ C_i = enc_k ( P_i \oplus C_{i-1}) $ 用密鑰k,解密方法為 $ P_i = dec_k(C_i) \oplus C_{i-1} $ .
為什麼等式(2)中說我們可以通過這種方式生成前一個塊的所需密文?
等式(3)的公式也不應該是: $ P’{i-1} = … $ 代替 $ P{i-1} = … $
我並沒有真正得到等式(4),為什麼它與等式(2)不同?
任何幫助表示讚賞。
CBC-R
為了更好地理解論文上的攻擊,最好看一下原始的 CBC-R 攻擊來理解上述攻擊。
- 實用填充 Oracle 攻擊,Juliano Rizzo 和 Thai Duong。USENIX 2010
這項工作展示瞭如何將填充預言機轉變為加密預言機。使用 padding oracle,我們可以解密任何密文。
選擇一個隨機密文 $ C_i $ ,實際上,任何密文都可以。使用填充預言機請求解密$$ P_i = Dec(C_i) \oplus C_{i-1}. $$通過控制 $ C_{i-1} $ 我們可以轉 $ P_i $ 到我們想要的任何值。目標是 $ P_x $ 比我們能設定的$$ C_{i-1} = P_x \oplus Dec(C_i). $$
正如我們所知,這將使解密 $ C_{i-1} $ 作為垃圾塊(隨機塊)。但我們也從一個隨機塊開始。同樣,作為第一步,請求解密然後調整前一個塊;
$$ C_{i-2} = P_{i-1} \oplus D(C_{i-1}) $$這裡註意我們請求解密 $ C_{i-1} $ 任意選擇 $ C_{i-2} $ 然後我們調整 $ C_{i-2} $ 所以解密是 $ P_{x-1} $ . 這很容易,因為它只是一個 x 或差異。
這樣,我們重複到開頭,最後調整的值是 CBC 模式的nonce。
這個加密預言機非常慢,因為它需要一個填充預言機來解密一個塊。對 FPGA 的攻擊(下一個標題)由解密預言機直接使用,因此速度非常快。
不可修補的晶片:Xilinx 7 系列 FPGA 比特流加密的全面突破
當惡意操作發生時,系統會停止,並且
WBSTAR
寄存器保持不變,然後在重新啟動後,他們會讀取WBSTAR
儲存解密內容的寄存器並洩漏 32 位。重複以顯示所有內容。這會將這個 bug 變成 FPGA 上的解密預言機。HMAC 密鑰也可以通過使用 FPGA 作為解密預言機的上述技術進行解密。
目的是將解密預言機變成加密預言機!
- 為什麼等式(2)中說我們可以通過這種方式生成前一個塊的所需密文?
實際上,這是目標,他們會在接下來的步驟中展示它。因此,您需要了解接下來的步驟。
- 等式(3)公式也不應該是:P’i-1=…而不是Pi-1=…
是的,應該是 $ P’_{i-1} $
請注意,對於任意選擇 $ C_i $ 和 $ C_{i-1} $ 使用解密oracle可以找出 $ P_i $ .
現在你想要一個值 $ P’_i $ 在FPGA中,為此,您需要對其進行加密 $ C’_i $ .
$$ P_i = dec_{KAES}(C_i) \oplus C_{i-1} \label{1}\tag{1} $$
如果你設置
$$ C’{i-1} = P_i \oplus C{i-1} \oplus P’_i \label{2}\tag{2} $$
然後將值代入方程 $ \ref{1} $
$$ P_i = dec_{KAES}(C_i) \oplus P_i \oplus C’_{i-1} \oplus P’_i $$樹葉;
$$ P’i = dec{KAES}(C_i) \oplus C’_{i-1} $$
CBC 有連結,所以他們需要修改到開頭。
$$ P’{i-1} = dec{KAES}(C’{i-1}) \oplus C{i-2} \label{3}\tag{3} $$
- 我真的沒有得到等式(4),為什麼它與等式(2)不同?
這也是一個錯字,因為
$$ C’{i-2} = P{i-1} \oplus C’{i-2} \oplus P’{i-1} \label{4}\tag{4} $$線索
$$ P_{i-1} = P’_{i-1} $$
它應該是
$$ C’{i-2} = P{i-1} \oplus \color{red}{C_{i-2}} \oplus P’_{i-1} $$
文章結果
- 這將解密預言機變成了加密預言機。並使用它可以創建一個有效的 HMAC。
- 因此,一個簡單的錯誤會導致機密性、完整性和身份驗證的喪失。