Passwords

使用 scrypt 散列的連接數據是否容易受到長度擴展攻擊?

  • May 16, 2014

scrypt 需要一個鹽和一個密碼以及一些成本參數來生成一個密鑰。所以說我們將其定義為:

key = scrypt(password, salt, cost)

我有興趣使用它來確定地生成密碼。例如,為亞馬遜或蘋果創建密碼,我會這樣:

amazonpassword = base64(scrypt("username" + "masterpassword", "amazon", cost))
applepassword  = base64(scrypt("username" + "masterpassword", "apple", cost))

所以我想知道這是否對長度延伸攻擊是可疑的。例如,如果攻擊發現了什麼:

scrypt("masterpassword", "amazon", cost)

是,他們是否可以以此作為猜測的基礎:

scrypt("username" + "masterpassword", "amazon", cost)

是?如果是這樣,避免這個問題的最佳方法是什麼?我應該使用 HMAC 來生成主密碼字元串嗎?

不,scrypt 不易受到密碼擴展攻擊。

在內部,scrypt 將密碼傳遞給 PBKDF2,PBKDF2 將其用作 HMAC 功能的密鑰——因此他們已經有效地完成了您想到的解決方法。

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