Hash

為什麼使用初始化向量 (IV)?

  • January 16, 2020

為什麼使用初始化向量 (IV)

  • IV是如何使用的?
  • 使用 IV 的優點/缺點是什麼?
  • 為什麼使用 IV 而不是更長的密鑰,其中密鑰的某些部分是公開的?
  • 如果 IV不夠 隨機,各種安全屬性會怎樣?
  • IV總是公開的嗎?如果是這樣,這是區分 IV 和 Key 的屬性嗎?
  • 鑑於 IV 通常是公開的,是否存在任何涉及更改 IV 的中間人攻擊的攻擊?

許多密碼算法被表示為迭代算法。例如,當在CBC 模式下使用塊密碼加密消息時,每個消息“塊”首先與前一個加密塊進行異或,然後對異或的結果進行加密。第一個塊沒有“前一個塊”,因此我們必須提供一個傳統的替代“第零個塊”,我們稱之為“初始化向量”。一般來說,IV 是開始執行算法所需的任何數據,並且不是秘密的(如果它是秘密的,我們將其稱為“密鑰”,而不是 IV)。

如果您看一下MD5,您會發現它是一種迭代算法,它具有“執行狀態”(四個 32 位字)並按 64 字節塊處理消息數據,每個塊產生下一個執行狀態;最終狀態是雜湊輸出。這必須從一個傳統的初始狀態開始,這在 RFC 的第 3.3 節中進行了描述。

由於 IV 有一些成本(例如,它必須與消息一起傳輸),它不僅僅是出於審美原因:使用 IV 的算法需要它來滿足某種安全屬性,這可能意味著對什麼值有一些限制靜脈注射可能有。這實際上取決於算法。例如,對於 MD5,IV 是固定的,這不是問題。對於 CBC,請參閱上一個問題的答案。由於均勻隨機性是一個困難的要求(alea 是一種稀缺資源,尤其是在嵌入式系統中),如果加密算法只需要一個不重複的 IV(例如一個簡單的計數器),這被認為是一件好事;這就是EAX等較新的加密模式所需要的全部內容。

靜脈注射可以公開,但沒有什麼能強迫你這樣做。它仍然傾向於具有與密鑰不同的生命週期,因為(對於對稱加密)每條消息都需要一個新的 IV,但不一定是新密鑰。例如,使用TLS 1.2,在隧道設置期間創建會話密鑰(“握手”),然後將數據加密為許多“記錄”(每條記錄最多 16 kB 數據),並且每條記錄都有自己的 IV .

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