AES CBC:何時使用新 IV
我試圖弄清楚何時使用新的 IV 進行 AES-CBC 通信以及我的方法是否安全。
這是來自類似問題的 Thomas Pornin的引述:
因此,總而言之:當您要加密明文數據時,您必須選擇一個新的隨機 IV(具有加密強的生成器),該明文數據是在通過線路發送前一個加密塊之後獲得的。
我需要對此進行澄清。我目前的設置是兩個使用命令/應答方案(主機和從機)相互通信的設備。從機有一個真正的隨機數發生器。
我的想法是,主人從奴隸那裡請求一個 IV,然後用它來加密一個命令。從機解密命令,然後使用命令的最後一個密文作為其加密的 IV,基本上將命令和答案視為連續流。發送應答後,從機創建一個新的 IV,然後主機可以再次請求該 IV。
這安全嗎?謝謝!
讓其他參與者選擇您的 IV 可能是不明智的。如果不出意外,攻擊者可以強制 IV 重用。
更常見的是,質詢和響應方案將質詢放在純文字中,並按規定使用密鑰/IV。其他參與者可以加密隨機選擇的挑戰的事實通常是密鑰所有權的證明。
您似乎有些擔心,從屬設備的響應應該以某種方式與主設備的響應相關聯。我在這裡能想到的一個常見協議是雙棘輪協議。其中(大致)純文字通知雙方獨立跟踪的密鑰推導步驟。
如果您沒有安全通道,那麼您就不能信任對方發送給您的 IV,因為攻擊者很可能會篡改它。即使您確實擁有安全通道,另一方也可能不會被認為特別值得信賴。
如果您的主設備具有某種 CSPRNG,無論是否由真正的隨機數生成器提供,您都可以使用它。否則,如果您可以擁有某種持久性計數器,處理此問題的一種簡單方法是使用像 HKDF 這樣的密鑰派生函式。只需使用您的共享密鑰作為密鑰派生函式中的熵輸入,使用計數器作為鹽,然後為每條消息生成一個新密鑰和 IV。發送計數器而不是帶有消息的 IV,對方可以派生您的密鑰。
如果主設備具有受信任的時鐘,即使您沒有永久計數器,這也可以工作。您可以使用時間戳加上更短暫的計數器,或保證不會重複的任何其他類型的數據,並在 HKDF 中使用它。然後,您只需將其與消息一起發送,雙方就可以就密鑰和 IV 達成一致。
正如foreverska 提到的,您也可以使用雙棘輪協議,儘管這更複雜。它還要求雙方至少在最初都有一個 CSPRNG,因為您需要一個用於 Diffie-Hellman 密鑰。