一、預防破解
針對密碼本身而非加密法漏洞進行破解,大致上有2種方法
1.暴力破解(Brute Force)
窮舉法,對所有字元、各種長度從頭猜到尾。
預防方法很簡單,密碼愈長,破解所花時間愈多。
2.字典攻擊(Dictionary Attacks)
在網路上蒐集常用密碼或單字進行暴力破解,如果你的密碼包含其中,那麼很快就會被破解。
預防方法一
上網找「crack dictionary txt」,下載字典後從中搜尋自己的密碼,如果有,請換一個新的。
也可參考以下網址https://crackstation.net/crackstation-wordlist-password-cracking-dictionary.htm
預防方法二(建議)
加鹽。把亂碼加到原本密碼的頭或尾或都加,例如:
原密碼 | PasswordExample |
前面加鹽 | #0!PasswordExample |
後面加鹽 | PasswordExample$A7 |
都加鹽 | #0!PasswordExample$A7 |
二、密碼複雜性比較
每次設密碼最頭痛的就是各種條件,英文大小寫數字特殊符號,還要大於一定長度,看起來給予用戶安全的網路使用環境,但是真的必要嗎?
※亂數表
- (10)數字0123456789
- (26)小寫英文abcdefghijklmnopqrstuvwxyz
- (26)大寫英文ABCDEFGHIJKLMNOPQRSTUVWXYZ
- (32)特殊符號!”#$%&'()*+,-./:;<=>?@[\]^_`{|}~
Ⅰ、複雜度理論
假設一個資安層級很高的網站要求會員所設的密碼要包含英文大小寫數字和特殊符號,長度8以上。如果設剛好8位數的密碼,就會有大約2.1*10^15這麼多種組合,可是如果只有英文大小寫和數字,但長度為9位數,就會有大約10.5*10^15這麼多種組合,以類似級數來講,只有數字的密碼只要有16位數,就可以有10^16種組合。
條件 | 位數 | 組合數(大約) |
英文大小寫數字特殊符號 | 8 | 2.1×10^15 |
英文大小寫數字 | 9 | 10.5×10^15 |
數字 | 16 | 10^16 |
英文大小寫 | 9 | 2.7×10^15 |
或是包含英文大小寫數字,特殊符號可有可無,長度為8位數,就會有大約2.3*10^15這麼多種組合,所以強制設定特殊符號反而減少總數量。
條件 | 位數 | 組合數(大約) |
英文大小寫數字特殊符號 | 8 | 2.1×10^15 |
英文大小寫數字,特殊符號可有可無 | 8 | 2.3×10^15 |
英文大小寫,數字特殊符號可有可無 | 8 | 4.9×10^15 |
總結來說,看似複雜的規則,實際上並沒有比較安全,增加密碼位數會比增加總類還來的有效。
Ⅱ、破解理論(參考7-zip說明文件)
假設個人電腦破解速度為每秒10000次,超級電腦為每秒3*10^12次,以上面所介紹的2.1*10^15組合數來說,個人電腦需要6659年(基本不可能破解),超級電腦只要11分鐘(但是很耗電,除非你的密碼很有價值)。
通常會需要保密的檔案依內容可以分為10年到100年保密(因為人的壽命平均不超過100年),要避免超級電腦在100年內無法破解你的密碼,需要
位數 | 組合數 | |
只有數字 | 22 | 10^22 |
數字或小寫英文 | 15 | 2.2*10^23 |
數字或大小寫英文 | 13 | 2*10^23 |
數字或大小寫英文或特殊符號 | 12 | 4.7*10^23 |
以上計算不考慮電腦效率隨時間成長,也就是說100年後的超級電腦的速度和100年前一樣,所以實際上需要更複雜的密碼。
Ⅲ、破解實測
網路上能進行暴力破解的軟體大多是要付費的,秉持能不花錢就不花錢的原則,我自己寫了一個軟體用來暴力破解AES-256加密的7z檔案(詳細內容會在其他文章介紹),測試結果大致如下。
位數 | 組合數 | 耗時(秒) | 每秒破解次數 | |
數字英文大小寫(可有可無) | 2~1 | 3906 | 5.8 | 673.4 |
數字 | 4~1 | 11110 | 29.2 | 380.5 |
英文小寫 | 3~1 | 18278 | 47.5 | 384.8 |
實測結果不理想是因為
- 使用CPU破解而非GPU,CPU使用Intel13900K。
- 程式沒有優化,沒有使用全部效能,大概只用了一半。
如果以平均速度大約380來計算,只有數字的8位數密碼大概要3天,數字或英文小寫的5位數密碼大概要1.8天。
Ⅳ、真實情況
能暴力破解的檔案基本上是離線檔案,如果是網站裡的會員帳號密碼,可能嘗試過多次就會被封鎖。
由於暴力破解需要用「猜」的方式破解,所以並不需要把所有組合都試一遍,而是只要猜中,後面就不用再試了。所以如果有一種密碼需要花一年破解,但實際上有1/12的機率只花一個月,1/365的機率只花一天,所以最終還是看臉……。
大部分人並沒有破解他人密碼的需求,所以真實情況是自己忘記密碼,要把加密檔案救回來,尤其是上一章所提到的離線密碼,只要還記得其中一部分,剩下的部份用暴力破解還是有可能的。例如前面提到的加鹽密碼。
附錄一
計算密碼組合數要扣除條件外的密碼。
例如條件是英文小寫和數字共4位數,要把全部組合扣掉只有英文小寫和只有數字的組合
(26+10)^4 – 26^4 – 10^4 = 1679616 – 456976 – 10000 = 1212640
附錄二
免費的密碼破解軟體有hashcat可以使用,有支援GUP解碼,但是沒有AES256演算法破解,所以不進行實測。
有需要請參考連結https://hashcat.net/hashcat/