Key-Derivation
argon2 與 scrypt
事實上,scrypt 和 argon2 是兩個主要的記憶體硬 KDF。但是其中哪一個更推薦用於密碼散列?scrypt 比較老,據我所知,它可以抵抗幾乎所有類型的基於硬體的攻擊。但容易受到側通道攻擊。argon2 (i/d) 在記憶硬度和側溝道電阻方面的強度如何?
據我所知,scrypt 可用於一些時間/記憶體權衡,您可以節省記憶體但需要更多計算,這可能真的是一件煩人的事情。
Argon2d 使用依賴於輸入的數據(即密碼),這使得它對這些權衡攻擊更加強大,但打開了側通道(如果您的電腦上直接有攻擊者,IIRC 才是一個問題,這意味著它不是在您不與他人共享的網路伺服器上太糟糕了)。
Argon2i 相反有獨立的數據,它阻礙了側通道,但在權衡取捨方面更加開放,所以不是最好的主意,但仍然不是一件壞事。
然後是 Argon2id,它以混合方式使用它們來阻止權衡和側通道。
IETF 草案指出:
如果您不知道它們之間的區別,或者您認為側通道攻擊是可行的威脅,請選擇 Argon2id。
所以最好的方法是 Argon2id。
順便說一下,一個小更新:
PHP 已將 Argon2id 設置為進入 7.3,除非在功能凍結之前的幾天內出現嚴重錯誤,否則它將成為 PHP 7.3 的一部分
password_hash()
,使其可供無需訪問擴展的人使用。