將 AES 擴展到 256 位塊大小的簡單方法
使用具有 128 位塊大小的標準 AES 作為 256 位塊密碼的最佳方法是什麼?我知道 CMC 和 EME 似乎可以達到這個目的,但它們似乎比 256 位塊情況所需的複雜。(我想避免依賴隨機數的唯一性。)
CBC 的以下變體是否安全?
讓 $ (P_1, P_2) $ 是 256 位明文的兩個 128 位塊 $ P $ , 和 $ I $ 是 128 位(公共)IV(可能不是唯一的)。秘密 AES 密鑰是 $ k $ .
要加密,請設置 $ C_0 = E_k(I) $ , $ C_1 = E_k(P_1 \oplus C_0) $ , $ C_2 = E_k(P_2 \oplus C_1) $ , $ C_3 = E_k(P_1 \oplus C_2) $ . 結果是 $ (C_2, C_3) $ .
要解密,請設置 $ C_0 = E_k(I) $ , $ P_1 = D_k(C_3) \oplus C_2 $ , $ C_1 = E_k(P_1 \oplus C_0) $ , $ P_2 = D_k(C_2) \oplus C_1 $ .
加密和解密都只需要 4 次 AES 塊加密/解密(如果 $ I $ 可以用作 $ C_0 $ 直接地)。
關鍵問題是這是否安全,即使 $ I $ 可能不是唯一的。如果兩者 $ P $ 和 $ P’ $ 使用相同的值加密 $ I $ ,攻擊者應該無法確定任何關於 $ P $ 和 $ P’ $ 除了它們是否相等(整體上)。對於正常 CBC 模式,情況並非如此,因為如果 $ P_1 = P_1’ $ , 然後 $ C_1 = C_1’ $ .
事實證明,這種“模式”可以通過兩個選擇的消息來區分;一個是解密模式,一個是加密模式。
第一個查詢處於解密模式,它是密文 $ (C, 0) $ (在哪裡 $ C $ 可以是任何非零值),並且具有任意 IV。
由於解密的工作原理, $ P_1 $ 結果明文是 $ D_k(0) \oplus C $ ; 這給了我們 128 位的值 $ Z = P_1 \oplus C $ 和 $ E_k(Z) = 0 $ .
我們的第二個查詢是加密模式,它是明文 $ (Z, Z) $ 和 $ IV=Z $ . 如果您了解加密的工作原理,我們會看到 $ C_0 = 0 $ , $ C_1=0 $ , $ C_2=0 $ , $ C_3=0 $ , 所以得到的密文是 $ (0,0) $ .