Encryption

從 PBKDF2 生成的 AES 256 位密鑰有多安全

  • June 24, 2021

我正在使用 CryptoJS AES 256 加密:

CryptoJS.AES.encrypt(realData, generateKey(passphrase), {iv: iv});

秘密是通過以下方式生成的:

function generateKey(passphrase) {
 const salt = CryptoJS.lib.WordArray.random(128 / 8);
 const key256Bits = CryptoJS.PBKDF2(passphrase, salt, {
   keySize: 256 / 32,
   iterations: randomNumber,
 });

 return key256Bits;
}

我是新手,想知道上面的 256keybits 有多安全?

有人可以使用蠻力找出 256keybits 的十六進制、base64 編碼字元串,iv 而不關心密碼。

然後轉換真正的 256keybits,iv 用於解密 AES 加密中的 realData?或者256keybits可以是蠻力嗎?

謝謝!

的值iterations: randomNumber不應該是隨機數。這是一個控制 PBKDF2 成本的迭代計數。它應該在應用程序中設置得盡可能高,並且 PBKDF2 對密碼搜尋提供的保護隨著該參數線性增長。在下文中,我假設一個高iterations值(比如十萬的基線),並且以某種方式salt儲存。我還假設它使用了 HMAC-SHA-1(預設)或 HMAC-SHA-256(也很常見)。

據我們所知,所描述的主要缺點是可以通過執行 generateKey 來測試密碼,然後使用已知的 AES 密碼測試相應的密鑰。那是*“不關心密碼”*嗎?這對我來說不清楚。

問題是,攻擊者可以使用 GPU、FPGA 或 ASIC 以非常高的速度執行 PBKDF2。當iterations高時(應該如此),PBKDF2 是generateKey密碼搜尋的瓶頸。因此,攻擊者搜尋密碼的速度比使用 CryptoJS 的普通使用者快幾個數量級。從使密碼搜尋變得困難的角度來看,這是問題的主要目標,因此當涉及到強大的對手時,PBKDF2 是最糟糕的使用備用 CPU 能力進行密鑰拉伸的方法之一。Argon2、scrypt 甚至 bcrypt 更好的選擇。

您決定 NIST以前推薦 PBKDF2是否是巧合,並且仍然不要求使用更好的東西;就像它以前推動的Dual_EC_DRBG 一樣,其明顯目的是讓美國情報部門破解這種加密貨幣。Hanlon 的剃刀可能適用,但我對 NIST 的科學家有更高的敬意。

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