Aes
CBC 模式下的固定前綴 IV
我知道初始化向量需要是不可預測的。它適用於整個 IV,還是適用於 IV 中的每一位?
我有多個熵差的設備共享相同的密鑰,我想確保 IV 是唯一的。我正在使用 AES-128 CBC。
我可以使用 IV 的某些位作為設備的 ID 嗎?例如,我可以將 IV 的前 32 位設置為設備的 IP 地址,將其餘 96 位設置為隨機值嗎?這仍然被認為是“不可預測的”嗎?
整個 IV 需要不可預測……但是知道一些位會使猜測 IV 變得更容易。
不可預測的 IV 的要求與選擇的明文攻擊有關。如果攻擊者可以預測 IV,他們可以選擇第一個明文塊,以便他們可以驗證他們對先前消息內容的任何猜測。為此,他們必須能夠最終得到完全正確的密碼輸入——即使是一個位的差異也會產生一個完全不同的密文塊,而不是驗證猜測。(它會驗證一個稍微不同的“猜測”,這有時可能很重要,因此非常接近預測仍然可能是一個問題。)
通過在可預測的 IP 地址上使用 IV 的某些位,您可以更輕鬆地猜測其餘部分。如果其他 96 位是完全隨機的,那麼攻擊者將有一個 $ 2^{-96} $ 正確猜測它的機會,這是無用的小。如果它不那麼隨機,那麼攻擊者可能有機會。
通過減少 IV 的隨機部分,您也更有可能發生 IV 衝突(在同一設備的 IV 之間)。這會有所幫助的情況很少。例如,如果您有一個好的 CSPRNG,但在不同設備上的種子相等/接近。如果是這種情況,您最好另外使用 IP/MAC 播種 CSPRNG。或者按照CodesInChaos 的建議使用 IV 的確定性推導。