Argon2雜湊計算|支援Argon2id・Argon2i・Argon2d

輸入密碼等字串即可計算Argon2雜湊值。支援Argon2id、Argon2i、Argon2d三種方式,並可選擇OWASP推薦的記憶體開銷・迭代次數預設。全部計算均在瀏覽器內完成,輸入內容不會發送到伺服器。

Argon2雜湊計算使用提示

  • Argon2 是2015年“密碼雜湊競賽”(Password Hashing Competition)的優勝演算法,其中Argon2id是OWASP目前推薦的方式。若無特殊理由,建議選擇Argon2id。
  • 預設按鈕對應OWASP密碼儲存備忘單(Password Storage Cheat Sheet)推薦的5種記憶體開銷・迭代次數組合。記憶體開銷越大,對GPU並行破解的抵抗力越強。
  • 提高“並行度(p)”在瀏覽器端的WebAssembly實現中並不會真正並行處理,計算耗時幾乎不變。並行度帶來的加速僅在多核伺服器環境下才有效。
  • 鹽值會在每次計算時自動重新生成,因此即使是相同的字串和引數,每次輸出的完整雜湊編碼也不同。
  • 將記憶體開銷設定得過大時,瀏覽器標籤頁可能會暫時無響應。建議先從幾十MB左右開始嘗試。

常見問題

如果是新開發的系統,Argon2id是首選方案,OWASP目前也將Argon2id列為第一推薦。不過如果現有系統已在使用BCrypt,遷移時需要注意重新計算雜湊(例如在下次登入時重新雜湊)。

Argon2d 對GPU攻擊的抵抗力最強,但容易受到側通道攻擊;Argon2i 則相反。Argon2id 是結合兩者設計的混合方案,若無特殊理由,建議優先選擇Argon2id。

本工具的預設按鈕對應OWASP密碼儲存備忘單推薦的5種組合。如果要在伺服器上實際使用,建議以單次雜湊計算耗時100〜500毫秒左右為目標,並結合可用記憶體進行調整。

可以。由於使用的是標準Argon2演算法,生成的雜湊值可以直接通過PHP的password_verify()或其他語言的Argon2驗證庫進行校驗。不過請務必妥善處理輸入內容。

不會。雜湊計算全部在瀏覽器內的WebAssembly中完成,輸入內容不會被發送到任何外部伺服器。
ツールくん

閒話 ― 密碼雜湊競賽與Argon2的誕生背景

Argon2 是在2013年至2015年舉辦的“密碼雜湊競賽(Password Hashing Competition, PHC)”中,從24個參賽方案中脫穎而出、被選為最優演算法的成果。這場競賽之所以舉辦,正是因為BCrypt(1999年)、PBKDF2(2000年)等既有方式存在一個共同弱點——容易被GPU、ASIC等專用硬體加速暴力破解。為了克服這一弱點,Argon2 在設計上刻意要求計算過程消耗大量記憶體,讓專用硬體的並行優勢難以發揮。

有趣的是,Argon2 並非只有一種形態,而是共有3種變體,各自的取捨也不盡相同。Argon2d對GPU攻擊的抵抗力最強,但容易受到側通道攻擊;Argon2i則正好相反,能較好抵禦側通道攻擊,但GPU抵抗力略遜一籌。而Argon2id正是結合兩者優點的混合方案,這也是OWASP等眾多安全機構都將其列為密碼儲存首選演算法的原因。

也正因為如此,Argon2id 如今已逐漸成為新系統的標準配置。PHP 自7.2版本起,只需在password_hash()函式中指定PASSWORD_ARGON2ID常量即可生成對應雜湊;Node.js、Python、Ruby等主流語言也都提供了官方或準官方的庫支援。可以說,在新開發的系統中,越來越多的開發者已經把Argon2id當作密碼儲存的第一選擇,而不再是曾經的主流BCrypt。