密碼暴力破解時間計算工具

選擇使用小寫英文字母、大寫英文字母、數字、符號中的哪些,以及長度,即可計算密碼的組合數與熵,並依攻擊者每秒可嘗試的次數,估算試完所有組合所需的時間。可以確認長度與字元種類哪個影響較大,以及線上與離線攻擊的差距。

條件

輸入的字串只在本頁中使用,不會傳送到任何地方。即使如此,也請不要輸入實際使用中的密碼。

結果

字元種類數 N
–
組合數 N^L
–
熵(L × log₂N)
–
試完所有組合的時間
–
平均猜中所需時間(一半)
–

這是對隨機選字元組成的密碼,以逐一嘗試所有組合的暴力破解來計算。字典中的單字、名字或常用密碼,會以遠短於此的時間被破解。

組合數與熵

由 N 種字元組成、長度 L 的密碼有 N^L 種組合。只用小寫英文字母的 8 個字元為 26^8 ≈ 2.09×10^11,大小寫英文字母加數字的 8 個字元為 62^8 ≈ 2.18×10^14。以 2 為底取對數即為熵,為 L × log₂N 位元。每增加 1 位元,組合數就變成 2 倍,因此熵被用來衡量抵抗暴力破解的強度。

加長長度,還是增加字元種類?

字元種類從 26 增加到 62,每個字元的熵約從 4.7 位元增加到約 5.95 位元;而長度每加 1 個字元,組合數就變成 N 倍。即使只用小寫英文字母,12 個字元也有 26^12 ≈ 9.5×10^16 種,遠多於 8 個英數字元(約 2.2×10^14)。這就是建議使用由數個好記單字組成之長密碼片語的原因。不過要注意,有意義單字的組合數會比同長度的隨機字元少。

線上攻擊與離線攻擊

在登入畫面逐一輸入的攻擊(線上)會受到帳號鎖定與次數限制,每秒只能嘗試幾次。而對外洩的密碼雜湊值在本機計算的離線攻擊,若是快速的雜湊函數,GPU 每秒可能嘗試數十億次以上。因此保存密碼的一方應加上鹽值,並使用 bcrypt、Argon2 等需要大量計算時間與記憶體的雜湊函數,大幅降低可嘗試的次數。在本工具切換嘗試次數,即可確認同一個密碼所需的時間會相差好幾個數量級。

暴力破解以外的攻擊與對策

實際的攻擊會先嘗試字典單字、常用密碼、名字與生日,以及在這些後面加上少許數字或符號的組合,因此非隨機的密碼會比計算值更早被破解。若重複使用在其他服務外洩的密碼,也會被撞庫攻擊直接利用。基本對策是每個服務使用不同的長隨機密碼、以密碼管理工具管理,並搭配多因素驗證。

練習資訊安全題目

以嘗試所有候選的暴力法搜尋8個字元的密碼。若每秒可嘗試1×10^10個候選,對於只以英文小寫字母(26種)組成的密碼,以及以英文大寫字母、小寫字母與數字(62種)組成的密碼,試完所有候選所需時間最接近的組合是哪一項?

  1. A僅小寫字母約21秒,62種約6小時
  2. B僅小寫字母約21秒,62種約4.7分鐘
  3. C僅小寫字母約3.5分鐘,62種約2.5天
查看答案與解析

正確答案:A. 僅小寫字母約21秒,62種約6小時

8個字元密碼的候選數,是可用字元種類數自乘8次。只用小寫字母時為 26^8 = 208827064576 種(約2.1×10^11),每秒嘗試1×10^10個,約 2.1×10^11 ÷ 1×10^10 ≈ 21秒就能全部試完。用62種時為 62^8 = 218340105584896 種(約2.2×10^14),需要約21834秒,也就是約6小時。增加字元種類時,候選數會以每個字元倍率的8次方增加,因此這裡約增加1000倍。不過,這項計算只是離線對外洩的快速雜湊值進行暴力搜尋時的參考。字典上的單字或重複使用的密碼,會比暴力法更早被找到,因此使用長且隨機的密碼,並在服務端搭配慢速雜湊方式、登入嘗試次數限制與多因素驗證,是很重要的。

