Initialization-Vector
生成強大的唯一初始化向量
如何確定我是否正在生成一個獨特且強大的初始化向量?如果我的模式正在生成密鑰流?生成一個獨特而強大的初始化向量有什麼科學解釋嗎?
“獨特”相對簡單。這是你以前沒用過的東西。唯一性通常只適用於個人,您只需要使用目前密鑰驗證 IV 對您的使用是唯一的。
“強”與您的操作模式對 IV 的要求有關。不同的模式需要對 IV 進行不同的約束。與…有關
好的 IV 的“科學解釋”來自安全證明的減少。研究人員設計了一個方案(如操作模式,如 CBC),該方案使用需要 IV 的加密原語(如分組密碼,如 AES),然後他們證明(或至少爭論)使用 IV 的方案給定對 IV 的某些約束,與底層原語一樣安全。換句話說,如果方案可以被打破,那不是因為 IV 的要求,因為 IV 的要求不會使方案變弱。這個原則適用於 IV 的每一種形式,無論是流密碼還是分組密碼。對 IV 的這些限制是您應該使用的強 IV 值。
例如,分組密碼的 CBC 模式要求 IV 是不可預測的。所以通常它是a)隨機或b)由密鑰加密的唯一值。(兩個最常見的 IV 要求是它是隨機的或唯一的。) CBC 有一個安全證明,表明如果滿足 IV 的其中一個標準,則生成的方案與底層分組密碼一樣強大。
您如何驗證 IV 是否良好?您應該將分析放入生成 IV 的過程中,然後您可以在生成 IV 後對其進行測試。主要關注點應該放在如何生成 IV 並驗證它是否符合規範的要求。
- 例如:您滿足的要求可能是 IV 是隨機的。
/dev/random
您可以使用作業系統( 、CryptGenRandom
等)中的高質量本機隨機數生成器來執行此操作。您可以對輸出進行一些測試,以驗證明顯的事情沒有出錯,例如 IV 不會全為零。但是您無法驗證 IV 實際上是隨機的,只能驗證它看起來足夠隨機。驗證隨機或與隨機無法區分的東西真的很難實時完成。- 另一個例子:您滿足的要求可能是 IV 是唯一的。您可以使用每次生成 IV 時遞增的計數器,並確保計數器具有足夠的大小,不會過早翻轉。或者您可以使用時間戳並註意確保您不會在時間戳的解析期內生成多個 IV。如果您想非常小心,您可以保留所有以前使用過的 IV 的列表,並檢查每個新 IV 的列表,以確保您不會重複使用它。
總結是:密碼學研究人員說,考慮到 IV 的限制,某些方案是安全的。這些約束將廣為人知,並且應該可供您查找。