密碼強度分析器

根據熵估算密碼強度,檢視被破解所需時間,並給出導致密碼薄弱的檢查清單。

測量真實的密碼強度。 強度由熵(密碼包含的不確定性位元數)估算,而非僅看長度。破解時間按每秒十億次猜測計算。全部在瀏覽器內執行,你的密碼不會被儲存或傳送。

強度
破解耗時
檢查清單
  • 至少 12 個字元
  • 包含大寫字母
  • 包含小寫字母
  • 包含數字
  • 包含符號
  • 非常見密碼
建議

關鍵是熵,而不只是長度

熵這個數字的含義

熵衡量攻擊者需要多少次猜測,以位元為單位表示。每增加一位元,工作量翻一倍。這裡的估算公式是 log2(字元集大小) × 長度:一個由小寫字母加數字組成的 10 位密碼,字元池為 36,約合 51.7 位元,意味著在攻擊者已知字元池和長度的前提下約有 2^51.7 種候選。

這個公式描述的是從該字元池中隨機挑選的密碼。它是上界,而人為選擇的密碼很少能達到。Password1! 紙面上表現不錯——大小寫混合、有數字、有符號、10 位長——但它出現在所有破解字典裡,真實強度不過幾次猜測。因此這裡的檢查清單不只是一張評分表:常見密碼這一項不通過,比符號那一項通過要重要得多。

為什麼破解時間估算差異如此之大

有兩個因素能讓答案相差幾個數量級。第一是攻擊者的硬體:單張現代 GPU 針對 MD5、SHA-1 這類快速雜湊每秒可嘗試數十億次,租用叢集還能成倍放大。第二是目標方如何儲存密碼。配置得當的 bcrypt、scrypt 或 Argon2 雜湊刻意做得又慢又吃記憶體,能把吞吐從每秒數十億壓到每秒數千。

所以同一個密碼,在某個站點可能被輕易攻破,在另一個站點卻相當安全。此處顯示的數字假定的是針對快速雜湊的離線攻擊,屬於悲觀情形,也是應當據以規劃的情形——因為你無從得知任何一個站點究竟如何儲存你的密碼。

什麼才真正有用

長度勝過複雜度。給一個小寫密碼增加一個字元,搜尋空間乘以 26;而給一個短密碼增加一類符號,倍數要小得多。從一個大詞表中隨機抽取四到五個單片語成的口令短語,可以達到 50 到 70 位元,同時依然好打好記,這正是 diceware 方法的思路。

更要緊的一點是:單個密碼的強度不如"是否重複使用"重要。一個強密碼若用在十個站點上,其安全性只等於其中最弱的那一個,因為一次洩露就會牽連全部十個。用密碼管理器為每個站點生成互不相同的隨機字串,能一次解決這兩個問題,實際收益遠大於反覆打磨一個手動輸入的密碼。

另外,本頁所有計算都在瀏覽器本地完成,你輸入的內容不會發送到任何地方。

開源說明:以原生 JavaScript 自研熵估算器實現,不依賴第三方庫。

常見問題

我的密碼會被髮送出去嗎?
不會。分析完全在瀏覽器內進行,不上傳、不記錄、不儲存,因此你可以放心測試自己真正在用的密碼。
熵值是什麼意思?
它是「與該密碼長度和字元集相同的所有可能密碼數量」的以 2 為底的對數。每增加 1 位元,攻擊者需要窮舉的空間就翻一倍。
為什麼破解時間的估算差別這麼大?
因為它同時取決於攻擊者的硬體和密碼的雜湊方式。同一個密碼在無鹽 MD5 面前可能幾小時就被攻破,在 bcrypt 下卻能撐上數年。
長度和複雜度哪個更重要?
長度。每多一個字元,搜尋空間就乘以字母表的大小,這幾乎總是比把某個字母換成符號更有效。
它能識別已在資料洩露中出現過的密碼嗎?
不能。評分完全基於結構,因此一個字元種類豐富但已經洩露的密碼在這裡依然會顯示為強密碼。請另外使用專門的服務查詢洩露情況。
實際應該達到多少?
普通賬號約 80 位元,涉及資金、郵箱或基礎設施的賬號建議 100 位元以上。從一個大詞表中隨機選取四到五個單片語成的口令短語就能輕鬆達標。