Aes

只有一個使用者時如何使用鹽

  • August 13, 2013

我正在加密文件以儲存在不受信任的位置,使用自定義 Java 程序來執行此操作。只有一個使用者,但有很多文件。我在帶有 PKCS5 填充的 CBC 模式下使用 AES,並且密鑰是使用 PBKDF2 從單個密碼片語創建的。

**問題:**如果我使用不同的鹽來加密每個文件會增加安全性,還是只有在我為每個文件使用不同的密碼時才有意義?

我能找到的文章涉及多使用者場景,當然你需要每個使用者的鹽。但是我只有 1 個使用者和 1 個密碼,所以為每個文件創建一個新密鑰對我來說感覺不對。

在像您這樣的情況下,只有一個密碼/密碼,但它被用作加密多個 CBC 加密文件的密鑰材料,您(正如您自己指出的)顯然不會讓攻擊者更難如果您使用鹽,請計算您的密碼。

但是,使用鹽意味著每個文件的加密都是獨立密鑰的,如果您使用相同的密碼來加密大量非常大的文件,這可能會增加對 CBC 連結狀態的衝突的抵抗力。由於您使用的是 AES-CBC 並且 AES 的塊大小為 128 位,因此您必須加密數十億 GB 大小的文件才能接近 0.5 機率只有一次這樣的衝突(在某處的兩個 128 位塊中),但是根據您的安全要求,即使是這麼小的風險也可能是不可接受的。在這種情況下,使用鹽的替代方法是使用具有 256 位塊大小的密碼而不是 AES。

第三種選擇是對每個文件使用隨機密鑰,並且僅使用您從密碼中派生的密鑰加密該文件特定密鑰。如果將這些加密密鑰放在一個單獨的索引文件中,您將獲得兩個額外的好處:

  1. 更改密碼會變得更便宜,特別是如果您有大量文件或非常大的文件。更改密碼片語可能會或可能不會提高您的安全性。顯然,如果攻擊者在某個時間點掌握了您的所有文件並且能夠計算出您在該時間點使用的密碼,那麼您以後更改密碼將一無所獲。文件特定的密鑰(對於當時存在的文件)已經被洩露。
  2. 但是,使用隨機文件特定密鑰,您可以將其他使用者的索引文件放在一起,其中僅包含這些使用者應該訪問的文件的密鑰。

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