Keys

密鑰、IV 和隨機數之間的主要區別是什麼?

  • July 5, 2020

隨機數、密鑰和 IV 之間的主要區別是什麼?毫無疑問,密鑰應該保密。但是 nonce 和 IV 呢?它們及其用途之間的主要區別是什麼?僅僅是在文獻和實踐中,IV被用作應該是唯一的分組密碼加密模式的“發起者”嗎?同樣的屬性也應該適用於隨機數,但是由於它不實例化我們稱之為隨機數的東西嗎?即:在 AES-CTR 模式下,IV 是隨機數+計數器。並且兩者都以明文格式放在密文的開頭。

對稱密碼學上下文中,密鑰是您保密的東西。任何知道您的密鑰(或可以猜到它)的人都可以解密您用它加密的任何數據(或偽造您用它計算的任何驗證碼等)。

(還有“非對稱”或公鑰密碼術,其中密鑰實際上有兩部分:允許解密和/或簽名的私鑰,以及允許加密和/或簽名的公鑰(從相應的私鑰派生)確認。)

在最廣泛的意義上, IV或初始化向量只是用於啟動某些迭代過程的初始值。該術語在幾個不同的上下文中使用,並在每個上下文中暗示不同的安全要求。例如,密碼散列函式通常有一個固定的 IV,它只是一個包含在散列函式規範中的任意常數,在輸入任何數據之前用作初始散列值:

來自免費百科全書 Wikipedia 的 Merkle-Damgård 散列函式圖

相反,大多數分組密碼操作模式需要一個隨機且不可預測的 IV,或者對於使用給定密鑰加密的每條消息至少是唯一的。(當然,如果每個密鑰僅用於加密單個消息,則可以使用固定 IV。)這種隨機 IV 確保每條消息的加密方式不同,因此看到使用相同密鑰加密的多條消息不會不要給攻擊者更多的資訊,而不僅僅是看到一條長消息。特別是,它確保對同一消息進行兩次加密會產生兩個完全不同的密文,這是加密方案在語義上安全所必需的。

在任何情況下,IV 都不需要保密——如果確實如此,那將是密鑰,而不是 IV。事實上,在大多數情況下,即使您想保留 IV 的秘密也不可行,因為接收者需要知道它才能解密數據(或驗證雜湊等)。

廣義上的nonce只是“僅使用一次的數字”。對隨機數的唯一一般要求是它不應該被使用兩次(在相關範圍內,例如使用特定密鑰進行加密)。用於塊密碼加密的唯一 IV 符合隨機數,但各種其他加密方案也使用隨機數。

關於“IV”和“nonce”中的哪些術語用於不同的分組密碼操作模式存在一些變化:一些作者只使用其中一種,而另一些則對它們進行區分。特別是對於 CTR 模式,一些作者保留術語“IV”來表示由 nonce 和初始計數器值串聯形成的完整密碼輸入塊(通常是全零位的塊),而另一些作者則不喜歡使用CTR 模式的術語“IV”。由於在 CTR 模式下隨消息發送的 nonce/IV 如何實際映射到初始分組密碼輸入中存在多種變化,這一切都變得複雜了。

相反,對於 CTR 以外的模式(或 EAX 或 GCM 等相關模式),術語“IV”幾乎普遍優於“nonce”。這對於 CBC 模式尤其如此,因為它對其 IV 的要求(特別是它們是不可預測的)超出了對 nonces 預期的唯一性的通常要求。

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