「8 個字元,包含大小寫字母和數字」——這是很多系統對密碼強度的基本要求。但這樣的密碼真的安全嗎?一台現代電腦到底能多快破解密碼?為什麼資安專家說「密碼越長越好」,而不是「越複雜越好」?本文不從「怎麼保護密碼」出發,而是站在攻擊者的角度,解釋密碼是如何被破解的——理解攻擊方式,才能設計出真正難以破解的密碼。
1. 密碼儲存的真相:你的密碼從來不是明文
在解釋攻擊方式之前,先釐清一個重要前提:設計良好的系統不會直接儲存你的密碼,而是儲存密碼的雜湊值(Hash)。
你輸入密碼後,系統對密碼執行雜湊函數(如 bcrypt、SHA-256),得到一串固定長度的亂碼,然後儲存這串亂碼。下次登入時,系統對你輸入的密碼重新計算雜湊值,與儲存的值比對——如果相符就通過。
這意味著即使資料庫被駭客竊取,他們拿到的也只是雜湊值,而不是你的密碼明文。問題在於:攻擊者有辦法從雜湊值反推出原始密碼嗎?
當新聞說「某網站密碼外洩」,通常指兩種情況:一是網站設計太爛,直接以明文儲存密碼;二是資料庫的雜湊值被竊取後,攻擊者用各種技術嘗試破解雜湊——這正是本文要說明的內容。
2. 三種主要的密碼破解方式
2.1 暴力破解(Brute-Force Attack)
暴力破解是最直觀的方法:把所有可能的密碼組合逐一嘗試,直到找到正確的為止。
現代 GPU 每秒可以計算數十億次雜湊,所以短密碼在計算能力面前幾乎沒有抵抗力:
| 密碼長度 | 字元集(僅小寫字母) | 字元集(大小寫 + 數字) | 估計破解時間 |
|---|---|---|---|
| 6 字元 | 26⁶ ≈ 3 億 | 62⁶ ≈ 570 億 | 數秒到數分鐘 |
| 8 字元 | 26⁸ ≈ 2,090 億 | 62⁸ ≈ 218 兆 | 數小時到數天 |
| 12 字元 | 26¹² ≈ 9.5×10¹⁶ | 62¹² ≈ 3.2×10²¹ | 數百年(現實上不可行) |
關鍵結論:密碼長度對安全性的影響遠大於字元複雜度。從 8 個字元增加到 12 個字元,可能的組合數增加了超過百萬倍。
2.2 字典攻擊(Dictionary Attack)
暴力破解假設密碼是完全隨機的,但現實中人類喜歡用有意義的詞彙當密碼。字典攻擊利用這個弱點:用預先準備好的詞彙表(字典)逐一嘗試,而不是窮舉所有組合。
常見的字典包含:
- 全球最常用的密碼(password、123456、qwerty…)
- 常見英文單字及其變體(love → l0ve、lov3)
- 人名、地名、品牌名(michael、taiwan、google)
- 歷次大規模密碼外洩資料庫(數十億筆真實密碼)
字典攻擊的效率遠高於純暴力破解——大多數人的密碼都能在幾秒鐘內從字典中找到。
2.3 彩虹表(Rainbow Table)
彩虹表是一種提前計算好的攻擊工具:預先計算出數百億個密碼的雜湊值,建成一張對照表,攻擊時直接查表而不需要即時計算。
如果攻擊者手上有一個未加鹽(Salting,見下節)的 MD5 雜湊資料庫,他只需要在彩虹表中查找對應的雜湊值,就能幾乎瞬間找到原始密碼。
現代密碼系統在計算雜湊時會加入一個隨機字串(「鹽」),讓每個帳號的雜湊值都不同,即使兩個人使用完全相同的密碼。這樣一來,彩虹表就失效了——因為針對特定「鹽」的對照表根本不存在。這也是為什麼使用 bcrypt、Argon2 等現代雜湊演算法比 MD5 安全得多。
3. 密碼 Entropy:衡量密碼強度的數學方法
Entropy(熵)是資訊理論中的概念,在密碼學中用來量化密碼的「不可預測性」。Entropy 越高,密碼越難猜測。
計算公式:Entropy = log₂(字元集大小密碼長度)
以位元(bit)為單位:
- 僅小寫字母(26 種),8 字元:log₂(26⁸) ≈ 37.6 bits
- 大小寫 + 數字(62 種),8 字元:log₂(62⁸) ≈ 47.6 bits
- 大小寫 + 數字 + 特殊符號(94 種),12 字元:log₂(94¹²) ≈ 78.7 bits
- 隨機 4 個英文單字(passphrases,約 7,776 個詞中選取):log₂(7776⁴) ≈ 51.7 bits
一般建議:網路帳號至少 50 bits,高安全性帳號(銀行、Email)建議 80 bits 以上。
4. 常見密碼迷思
迷思一:「我把字母替換成數字(a→@、e→3),密碼就更安全了」
不盡然。字典攻擊的詞彙表早已包含這類「1337 speak」(leet speak)變體。p@ssw0rd 已經被列在各大密碼字典中,不比 password 安全多少。
迷思二:「定期更換密碼可以提高安全性」
這個觀念已過時。現代資安研究發現,強制定期換密碼反而導致用戶使用可預測的模式(Password1 → Password2)。更重要的是:設定一個夠強的密碼,而不是頻繁換弱密碼。
迷思三:「密碼裡要有大小寫、數字、特殊符號才安全」
複雜度有幫助,但效果不如增加長度。correct-horse-battery-staple(4 個隨機英文字)的 Entropy 超過 50 bits,比大多數「複雜」的 8 字元密碼更安全,而且好記。
5. 設計強密碼的原則
5.1 夠長永遠是第一優先
至少 12 個字元。16 個字元更好。長度是破解時間的指數級倍增器——每多一個字元,可能的組合就乘以整個字元集的大小。
5.2 隨機性比複雜度更重要
「Tr0ub4dor&3」不如「xkz7!qPm2vLn」安全——前者符合人類可預測的替換規律,後者才是真正的隨機。更好的方法是使用密碼產生器,讓電腦決定隨機性,不要讓人腦決定。
5.3 每個帳號用獨立密碼
密碼重用(Password Reuse)是最常見的安全漏洞之一。一個網站被駭,攻擊者會立即用同樣的帳號密碼嘗試其他網站(「撞庫攻擊」)。各帳號使用不同密碼可以隔離風險。
5.4 使用密碼管理器
唯一能同時做到「每個帳號獨立密碼 + 密碼夠長夠隨機」的方法,就是使用密碼管理器。你只需記住一個強主密碼,其餘由軟體管理。
6. 常見問題
如果我的密碼沒有被暴力破解,怎麼還是會外洩?
外洩管道不只是破解。最常見的還有:網路釣魚(假網站騙你輸入密碼)、資料庫明文外洩(網站設計太差)、裝置被植入鍵盤記錄程式。強密碼只能防止「猜測」類攻擊,無法防止社交工程或惡意軟體。
開啟兩步驟驗證(2FA)之後,密碼強度還重要嗎?
仍然重要。2FA 增加了一道防線,但不是萬能的——SIM 卡劫持、一次性代碼釣魚等攻擊仍可繞過 2FA。強密碼 + 2FA 才是最佳組合,不能只靠其中一個。
7. 小結
密碼安全的本質是「讓攻擊者找到正確密碼所需的時間超過其耐心或利益」。從這個角度理解:
- 長度是最有效的防禦:每多一個字元,破解時間呈指數級增長
- 隨機性勝過複雜規則:讓電腦決定密碼,不讓人腦設計密碼
- 每個帳號獨立密碼:一旦某處外洩,不牽連其他帳號
- 強密碼 + 2FA 雙重保護:兩道防線比任何一道都強
使用隨機密碼產生器可以一次解決「夠長」「夠隨機」兩個問題,是設計強密碼最省力的起點。