Aes

aes_256_gcm IV 是否只需要對該密鑰是唯一的?

  • May 13, 2019

我正在使用 GCM(通過 openssl’s EVP_EncryptInit_ex(ctx, EVP_aes_256_gcm(), NULL, NULL, NULL)))。

IV 的預設長度為 12 個字節。

它說 IV 在特定鍵的上下文中必須是唯一的。

IV 是否更小或可預測是否重要?我打算重新使用 64 位序列號和 64 位毫秒時間戳作為 8 字節 IV。只要重啟引入了 1ms 的延遲,就不會有重複的 IV。(我會提防 1970 年的時間戳。)

是否有必要添加一些隨機字節?(這些需要與每條消息一起傳輸;我正在嘗試使消息盡可能安全地小。)

如果是這樣,有多少隨機字節?

對於 GCM,IV 可以是可預測的(與 CBC 等其他一些模式相反,沒有不可預測性或一致性要求),但它們不能被重用。您可以自由使用任何您希望確保這種唯一性的方法。如果一個IV被重用,那麼“認證密鑰”就會暴露出來,加密本身就變成了“兩次填充”的一個實例,即可能會洩露大量明文資訊,具體取決於其格式。

時間戳有點好。時間戳的問題在於它們依賴於本地時鐘,並且由於沒有完美的時鐘,因此電腦通常會包含手動或自動調整時鐘的方法。請注意,通過 Internet 進行的自動時鐘調整使用NTP,它通常不受保護(無身份驗證或加密)。因此,遠端攻擊者可能會向連接的系統提供虛假的 NTP 數據包,以強制時鐘調整和可能的 IV 重用。

使用隨機值是一種以高機率實現唯一性的常用方法;使用 96 位 IV,如果您加密不超過 $ 2^{32} $ 具有給定密鑰的消息,則 IV 衝突的機率(假設是強隨機源)最多為 $ 2^{-32} $ ,這足以阻止攻擊者(即等待這樣的事件比簡單地購買彩票更不值得)。

一些額外的說明:

  • GCM 實際上支持所有 IV 長度,而不僅僅是“12 字節”。長度正好為 12 個字節的 IV 按“原樣”使用,讓您確切知道是否有衝突。如果您使用 64 位時間戳(假設不重複),我們鼓勵您使用 4 個額外字節(例如零)“填充”它,以便 GCM 實現接收 12 字節 IV(即使您實際上並未傳輸線上消息中的填充字節)。

  • 相反,您可以使用更長的隨機 IV。16 字節隨機 IV 可以說比 12 字節隨機 IV“更好”(只要單個消息明顯短於 64 GB,它就會降低衝突風險,並且攻擊者不太容易立即檢測到衝突)。但是由於您嘗試減小線上尺寸,我想您不希望這樣做。

  • 在某些情況下,您可以“免費”獲得不重複的 IV。例如,在 TLS 連接中,每個連接都有自己的密鑰,因此 IV 衝突僅在給定連接內很重要。但是,消息(TLS 術語中的“記錄”)是連續的;因此,可以使用一個簡單的序列號(第一條記錄的編號為 0,第二條記錄的編號為 1,依此類推)。序列號是隱含的,因此根本不需要傳輸。

  • 可能還有其他解決方案。例如,一種可能的方法是將 GCM 替換為以下模式:

    • x為 IV(其長度見下文),m為要加密的明文。
    • 在 IV 和明文的連接上計算 HMAC/SHA-256,並將其截斷為 AES 塊大小(16 字節)。這會產生身份驗證標籤t
    • 在m上使用 AES-CTR 加密, t為 IV;這產生密文m’
    • 傳輸xtm’。使用這種機制,您可以使用非常短的 IV x,甚至是空的(長度為 0)。請注意,與 GCM 相比,這節省了空間:使用 GCM,加密消息與身份驗證標籤(16 字節)IV 一起發送;在這裡,我建議使用 HMAC 派生的身份驗證標籤作為 IV 進行加密。

如果您使用帶有空 IV x的那種機制,那麼整個事情就變得確定了:如果您使用相同的密鑰對完全相同的消息進行兩次加密,那麼您將得到完全相同的加密消息。但是,這應該是洩漏的全部範圍。一個小但非空的 IV x可以幫助隱藏它。

請注意,這是一個加密和 MAC 設置,通常出於理論上的原因不贊成。在這種情況下它是相當安全的,因為 HMAC/SHA-256 還保護輸入的機密性(這不一定是任何其他 MAC 機制的情況),並且CTR 解密意味著沒有填充,因此即使在未經驗證的情況下也可以安全地實施輸入數據。


**總結:**如果你的時間戳真的是唯一的,那麼它們對於 GCM 來說就足夠了,你可以用零將它們填充到 12 個字節(不需要與消息一起傳輸)。但是,如果時鐘可以調整或倒帶,那麼您可能應該使用隨機 IV,以獲得“機率唯一性”;並且,在這種情況下,不要低於 12 個字節。如果您迫切需要規模,那麼還有其他可能的途徑,但它們超出了現有已發布的標準,這意味著您需要更多的外部審查和開發關注。

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