100 格密碼 — 儲存方式比長度更能改變答案
10 種字元集與 10 種長度交匯的每一格,都算出熵位數和破解所需時間。速度不是編的,用的是 hashcat 在單張 RTX 4090 上的公開實測值。
含符號的完整 ASCII 12 · 78.7 bit
- NTLM(Windows)26136.9 年
- MD545950.7 年
- SHA-256343132.2 年
- WPA2 Wi-Fi10^9.5 年
- bcrypt10^10.6 年
一個字元能承載多少
一個字元能承載的強度是字元集大小的對數:只用數字是 3.3 位,加上小寫字母是 4.7 位,含符號的 94 個 ASCII 字元是 6.6 位。總強度等於它乘以長度,所以加長通常勝過加花樣——多一個 ASCII 字元能加 6.6 位,而從小寫擴到完整 ASCII 每個字元只多 1.9 位。
網站是怎麼存的
同一個密碼,因儲存方式不同,答案可以相差一百萬倍以上。一張 RTX 4090 每秒能試 2885 億次 NTLM、1641 億次 MD5,而 bcrypt 只有 18.4 萬次——bcrypt 是故意做慢的。所以含符號的 8 位 ASCII 密碼在用 NTLM 的地方不到三小時就破,在用 bcrypt 的地方能撐五百多年。而用哪種,輸密碼的人無從選擇。
一個韓文音節抵兩個 ASCII 字元
標準韓文區共有 2,350 個音節。把一個音節算作一個字元,它就承載 11.2 位——是 ASCII 字元的 1.7 倍。所以八個韓文音節強過十三個 ASCII 字元,又不及十四個。問題在於很多系統不接受,沒有輸入法的裝置根本打不出來。
這張表算什麼、不算什麼
這裡的時間假設密碼是**隨機選取**並從頭到尾窮舉的。人編的密碼撐不了這麼久——詞典詞、鍵盤順序、生日,以及結尾加的 ! 和 1,攻擊方會先試。「P@ssw0rd!」按九位 ASCII 算是 59 位,實際幾秒就破。反過來,顯卡多幾張,時間就除以幾。
最常見的事故不是被破解
更常見的是:從一個網站外洩的密碼,被原樣拿到另一個網站去試。哪怕要幾年才能破的密碼,只要兩處共用,弱的那邊被攻破的當天它也一起完了。比加長更優先的是**不重複使用**和開啟兩步驟驗證。
按字元集和長度查找
字元集大小 · 長度
僅數字字元集大小 10
十六進位字元集大小 16
僅小寫字母字元集大小 26
Base32字元集大小 32
小寫字母+數字字元集大小 36
大小寫字母字元集大小 52
字母+數字字元集大小 62
Base64字元集大小 64
含符號的完整 ASCII字元集大小 94
韓文音節字元集大小 2350
怎麼看這一頁
- 每個字元的位數 = log2(字元集大小),再乘以長度就是總數。
- 破解時間 = 組合數的一半 ÷ 每秒嘗試次數。
- 速度取自 hashcat 在單張 RTX 4090 上的公開實測值。
- 這些數字假設密碼是隨機的。人編的會早得多被破。
- NTLM(Windows)2.89e+11 /s
- MD51.64e+11 /s
- SHA-2562.20e+10 /s
- WPA2 Wi-Fi2.53e+6 /s
- bcrypt1.84e+5 /s
常見問題
Q. 密碼多長才安全?
取決於怎麼存。含符號的 12 位 ASCII 是 78.7 位熵:存成 NTLM 要 2.6 萬年,存成 bcrypt 要 410 億年。減到八位,NTLM 不到三小時就破。
Q. 加長度還是加符號?
通常是長度。多一個 ASCII 字元加 6.6 位,而從小寫擴到完整 ASCII 每個字元只多 1.9 位。
Q. 用韓文會更強嗎?
每個音節 11.2 位,是 ASCII 字元的 1.7 倍。但接受的系統很少,沒有輸入法也打不出來。
Q. 這些時間是真的嗎?
它們假設密碼隨機且從頭窮舉。人編的密碼在詞典攻擊下會早得多被破。
Q. 最重要的是什麼?
不要重複使用。把外洩的密碼拿到別處去試,比真去破解常見得多。