« 您的密碼必須包含 8 個字元,一個大寫字母,一個小寫字母,一個數字和一個特殊字元。 »
我們都知道這個規則。然而,在網路安全中,這被稱為「安全劇場」。像 P@ssw0rd1! 這樣的密碼遵守了所有這些規則。但它只是經過可預測替換的常見單字,而這正是破解工具最先嘗試的。
真正的安全不依賴於武斷的視覺規則,而是基於無情的數學現實:熵(entropy)。
香農的熵理論
為了理解密碼的強度,我們必須求助於資訊論之父克勞德·香農(Claude Shannon)。熵衡量資訊的極度不確定性或不可預測性。
應用於密碼時,熵以位元(bits)計算。位元數越高,電腦就越難預測密碼。隨機生成的密碼的熵 (E) 的簡化公式為:
E = L × log2(R)
- L 是密碼的長度。
- R 是字元池大小(小寫字母為 26,加上大寫字母和數字為 62,加上所有可列印符號為 94)。我們產生器的四種字元類型合計 91 個,因為它的符號集有 29 個字元。
增加字元池大小(添加符號)會增加熵,但增加長度(添加字元)會更顯著地增加熵。然而,長度只有在一個條件下才能戰勝複雜性:密碼必須完全隨機生成。
暴力破解 vs. 字典攻擊
如果您使用單字或可預測的結構,純長度的規則就會崩潰。
駭客軟體不會逐個嘗試所有字母組合(這被稱為暴力破解 / Brute Force)。他們使用過去資料洩漏中流出的真實密碼組成的龐大清單,以及常見單字和短語。這就是字典攻擊(Dictionary Attack)。
如果您的密碼很長,但由字典中的單字或可預測的替換組成,其真實熵將急劇低於其理論上的數學熵。
下表只採用一條規則:每秒 1000 億次嘗試,這是我們的產生器頁面針對快速雜湊演算法的離線破解所假設的速度。時間為平均值(也就是一半的可能組合),並以與該頁面相同的公式向下取整。每個密碼最快的破解途徑以粗體標出:
| 密碼 | 若每個字元皆隨機時的熵 | 暴力破解(平均) | 字典攻擊(我們的估算) |
|---|---|---|---|
password123 | 56 位元(11 個字元,小寫字母和數字) | 7 天 | 不到 1 秒 |
S3cr3t!99 | 58 位元(9 個字元,全部四種) | 24 天 | 不到 1 秒 |
correct horse battery staple | 133 位元(28 個字元,小寫字母和空格) | 超過1兆年 | 1 分鐘 |
gL7!pQ9z#vX2 | 78 位元(12 個字元,全部四種) | 5.1萬年 | 無捷徑 |
字典攻擊一欄是估算值。它假設攻擊者的猜測依循每個密碼的結構,且每個基礎單字都在最常見的 1,000 個單字之內:
password123:一個常見單字加三位數字。即 1,000 × 1,000,約 100 萬次猜測。S3cr3t!99:一個常見單字,首字母大寫或不大寫,每個 ’e’ 替換或不替換為 ‘3’,再加上任意三個字元的後綴。約 70 億次猜測。correct horse battery staple:四個常見單字。讓它出名的 xkcd 漫畫,將「從 2,048 個單字的清單中選出的四個單字」計為 44 位元。以同樣的速度,平均需要 88 秒,向下取整為 1 分鐘。gL7!pQ9z#vX2:沒有單字,也沒有模式,因此暴力破解就是最快的途徑。
這些估算假設攻擊者並不知道每個密碼。本文中的每個密碼現在都已公開,因此都應視為已在字典中。公開過的密碼就是作廢的密碼。
Leetspeak(駭客語)的錯覺與變異規則
以 S3cr3t!99 為例。在視覺上,它看起來複雜且堅固。然而,它僅僅是字典裡的單字 “secret”,其中 ’e’ 被替換成了 ‘3’,並加上了一個非常常見的後綴(!99)。這被稱為 leetspeak。
面對字典攻擊,這個密碼撐不過 1 秒,而不是它的長度所暗示的 24 天。現代破解軟體(如 Hashcat)不僅會測試靜態單字列表;它們會自動應用變異規則(mutation rules)。它們會獲取字典中的每個單字,測試所有可能的 leetspeak 組合,交換大小寫,並添加年份或符號。Leetspeak 提供的是虛假的安全感。
鍵盤偏移技巧 (Keyboard Shift)
為了使一個容易記住的短語變得複雜,有些人使用鍵盤佈局偏移技巧。例如,您記住了一個短語如 my-cat。但在輸入時,您將手指放在物理 QWERTY 鍵盤上,而您的作業系統配置為 AZERTY(法語)。
- 想到的詞:
my-cat - 輸入的結果:
,y)cqt(’m’ 鍵變成了 ‘,’;’-’ 變成了 ‘)’;‘a’ 變成了 ‘q’)。
在 OPSEC 中這是個好主意嗎?不,如果單獨使用,這種方法是不夠的。 就像 leetspeak 一樣,鍵盤佈局偏移是一種固定的替換:懷疑使用了這種技巧的攻擊者,會對每一次猜測套用同樣的對應。在 OPSEC 中,這就是隱蔽式安全(security by obscurity):它可以延緩業餘攻擊者的速度,但無法阻止有針對性且裝備精良的攻擊。
與本身已經很強的密碼(例如很長的隨機密碼短語)結合時,它帶來的提升很少。即使攻擊者嘗試 1,000 種佈局組合,增加的也不到 10 位元,因為 log2(1,000) ≈ 9.97。強度仍然來自底層的密碼短語。
構建萬能密碼 (~250 位元)
如果單字列表、leetspeak 和打字技巧都有其侷限性,我們該如何構建一個經得起時間考驗的萬能密碼?我們的產生器已將 80 位元評為「強」,將 100 位元評為「非常強」。對於需要使用數十年的萬能密碼,本文的目標要高得多:大約 250 位元的熵。下方的量子章節會說明原因,以及這個餘裕無法保證什麼。
根據您的需求,有兩種方法可以實現這一目標:
1. 隨機字元(用於密碼管理器)
完全隨機產生的字串,沒有任何可供機器利用的模式:
8}8,_$-p)M&n,XvUCT0o+.5hDE6P^w6b@U-evS0
從我們產生器的 91 個字元中隨機抽取的 39 個字元:≈ 253 位元。它是為本文抽取的,因此現已公開。切勿使用。
2. 隨機密碼短語(用於需要記住的密碼)
隨機單字比隨機字元更容易記住。從含 7,776 個單詞的 EFF 長單詞清單中抽取的每個單字約增加 12.9 位元,因此熵由單字數量決定。12 個單字可達 ≈ 155 位元,遠高於我們產生器的「非常強」門檻。純單字要達到 20 個才能超過 250 位元。
我們的產生器最多只產生 12 個單字。要用更少的單字超過 250 位元,請勾選「每個單詞後的隨機數字」,並選擇「數字 + 符號」作為分隔符。這樣 11 個單字即可達到 ≈ 260 位元:
depletion78$sporting14~overlap11>macaw86>paced95,paramedic41}blot41$flagstone07;uncanny92/broadways77#say2
為本文隨機抽取,設定與上述完全相同。公開過的密碼就是作廢的密碼:切勿使用這個範例,也不要使用您讀到的任何範例。只有隨機抽取的部分才算數。把每個單字首字母大寫不會增加任何熵,而您自己挑選的單字遠比隨機單字弱。
量子威脅:格羅弗演算法
當 128 位元已經能阻擋今天的超級電腦時,為什麼要追求 250 位元?答案在於大型量子電腦出現的可能性。
在密碼學中,格羅弗演算法(Grover’s algorithm)允許量子電腦在未排序資料庫中搜尋的速度比經典電腦快得多。具體而言,格羅弗演算法有效地將對稱金鑰或密碼的安全等級減半。
面對運行格羅弗演算法的量子電腦,具有 128 位元熵的密碼在理論上只能提供相當於 64 位元的抵抗力。餘裕因此薄得多。
將熵加倍可以保住餘裕:大約 256 位元在面對格羅弗演算法時仍能保留大約 128 位元。本文 250 位元的目標正是由此而來。這是本文選擇的一項預防措施,而非取自某項標準的數字。
這個餘裕也有其限度。格羅弗演算法帶來的加速是平方級的,而非無限。它的每一步仍然必須計算該網站的密碼雜湊,而且要在一台大到足以執行它的量子電腦上進行。作為對照,按照我們產生器頁面所假設的每秒 1000 億次嘗試,對 100 位元的平均搜尋就已至少需要 2000億年。
其邏輯類似於 Harvest Now, Decrypt Later (HNDL):遭竊的密碼雜湊資料庫可以今天保存下來,日後再用更強的機器發動攻擊。更大的餘裕可以提高對抗這種威脅的門檻。但它並非永久的保證。
Arpokrat Password Generator:產生您自己的密碼
不要將您的存取安全交由運氣決定。我們的免費產生器可產生隨機密碼和密碼短語。對於每一個結果,它都會顯示以位元為單位的熵,以及一次搜尋所需的平均時間。
它只負責產生:不會評估您已在使用的密碼。要達到上文 250 位元的目標,請選擇包含全部四種字元類型、長度為 39 個字元的密碼。產生器會將其顯示為「≈ 253 位元」。
它在您的瀏覽器中執行。它產生的內容絕不會被傳送或儲存。
最後一個薄弱環節:重複使用和存取管理
數學上的熵不能防止人為錯誤。250 位元的密碼一旦洩漏就會失去價值:如果在多個網站上重複使用(稱為撞庫 / Credential Stuffing 的攻擊),或者沒有雙因素身份驗證 (2FA) 的保護,都是如此。
數位衛生的黃金法則,就是您只需要記住一個密碼:您的 250 位元萬能密碼(即上文所述的隨機密碼短語)。您的所有其他存取權限(銀行、社交網路、伺服器)必須使用專門為它們產生的、各不相同的隨機密碼。
為了儲存所有這些您記不住的密碼,請使用密碼管理器。選擇在同步之前就於您的裝置上加密密碼庫的那種(通常稱為零知識,Zero-Knowledge),最好選擇開源且經過獨立稽核的那種。
