高強度密碼至少要 16 個字元,混合大小寫字母、數字和符號,而且不能出現在任何已知的資料外洩清單中。長度比複雜度更重要。一組 16 字元的隨機字串,破解難度遠高於 8 字元但塞滿特殊符號的密碼,即使後者乍看更「複雜」。
什麼樣的密碼才算強
密碼強度取決於 entropy(熵),也就是攻擊者必須逐一嘗試的可能組合數量。Entropy 以位元(bit)為單位,每多一個 bit,搜尋空間翻一倍。
- 純小寫字母的隨機密碼,每個字元約 4.7 bits entropy(26 種可能字元)。
- 加上大寫:約 5.2 bits(52 種)。
- 再加數字和符號:約 6.5 bits(90 種以上)。
- 每多一個字元,總組合數都是指數級成長。
要抵擋現代 brute-force(暴力破解)攻擊,至少需要 80 bits entropy。實際上需要多少字元:
| 字元集 | 達到 80-bit 安全性所需字元數 |
|---|---|
| 純小寫(26 字元) | 17 個字元 |
| 大小寫混合 + 數字(62 字元) | 14 個字元 |
| 大小寫混合 + 數字 + 符號(94 字元) | 13 個字元 |
| 從 2,000 字詞庫中隨機選詞 | 6 個單字 |
長度贏過複雜度。16 字元的隨機英數字密碼(約 95 bits)比 10 字元加上 @、!、# 的密碼(約 65 bits)更安全。
免費的線上密碼產生器能建立符合以上條件的加密隨機密碼。到免費密碼產生器幾秒鐘就能生成一組。
破解你的密碼需要多久?
現代 GPU 每秒能對竊取到的密碼雜湊值測試數十億組猜測。下表假設使用 94 個可列印 ASCII 字元,每秒 100 億次猜測,這是 2024 年消費級硬體離線攻擊的合理數字:
| 密碼長度 | 組合數 | 預估破解時間 |
|---|---|---|
| 8 個字元 | 6.1 × 10¹⁵ | 約 7 分鐘 |
| 10 個字元 | 5.4 × 10¹⁹ | 約 63 天 |
| 12 個字元 | 4.8 × 10²³ | 約 1,500 年 |
| 16 個字元 | 3.8 × 10³¹ | 約 12 億年 |
| 20 個字元 | 3.0 × 10³⁹ | 幾乎不可能 |
8 個字元已經不安全,加了符號也一樣。多數重大資料外洩事件中,8 字元密碼幾小時內就被字典攻擊和規則變換破解了。
以上估算適用於針對竊取雜湊值的離線攻擊。線上攻擊(對登入表單)因為有速率限制所以較慢,但不該把速率限制當作主要防線。
為什麼「Correct Horse Battery Staple」這招有用
2011 年,xkcd 提出了把四個隨機常用單字組合在一起的方法。如果單字來自 2,000 字的詞庫,「correct horse battery staple」大約有 44 bits entropy(log₂(2000⁴) ≈ 44 bits)。以現代標準來看偏弱。
同一詞庫取六個單字可以達到 66 bits,七個單字有 77 bits。人腦記住具體名詞遠比記住 xQ7@mP2# 這種隨機字串容易得多,這才是 passphrase 的真正價值。
EFF Diceware 詞表有 7,776 個單字,每個單字貢獻約 12.9 bits。五個單字有 64 bits,六個單字有 77 bits。
如果有一組密碼你必須親手打字記住(例如電腦登入或主信箱),就用 passphrase(通關片語)。其餘帳號,特別是存在密碼管理器裡、永遠不需要手動輸入的,就用隨機字元字串。
常見的密碼設定錯誤
字元替換不等於增加 entropy。把 e 換成 3、a 換成 @,破解工具早就會自動套用這些變換規則。P@ssw0rd! 不到一秒就會被破解。
個人資訊是可猜測的。出生年份、寵物名字、球隊名稱、結婚紀念日,這些都會出現在針對性攻擊的字典裡。如果它出現在你的社群檔案上,就預設攻擊者已經有了。
短密碼加上最高複雜度還是輸。複雜度只是一個有限的乘數;長度帶來的是指數級增長。12 字元的純小寫隨機密碼,強度勝過 8 字元但包含四種字元類型的密碼。
重複使用密碼是風險最高的壞習慣。Credential stuffing(撞庫攻擊)從一次資料外洩中取得帳密,自動拿去嘗試其他數百個服務。一組被重複使用的密碼,幾分鐘內就可能讓十幾個帳號全部淪陷。
在密碼後面遞增數字不算換密碼。攻擊工具試完 Password2024 之後,下一個就是 Password2025。
FAQ
2025 年高強度密碼的最低長度是多少?
處理敏感資料的帳號,16 字元是實際上的最低標準。12 字元加完整字元集,對低風險帳號尚可。任何少於 12 字元的密碼,不管看起來多複雜,用消費級硬體都能在一年內離線破解。
使用線上密碼產生器安全嗎?
安全,前提是該工具使用瀏覽器內建的 CSPRNG(密碼學安全偽隨機數產生器),具體來說是 JavaScript 的 window.crypto.getRandomValues()。這會從裝置的 entropy 來源產生不可預測的隨機數,資料完全不傳送到伺服器。一個簡單的驗證方法:載入頁面後關閉網路,再產生密碼。如果仍然能正常產生,代表密碼是在本地端生成的。
資料外洩後應該改幾組密碼?
立刻更改被外洩帳號的密碼,然後檢查你是否在其他地方也用了同一組——那些帳號也要換。用 Have I Been Pwned(haveibeenpwned.com)確認你的 Email 是否出現在已知的外洩資料庫中。不要等被外洩的公司來通知你。