Initialization-Vector

在哪些情況下 IV 應保密?

  • February 6, 2017

什麼時候必須對 IV 保密?

在多處描述 IV 不需要保密的方式存在歧義。這種模棱兩可是否表明事實上存在必須對 IV 保密的情況?或者它是一種在幾個流行來源中持續存在的語言怪癖?

CISSP 狀態的(ISC)2 指南(重點是我的):

在大多數情況下, IV 不需要保密,但重要的是它永遠不會與相同的密鑰一起重複使用。

Crypto.StackExchange:

IV通常不需要保密,但是,在大多數情況下,重要的是初始化向量永遠不會在相同的密鑰下重用。

維基百科:

初始化向量與密鑰具有不同的安全要求,因此IV通常不需要保密

我了解 IV 所扮演的角色以及通常被認為是非機密資訊的原因。我很好奇是否存在必須將其視為秘密資訊的情況,或者這僅僅是重複出現的語言無操作。

通常,在一個設計合理的密碼系統中,所有必須保密的東西要麼是實際數據(並且系統的目的就是保持這種機密性)要麼是密鑰。根據Kerckhoffs 的原則,其他所有內容都應該是公開的,或者至少可以在沒有不良影響的情況下發布。

現在碰巧許多密碼系統被表示為迭代過程,從“初始值”(或“初始化向量”)開始,即“IV”。可以想像,在這樣的系統中,IV是一把鑰匙。一個人為的例子是一個帶有雜湊函式的手工流密碼:

  • 狀態s被初始化為某個值。
  • 流密碼通過重複散列s產生偽隨機字節:輸出的第一個字節是H ( s ),然後是H ( H ( s )),依此類推。

這樣的流密碼是一個迭代過程,通過散列該狀態重複產生“執行狀態”的下一個值。因此,狀態的起始值是嚴格意義上的初始值*,*也是流密碼的密鑰,因此需要保密。

然而,這是一個相當人為的例子。這種流密碼在幾個方面都非常弱(不要使用它!)。在一個設計合理的密碼系統中,當密鑰可重複使用時,我們真的更喜歡它:只能使用一次的密鑰往往意味著問題(這是RC4的問題之一)。相反,我們更喜歡可以多次使用的密鑰(例如加密多條消息),可能還有其他不需要保密但每次都必須更改的值。這是加密系統通常會發生的情況:一個秘密密鑰,可以重複用於多條消息,以及一個必須為每條消息重新生成但不需要保密的每條消息“隨機數”;因此,nonce 可以與消息一起傳輸。大多數加密系統中的“IV”實現了這一點“


從更概念的角度來看,“IV”的概念並沒有精確定義。因此,表達“IV永遠不需要保密”之類的絕對詞勢必會激怒某人,在某個地方,他會以一種略帶異國情調的方式使用 IV,並發現某種情況可以稱為“IV”並且仍然需要保密。使用“通常”或“在大多數情況下”這樣的措辭是避免引發激烈辯論的簡單方法。

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