Encryption

幫助我了解高級加密標準 (AES)

  • November 25, 2013

認為 $ E_k $ $ (a, b, c) $ 是值的加密 $ a, b $ 和 $ c $ 帶鑰匙 $ k $ 通過加密算法 AES (AES-128) 和每個 $ a, b $ 和 $ c $ 是 300 位整數值。

還假設這個算法在我的問題情況下在 CBC 模式下工作。

如果 $ V_1= E_k(a, b, c) $ 和 $ V_2= E_k(c, a, b) $ ,我的問題是:這兩個值是 $ V_1 $ 和 $ V_2 $ 相等與否?

對於 AES-128,分組密碼一次工作 128 位。無論您使用哪種分組密碼模式(ECB、CBC、CTR 等),加密都將始終在 128 位塊上完成​​。還假設正在使用填充。

讓我們假設 $ m = (a||b||c) $ 然後 $ m’ = (c||a||b) $ . 這給了我們兩個獨立的消息,每個 900 位。

使用 $ V_1=E_k(m) $ 和 $ V_2=E_k(m’) $ , 你可以這麼說吧 $ V_1 \neq V_2 $ .

但是,根據您使用的分組密碼模式(例如:電子密碼本),單個 128 位密碼塊很可能在 $ m $ 和 $ m’ $ . 對於 CBC,在這種情況下您不應該有相同的密碼塊。

NB 我發現Niels Ferguson 和 Bruce Schneier 的Practical Cryptography是研究和回答這類問題的一個很好的資訊來源。*

$ V_{1} $ 和 $ V_{2} $ 當使用相同的輸入正確實現 cbc 時,永遠不應該相等 $ (a,b,c) $ .

見以下施工方案:

cbc 計劃維基百科

即使您有兩個不同的加密過程,即一個用於 $ V_{1} $ 另一個為 $ V_{2} $ ,CBC 的正確實現使用必須是隨機的初始化向量 IV。通過將這個隨機值異或到流中,除了使用相同的 IV 之外,相同的輸入永遠不會有相同的輸出。使用這些是一個非常薄弱的​​環節,應始終避免。

正如你所指定的 $ V_{1} $ 來自輸入 $ (a,b,c) $ 和 $ V_{2} $ 來自輸入 $ (c,a,b) $ 這也不會給出相同的輸出。有關詳細答案,請參閱本文中的其他答案,因為他們已經指出了這一點。

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