Aes

如何從 AES-128 OFB 的 32 位值生成 128 位 IV

  • December 5, 2019

我不知道如何從 32 位 IV 中確定合適的 128 位 IV(初始化向量)。加密 AES-128 OFB。32 位 IV 有值 0x9a23773c(在數據前面傳輸)。有任何想法嗎?

OFB 模式直接使用 IV 作為塊加密的輸入 - 在本例中是 AES。所以通常不可能有 32 位 IV,它必須與塊密碼的塊大小完全相同。OFB 沒有定義從 32 位 nonce 到 128 位 IV 的任何方式 - 如果定義了這樣的操作,那麼它是在 NIST 特別出版物 800-38A:建議塊密碼操作模式中的 OFB 定義之外定義的。

然而,通常 32 位被簡單地定義為 128 位值的最左邊位,在右側附加零。然而,將值放在右側也可能是一種可能性。實際上,只要結果保持唯一,這些位就可以通過任何操作放置在任何地方。但似乎不太可能發生這樣的操作,因為它沒有任何功能。只需嘗試將字節複製到 128 / 8 = 16 字節緩衝區的前面或後面,然後嘗試如果您猜對了。

或者問創建協議的人,當然,問這樣的事情永遠不會有壞處,因為他們應該為你定義它。

根據對分組密碼模式的調查(第 30-37 頁),如果 IV 是 nonce,OFB 模式不是 SemCPA 安全的,而是“具有固定的 IV 序列的安全,如計數器”。這回應了本文中的一個細微差別:Rogaway 使用的安全模型允許對手選擇隨機數,因此針對基於隨機數的 OFB 的攻擊依賴於對隨機數的對抗性控制。

這意味著只要應用程序 100% 控制隨機數的值(這樣攻擊者永遠無法影響它們),那麼任何將 32 位輸入唯一擴展到 128 位輸出的方法都可以很好地擴展四。

重要的附帶條件:隨機選擇 32 位值是不安全的,衝突風險非常高,並且對於像 OFB 這樣的流密碼,隨機數重用的後果是災難性的。這也意味著以下語句最好只引用一個範例消息:

32 位 IV 有值0x9a23773c(在數據前面傳輸)。

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