網路服務儲存使用者密碼時,先在密碼加上每位使用者各不相同的隨機值(鹽值),再計算雜湊值並儲存。使用鹽值的主要目的是什麼?

  1. A能以鹽值從雜湊值還原原始密碼,以便告知忘記密碼的使用者
  2. B即使有使用者使用相同的密碼,儲存的雜湊值也會不同,使利用事先計算好的雜湊值表格破解變得困難
  3. C縮短雜湊值,以節省資料庫的容量
查看答案與解析

正確答案:B. 即使有使用者使用相同的密碼,儲存的雜湊值也會不同,使利用事先計算好的雜湊值表格破解變得困難

密碼的基本原則是不直接儲存,而是儲存以雜湊函數計算出的雜湊值。登入時計算輸入密碼的雜湊值,再與儲存的值比對。然而若只儲存雜湊值,使用相同密碼的使用者會有相同的雜湊值,只要對照事先計算好常用密碼雜湊值的表格(彩虹表等),就能得知許多密碼。鹽值是為每位使用者隨機產生、加在密碼上的值,與雜湊值一起儲存。鹽值不需要保密,但因為每位使用者的值都不同,相同密碼也會得到不同的雜湊值,事先計算的表格就派不上用場。攻擊者必須針對每位使用者重新計算,所需的工夫大幅增加。

儲存密碼時,建議不要直接使用SHA-256這類快速的雜湊函數,而是使用bcrypt或Argon2這類刻意設計成需要較長計算時間的方式。理由是什麼?

  1. A計算時間長的方式輸出較長,因此不會發生碰撞
  2. B花時間計算,就只有合法使用者能從雜湊值還原原始密碼
  3. C當儲存的雜湊值外洩時,攻擊者每嘗試一個候選密碼的計算也會變重,使暴力攻擊與字典攻擊所需的時間大幅增加
查看答案與解析

正確答案:C. 當儲存的雜湊值外洩時,攻擊者每嘗試一個候選密碼的計算也會變重,使暴力攻擊與字典攻擊所需的時間大幅增加

密碼的雜湊值一旦外洩,攻擊者就能在自己的電腦上將候選密碼逐一雜湊,找出一致者。SHA-256這類通用雜湊函數是為了快速處理大量資料而設計,使用GPU等硬體時,每秒可以嘗試極大量的候選。bcrypt與Argon2這類為儲存密碼而設計的方式,可以調整計算的重複次數(成本),刻意讓每次計算變重。例如讓每次計算變慢100萬倍,暴力搜尋所需的時間也會變成100萬倍。合法使用者登入時只需計算一次,0.1秒左右的延遲不成問題。Argon2還能設定使用大量記憶體,讓以GPU或專用電路大量平行計算變得困難。無論哪種方式,都要搭配每位使用者各自的鹽值使用。

常見問題

8 個字元的密碼有幾種組合?

取決於使用的字元種類。只用小寫英文字母為 26^8 ≈ 2.09×10^11 種,大小寫英文字母加數字為 62^8 ≈ 2.18×10^14 種,再加上 32 種符號共 94 種時為 94^8 ≈ 6.10×10^15 種。

熵需要幾位元才夠?

取決於保護對象與攻擊方式,但若考慮離線攻擊,常見的參考是以隨機字元至少約 70~80 位元,相當於大小寫英文字母加數字約 12~14 個字元。人自行想出的密碼並非隨機,會比計算出的位元數更弱。

輸入的字串會被傳送嗎?

不會。計算只在本頁中進行,輸入的字串不會傳送到任何地方。即使如此,也請不要輸入實際使用中的密碼。判定只會用到字元種類與長度。

經過雜湊處理就安全了嗎?

只做雜湊並不夠。沒有鹽值時,相同的密碼會得到相同的雜湊值,可以用事先計算好的表一次查出;快速的雜湊函數也會讓暴力破解變快。應在加鹽的同時,使用 bcrypt、Argon2 等計算量大的雜湊函數。

相關術語

雜湊函數 鹽值 多因素驗證 網路釣魚

相關計算工具

半導體、電子電路與資訊計算工具 →