Authenticated-Encryption

如果我為每個加密文件生成“新”密鑰,我可以使用確定性 NONCE 進行 AES-GCM 文件加密嗎

  • February 28, 2017

NIST 規範規定確定性 NONCE(IV) 應為 96 位。它應該由兩個欄位組成:32 位的固定欄位和一個 64 位的計數器。不鼓勵使用隨機的 96 位 NONCE ( https://eprint.iacr.org/2016/475.pdf )。

我的案例是加密磁碟上的文件。每個文件都使用由 KeyGenerator 生成的新密鑰進行加密,並使用預設的 SecureRandom() 實現進行初始化。我的問題是:我真的需要一個固定欄位,還是可以將整個 96 位 NONCE 初始化為 0。就像在 96 位計數器中一樣。這樣,NONCE 是有效的確定性,我不必將它儲存為文件的一部分。由於將為每個新的加密文件生成一個新密鑰,因此我不應該重複使用對 AES-GCM 有害的密鑰/NONCE 對。

我已經看到一些建議,固定欄位實際上是一個 32 位隨機整數,但我認為這不是必需的,因為我永遠不會在我的構造中重新使用密鑰/IV(http://csrc.nist.gov /groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf)。

我唯一關心的是確保我永遠不會從 SecureRandom 中生成 2 個相同的 256 位密鑰,但對我來說,證明似乎是不可能的,而且這種事件的可能性似乎可以忽略不計。確保我永遠不會生成重複密鑰的唯一方法是將密鑰或其指紋保存在數據庫中,但這是不可取的。但是即使我在我的固定欄位中使用了一個 32 位隨機整數,我也不能保證不會發生機率事件並創建重複的密鑰/IV。

更新

我在一篇博文中總結了我對如何正確使用 AES-GCM的研究。

是的,如果您每次使用不同的密鑰,您可以將 IV 設置為零。您談論的是隨機密鑰,但密鑰是否真的是隨機的,即使是在時間上?如果文件被更改會發生什麼,在這種情況下會出現哪些攻擊向量?

使用 32 位隨機“固定”整數不是一個好主意。即使對於使用相同密鑰儲存的相對少量的文件,您也會很快產生衝突。因此,無論您嘗試修復它,它都不會被修復到足以在密碼學意義上被稱為安全的。

如果您擔心密鑰不是隨機的,我會為隨機數生成器添加一些啟動測試。因為沒有可信的隨機數生成器,很多操作都不會安全。

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