Aes

派生加密密鑰時鹽的重要性

  • July 19, 2014

我很想知道這一點,也有點困惑:

  1. 假設,我有兩個使用 AES-128bit 加密的文件,密鑰 PBKDF2-派生自相同的密碼和相同的鹽。如果攻擊者進行暴力攻擊(想像他完成了這個)來破解密鑰,我猜他需要執行一次攻擊才能獲得這兩個密鑰。
  2. 現在,如果我使用 AES-128bit 加密文件,密鑰 PBKDF2-派生自相同的密碼和不同的鹽,它會讓攻擊者暴力破解兩次嗎?如果答案是肯定的,那為什麼?更改鹽不會更改可能鍵的數量 $ 2^{128} $ .

如果答案是否定的,那麼在這兩種情況下,可能的鍵數都是 $ 2^{128} $ . 那麼,如果鹽不同,會有什麼不同呢?

有兩種方法可以攻擊使用派生密鑰的加密:

  1. 您可以攻擊加密算法。在正確使用* 128 位 AES 的情況下,這基本上相當於對 128 位密鑰空間的暴力攻擊。

這將在平均後成功 $ 2^{127} $ 嘗試(如果可行的話)。如果您知道兩個文件使用了相同的密碼 salt,您可以暴力破解一個文件的密鑰,然後檢查它是否也解密另一個文件,這意味著您會發現兩者都帶有 about $ 2^{127} $ 當他們共享密碼時嘗試。如果他們有不同的鹽,那麼第一個密鑰相對於另一個文件就沒有什麼特別之處了——你總共需要 $ 2 \cdot 2^{127} $ 嘗試。

這裡的區別是毫無意義的,因為如果 AES 是安全的,兩者都無法破解。 2. 您可以嘗試派生相同的密鑰。這意味著猜測原始密碼,導出您自己的密鑰,然後通過使用它來嘗試它是否是正確的密鑰來解密。

後者花費的時間取決於選擇的密碼。人類生成密碼的大多數方式的熵都遠小於 128 位,因此字典類型的攻擊可能比破解加密更快。RFC 2898,即 PBKDF2 為每個密碼猜測增加了計算複雜性,預設情況下,除了 AES 解密之外,您還使用 1000 次 HMAC(2000 雜湊函式)迭代。稱它為 $ 2^{b+11} $ ,其中 b 是密碼的熵。

在這裡,如果您能找到一個密碼,您可以嘗試對其他文件使用相同的密碼,而不管鹽值如何。因此,如果您知道所有文件都使用相同的密碼,salt 將添加〜沒有額外的保護(最後每個文件只有一個額外的密鑰派生)。

確實很重要的情況是每個密鑰都來自單獨的密碼。在這種情況下,找到一個密碼(上面的 2.)不會為您提供更多資訊來破解其他密碼。最好的攻擊是為每個密碼嘗試最常見的密碼,然後嘗試下一個最常見的密碼,等等。但是,對於共享鹽的任意數量的文件,您只需派生一次密鑰猜測,這意味著複雜性與具有唯一鹽的文件數,而不是所有文件。


  • 每個文件的 AES 密鑰確實使正確的實現更簡單一些,因為您不必擔心 IV 衝突或例如遇到每個密鑰數據上限,但是您必須擔心鹽衝突的事實可能超過任何好處.

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