Aes

為什麼 IV 不必保密但必須是隨機的

  • January 8, 2016

CBC 等方案中使用的 IV 必須是隨機且不可預測的。但與此同時,它不必保密。

如果 IV 不必是秘密的,那為什麼它必須是隨機的呢?我無法理解這些看似矛盾的要求。

我已經看到了利用非隨機性的攻擊的描述。所以,我會理解為什麼需要隨機性。但是,當要求指定 IV 不必保密時,事情就會變得混亂!這似乎違背了隨機性的整個目的。

請有人幫助澄清這一點。

好的!這不會是我能給出的最佳答案,但由於我對這個主題了解很多,CSPRNG(密碼安全偽隨機數生成器),也稱為 Dertemistic Random Bit Generators (DRBGs)。

現在你的問題是關於 CBC 的,所以我將進入第二個問題,首先我想給出一個稍微不那麼技術/廣泛的答案,我會給你一個例子,說明 IV 的重要性在哪里至關重要。

假設我們有一個 STREAM CIPHER(如 RC4,它本身就充滿了問題,但這不是你問的)。在 WEP 中,RC4 非常糟糕地使用了 IV,但我們假設您可以對 RC4 進行大量更改以使其更強大(儘管不太優雅)。

在這種情況下,因為我們有一個流密碼,所以對明文攻擊的脆弱性非常高,這是因為如果我們多次使用同一個密鑰,那麼任何兩個使用同一個密鑰的文本之間的關係是已知的,這個意味著如果我們能猜出純文字,這在實際的日常傳輸中經常出現,那麼首先我們確切地知道密鑰流是什麼,然後從那裡找出初始密鑰是非常簡單的。

所以我們永遠不想對任何加密使用相同的密鑰兩次……分組密碼、流密碼等等。

好的,所以 IV 可以在很多方面使用,我購買 WEP 的原因是說您使用的是 64 位密鑰,然後確保沒有兩個“密鑰”相同,IV 會像隨機數一樣,也就是說,用於密鑰調度的有效密鑰是 (IV|Secret),現在正如我所說,這個特定的實現很糟糕,但這就是重點。

我們永遠不想擁有相同的密鑰兩次……有很多方法可以實現這一點。

現在在 RC4 的 WEP 實現中,使用 (IV|Secret) 作為初始密鑰,其中“Secret”為 40 位,“IV”為 24 位,這意味著只有 2^64 個可能的密鑰,但更重要的是,如果我們使用相同的“秘密”,那麼您只能從同一個秘密創建 2^24 (16,777,216) 個不同的密鑰……因為 40 位密鑰只是從使用者選擇或派生的 5 個隨機字節。16,777,216 是一個可笑的小數字,事實上,如果“秘密”沒有改變,我們會在大約 4300 個密鑰流中找到兩個匹配一半時間的 (IV|Secret) 實例。所以這是使用 IV 失敗的一個例子。

因此,如果我們假設我們的任何加密密鑰是 HMAC-SHA256(IV,Secret),那麼我們可以讓 IV 與 Secret 大小相同,因為將有 2^128,即超過 3 * 10 ^38 並且還會有這麼多可能的 IV,所以即使我們知道 IV 並且它或多或少地被用作隨機數,儘管 HMAC-HASH(IV,Secret) 比簡單地使用 HASH(IV|Secret) 更好…一旦我們完成了這項工作,我們就可以公開揭示 IV 是什麼。假設我們使用了一個好的 CSPRNG 和一個好的 HASH 函式,那麼要嘗試一個已知的純文字攻擊,我們不會進行一次猜測並揭示大量資訊,而是必須使用超過 3*10^ 38 個猜測。

這並不理想,但重點是…… IV 不是秘密,因為IV 可以確保實際已知的純文字攻擊更加複雜……在我的範例中,它變為 2^128發起已知純文字攻擊或部分已知純文字攻擊要復雜得多。

簡而言之*,IVs 的主要功能之一確保沒有兩個加密是相同的**,或者至少,找到兩個相同的加密是指數級的困難。*

如果您想更清楚,請問。這不是一篇寫得很好的文章,但我想我會在這個問題上有所了解。如果需要,我可以寫一個更具技術性的答案。

CBC mod 中的 IV 應用於將明文敏感化為初始值。所以“IV”沒有必要保密。另一方面,當我們在 CBC mod 中應用“IV”時,我們可以防止迭代攻擊並防止碰撞。

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