Block-Cipher
可以使用時間戳的雜湊作為 AES 的 IV 嗎?
消息格式包括明文的日期時間欄位。也可以使用這個欄位(或其一些雜湊)作為初始化向量嗎?
在這種情況下,CBC 是正在使用的模式。
這取決於連結模式。對於最近的模式,如EAX和GCM,IV 只需要不重複,所以時間戳是可以的(只要你注意不要發出具有相同時間戳的兩條消息:如果你發出兩條消息,這可能是一個問題例如,在同一毫秒內,或者如果發送者時鐘通過手動操作或NTP以某種方式重置;值得注意的是,考慮到 NTP 協議很少受到保護,因此主動攻擊者可能會在您的時鐘上耍花招)。
使用 CBC,IV 必須是一致隨機的,並且根據情況,攻擊者應該是無法預測的。例如,如果攻擊者可以觸發他自己選擇的某些消息的加密,他可以使用可預測的 IV 來獲得精確的塊加密,然後他可以使用這些加密以受控方式更改其他一些消息。時間戳是高度可預測的。一個誘人的設計是使用HMAC在時間戳上計算 IV,為此使用共享密鑰;一般來說,使用密鑰派生函式將您的加密密鑰擴展為兩個密鑰,一個用於 HMAC,一個用於實際 AES 加密(使其成為三個密鑰:一個用於 HMAC-for-IV,一個用於加密,一個用於當然,對於你的MAC添加到消息中以阻止主動攻擊者)。然而,眾所周知,自己設計是危險的,而 EAX 和 GCM 等模式已經更好地完成了這項工作。
總而言之:使用時間戳有點棘手,因為它幾乎是不重複的。而且它不適用於所有連結模式。