Argon2雜湊計算|支援Argon2id・Argon2i・Argon2d
輸入密碼等字串即可計算Argon2雜湊值。支援Argon2id、Argon2i、Argon2d三種方式,並可選擇OWASP推薦的記憶體開銷・迭代次數預設。全部計算均在瀏覽器內完成,輸入內容不會發送到伺服器。
什麼是 Argon2 雜湊計算
Argon2 雜湊計算是只需輸入密碼等字串,即可以 Argon2id・Argon2i・Argon2d 三種方式之一產生雜湊值的工具。作為密碼雜湊競賽(PHC)優勝演算法的 Argon2,不僅能抵禦單純的暴力破解,對 GPU、ASIC 等專用硬體發起的高速攻擊同樣強韌,因此被廣泛作為新開發系統中保存密碼的首選。
雜湊的強度由記憶體成本、迭代次數、平行度三個參數決定,取值越大攻擊者的計算成本越高,但正規登入處理所需的時間與記憶體也會同時增加。本工具可選擇 OWASP Password Storage Cheat Sheet 建議的五種組合作為預設,建議先試其中一種,再依實際運行伺服器的效能加以調整。
Argon2 雜湊計算的使用方式
- 輸入密碼(字串) 在「密碼(字串)」欄中輸入想要雜湊化的字串。輸入內容不會傳送至外部。
- 選擇變體 若無特別理由,請選擇兼顧 GPU 抗性與側通道抗性的「Argon2id(建議)」。
- 套用 OWASP 建議預設 按下預設按鈕後,記憶體成本、迭代次數、平行度會自動設為 OWASP 建議的組合。
- 如有需要可分別調整參數 記憶體成本(KiB)、迭代次數、平行度可在數值欄中直接編輯。取值越大計算時間越長。
- 按下「計算雜湊」確認結果 會顯示 PHC 格式的編碼後雜湊,以及實際所花的計算時間。可用複製按鈕留存結果。
用好本工具的小技巧
- Argon2 是2015年“密碼雜湊競賽”(Password Hashing Competition)的優勝演算法,其中Argon2id是OWASP目前推薦的方式。若無特殊理由,建議選擇Argon2id。
- 預設按鈕對應OWASP密碼儲存備忘單(Password Storage Cheat Sheet)推薦的5種記憶體開銷・迭代次數組合。記憶體開銷越大,對GPU並行破解的抵抗力越強。
- 提高“並行度(p)”在瀏覽器端的WebAssembly實現中並不會真正並行處理,計算耗時幾乎不變。並行度帶來的加速僅在多核伺服器環境下才有效。
- 鹽值會在每次計算時自動重新生成,因此即使是相同的字串和引數,每次輸出的完整雜湊編碼也不同。
- 將記憶體開銷設定得過大時,瀏覽器標籤頁可能會暫時無響應。建議先從幾十MB左右開始嘗試。
Argon2 雜湊計算的應用情境
研究新服務的密碼保存方式
在為新建系統研究如何保存密碼時,可當場確認實際的雜湊長度以及各參數下的計算時間。
建構 API 金鑰、權杖的安全保管形式
不限於登入密碼,若希望把 API 金鑰或共享密鑰這類機密字串雜湊化後保存、而非以明文置於資料庫,同樣可以使用。
準備開發、測試用的虛擬雜湊
無須啟動應用程式,即可在此產生用於直接寫入資料庫的測試帳號雜湊值。
體感記憶體成本、迭代次數與計算時間的關係
改變參數計算數次並對比結果中的「計算時間」欄,可作為判斷適合正式伺服器設定的依據。
研究由既有系統的 BCrypt 移轉
把同一字串也用BCrypt 雜湊計算產生,比較輸出格式與所需時間,可作為移轉的判斷材料。
Argon2 雜湊計算相關用語
- Argon2id
- 兼具 Argon2d 與 Argon2i 兩者性質的混合方式。同時具備對 GPU 攻擊與側通道攻擊的抗性,OWASP 將其列為首要建議。
- Argon2i
- 記憶體存取順序不依賴於輸入的方式,對側通道攻擊(自執行時間或電力消耗讀取資訊的攻擊)較強,但 GPU 抗性略遜於 Argon2d。
- Argon2d
- 記憶體存取順序依賴於輸入的方式,對 GPU 或 ASIC 的平行攻擊抗性最高,但具有易受側通道攻擊的特點。
- 記憶體成本
- 以 KiB 為單位指定雜湊計算所用記憶體量的參數。取值越大,專用硬體平行攻擊的成本越高。
- 迭代次數
- 亦稱「時間成本」,用於指定內部處理重複多少次的參數。取值越大計算時間越長,對暴力破解的抗性也越高。
- 平行度
- 指定平行執行計算的通道數的參數。在伺服器的多核心環境下有助於提速,但在瀏覽器上的 WebAssembly 實作中不起作用。
- 鹽值
- 雜湊化之前附加的隨機值。本工具在每次計算時自動產生,因此即便字串與參數相同,每次輸出的雜湊也不相同。
- PHC 格式
- 由密碼雜湊競賽制定的、把演算法名稱、版本、參數、鹽值與雜湊本體彙整為一條字串的編碼格式,形如 $argon2id$v=19$m=... 。
常見問題
password_verify()或其他語言的Argon2驗證庫進行校驗。不過請務必妥善處理輸入內容。
閒話 ― 密碼雜湊競賽與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。