密碼暴力破解時間計算工具
選擇使用小寫英文字母、大寫英文字母、數字、符號中的哪些,以及長度,即可計算密碼的組合數與熵,並依攻擊者每秒可嘗試的次數,估算試完所有組合所需的時間。可以確認長度與字元種類哪個影響較大,以及線上與離線攻擊的差距。
結果
- 字元種類數 N
- –
- 組合數 N^L
- –
- 熵(L × log₂N)
- –
- 試完所有組合的時間
- –
- 平均猜中所需時間(一半)
- –
這是對隨機選字元組成的密碼,以逐一嘗試所有組合的暴力破解來計算。字典中的單字、名字或常用密碼,會以遠短於此的時間被破解。
以圖表檢視
其他輸入維持目前的值,只讓選擇的輸入在目前值的 1/4 到 4 倍之間變化時的結果。紅點是目前的值。
組合數與熵
由 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 等需要大量計算時間與記憶體的雜湊函數,大幅降低可嘗試的次數。在本工具切換嘗試次數,即可確認同一個密碼所需的時間會相差好幾個數量級。
暴力破解以外的攻擊與對策
實際的攻擊會先嘗試字典單字、常用密碼、名字與生日,以及在這些後面加上少許數字或符號的組合,因此非隨機的密碼會比計算值更早被破解。若重複使用在其他服務外洩的密碼,也會被撞庫攻擊直接利用。基本對策是每個服務使用不同的長隨機密碼、以密碼管理工具管理,並搭配多因素驗證。
練習資訊安全題目
- A僅小寫字母約21秒,62種約6小時
- B僅小寫字母約21秒,62種約4.7分鐘
- 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倍。不過,這項計算只是離線對外洩的快速雜湊值進行暴力搜尋時的參考。字典上的單字或重複使用的密碼,會比暴力法更早被找到,因此使用長且隨機的密碼,並在服務端搭配慢速雜湊方式、登入嘗試次數限制與多因素驗證,是很重要的。
- A能以鹽值從雜湊值還原原始密碼,以便告知忘記密碼的使用者
- B即使有使用者使用相同的密碼,儲存的雜湊值也會不同,使利用事先計算好的雜湊值表格破解變得困難
- C縮短雜湊值,以節省資料庫的容量
查看答案與解析
正確答案:B. 即使有使用者使用相同的密碼,儲存的雜湊值也會不同,使利用事先計算好的雜湊值表格破解變得困難
密碼的基本原則是不直接儲存,而是儲存以雜湊函數計算出的雜湊值。登入時計算輸入密碼的雜湊值,再與儲存的值比對。然而若只儲存雜湊值,使用相同密碼的使用者會有相同的雜湊值,只要對照事先計算好常用密碼雜湊值的表格(彩虹表等),就能得知許多密碼。鹽值是為每位使用者隨機產生、加在密碼上的值,與雜湊值一起儲存。鹽值不需要保密,但因為每位使用者的值都不同,相同密碼也會得到不同的雜湊值,事先計算的表格就派不上用場。攻擊者必須針對每位使用者重新計算,所需的工夫大幅增加。
- A計算時間長的方式輸出較長,因此不會發生碰撞
- B花時間計算,就只有合法使用者能從雜湊值還原原始密碼
- 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 等計算量大的雜湊函數。