Passwords
使用 scrypt 散列的連接數據是否容易受到長度擴展攻擊?
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 功能的密鑰——因此他們已經有效地完成了您想到的解決方法。