給定密鑰、明文和密文,我可以計算 CBC 模式下使用的 IV 嗎?
如果我有純文字、密文和 AES-128 CBC 操作的密鑰,我是否可以確定 IV,即使我不知道填充(假設填充遵循更常見的格式之一)?
我相信這應該是可能的,因為我的理解是 IV 僅用作加密中純文字的初始 XOR,因此應該能夠像這樣使用:
AESDecrypt(key, ciphertext) => (PlainText XOR IV); IV = ((Plaintext XOR IV) XOR (Plaintext))
這個對嗎?
很簡單。
只需在模式下解密前 8 個字節的加密緩衝區(1 個塊)
ECB
(您只需要加密的緩衝區和密鑰即可),然後將結果與輸入緩衝區進行異或運算。結果將是IV
。在解密時
CBC
,IV
只影響第一個塊。這就是為什麼在你的情況下只有第一個塊是不正確的。
我可以確定 IV
在 CBC 塊密碼操作模式下,不受 AES 限制,第一個塊的解密是
$$ P_1=Dec(K,C_1)\oplus \text{IV} $$
在哪裡 $ P_1 $ 是第一個明文和 $ C_1 $ 它的加密 $ P_1 $ 用鑰匙 $ K $ 在CBC操作模式下。所以
$$ \text{IV} = P_1 \oplus Dec(K,C_1) $$
即使我不知道填充
如果您知道明文,則可以使用一些標準填充方案來確定 IV,例如
- 位填充,加 1 並用零填充。
- PKCS#7 填充等(參見 Wikipedia 中的列表)
如果明文多於一個塊,則不需要考慮填充來計算IV。第一個明文塊足以計算 IV。
IV 僅用作加密中純文字的初始 XOR
很快,是的。長長的;CBC是一種傳播模式,CBC模式下的加密過程為
$$ \begin{align} C_1 &= Enc_k(P_1 \oplus IV)\ C_i &= Enc_k(P_i \oplus C_{i-1}),;; 1 < i \leq nb, \end{align} $$ 在哪裡 $ nb $ 是塊的數量。IV用於第一個塊,其餘加密使用IV的先前密文,連結。
CBC模式下的解密過程為 $$ \begin{align} P_1 =& Dec_k(C_1) \oplus IV\ P_i =& Dec_k(C_i) \oplus C_{i-1},;; 1 < i \leq nb, \end{align} $$ 在哪裡 $ nb $ 是塊的數量。
儘管 IV 僅在第一個塊中使用,但它會影響所有其他塊 - 傳播。如果我們擴展加密方程,我們可以更好地看到這一點
$$ C_j = Enc_k(P_j \oplus Enc_k(P_{j-1} \oplus \cdots Enc_k(P_1 \oplus IV)\cdots)). $$