什麼是好密碼?幾乎每一個網站都給出了差不多一樣的標準答案:
長度得8位以上;需含大小寫字母、數字及符號;不要用任何出現在字典裡面的詞,包括部分替換(如用p@ssword或fai1也不好)。
只要你的密碼滿足了這些標準,基本上網站都會獎勵你一個綠色的強密碼標示—好密碼。
但是實際上你和網站都錯了。為什麼?原因首先要從密碼是如何被破解講起。
黑客如何破解密碼
網站是通過比對輸入的密碼與數據庫中的密碼來驗證用戶的,但是一般這些密碼都不是以明文的方式存放,而是用哈希算法對保存的密碼進行單向加密,輸出的結果是無法逆向工程出來的。
比方說「123456」經過SHA-1哈希算法得出的結果是7110eda4d09e062aa5e4a390b0a572ac0d2c0220,通過這個結果是無法知道原始密碼的。
然後用戶登錄時輸入的密碼也會被利用同樣的哈希算法計算出哈希值,再與存放在數據庫中的正確密碼哈希值比對,一致則說明輸入密碼正確。
拿到哈希密碼文件的黑客可利用暴力破解法比對哪個賬號與哪個密碼相關。他們可以從簡單一點的密碼開始,這些密碼可以從之前的攻擊字典庫查找,也可以從一般的字典上查找,然後進行單詞組合。
如果密碼長度較短,採用的字符集僅僅是大小寫的話,破解的速度會快很多。黑客可以用彩虹表(預先計算的哈希值)來加速暴力破解的速度。
按理來說上述採用複雜不常見的密碼應該是不錯的選擇(比方說像Spooning1!,因為生僻,很難被列入彩虹表),但實際上並非如此。
因為現在的計算能力已經非常強大,用普通計算機結合顯卡陣列的GPU能力,暴力破解法每秒鐘可處理10億到千億用SHA-1算法加密的密碼。
不過儘管如此,如果密碼有11、12位或以上,並且完全是在所有可能的字符中隨機生成出來的話,哪怕有這麼強大的計算能力暴力破解法也是很難破解的。
講故事,設密碼
但問題是大部分人都不是用隨機生成的密碼的。當然,大家不用隨機密碼也是有原因的,因為隨機密碼難記(大腦機制就這樣,很難記住隨機字母數字符號組合),可麻煩就麻煩在這裡,因為那些「好密碼」規則已經被黑客熟知。
Markus Jakobsson指出,其實這就是密碼設置的安全性與可用性的矛盾。
在研究中Jakobsson發現,有人因為喜歡蘋果,所以密碼就用了「apples」,但是網站要求有大寫字母,所以他就把第一個字母改成了A,可能網站說這樣不安全,還必須有數字和字母,通常用戶就會選擇滿足規則的最簡單方式,在後面加個1再加個!——「Apples1!」。
按照前面密碼的設定規則,「Apples1!」無疑是一個好密碼(至少跟那些糟糕的密碼相比)。
但是黑客在破解時往往也會如法炮製,利用字典加上個別字母替換,以及上述常見的數字、符號擴展來縮短破解時間(如利用馬爾可夫鏈技術來預測)。2013年中三位安全專家就利用了某一洩露的數據庫進行過測試,其1小時成功率為60%,而20小時成功率更是達到了90%。
作為替代,Jakobsson建議用戶採用所謂的「快速寫詞」法來設置密碼,即用幾個單詞來組織成一個故事,從而構成密碼組合。比方說,跑步時踩到一隻松鼠,可以快速記憶為「running forest squirrel」。
這種辦法因為有故事情節所以方便記憶,但是由於所用字符數通常超過了10到12個,暴力破解法是很難破解的,除非破解者採用單詞組合等其他技術,但是單詞組合的可能性近乎無限,對於暴力破解來說差不多是無解的。
話雖如此,在設置密碼時故事也不能亂講。研究者發現,用「快速密碼」法設置的密碼的安全性取決於所用組合在語料庫中出現的概率。比方說,常見的「I love you honey」在微軟的語料庫Web N-gram Services中的出現頻率為2/100000000,相對而言這屬於很糟糕的密碼,而講述工作路上不小心踩扁了一隻青蛙的「frog work flat」的出現幾率卻只有百萬的3次方分之一,強度非常之高,所以,要想取好密碼,關鍵得講好你的故事。
不過密碼專家認為,相對於僅僅在密碼設置上下功夫,更好的辦法是廣泛採用雙重認證的方式來確保安全,這樣不安全的密碼就不會成為抵禦攻擊的唯一屏障了。