冷知識較真:我們沒有存儲密碼,而是做了哈希處理,真的安全嗎
更多互聯網新鮮資訊、工作奇淫技巧關注原創【飛魚在浪嶼】(日更新)
數據泄露事件的網站可能通知你修改密碼,他們對其進行了“加密”。但是你還是應該更改它。你可能有疑問,當密碼暴露給非預期的第三方時,不是整個加密點都可以保護數據嗎?這裏的主要問題是它沒有被加密,而是經過散列處理,這裏有一個關鍵的區別:
密碼哈希表示你的密碼,該密碼不能使用哈希還原,但是如果有人再次對其進行哈希處理並獲得相同的結果,則仍可以確定原始密碼。
哈希的弱點
讓我們開始以一種普通人可以理解的方式進行更多的探討,從密碼哈希實際上是什麼開始:有兩個與該討論相關的定義屬性:
- 密碼哈希是單向的:你可以哈希,但永遠不能逆哈希
- 哈希過程是確定性的:你將始終獲得具有相同輸入的相同輸出
例如,使用以下密碼:
P@ssw0rd
這是一個很好的密碼,因為它具有小寫,大寫,數字和非字母數字值,並且長度為8個字符。但是,你的人腦以某種方式查看了它並決定“不,這不是一個好的密碼”,因為你看到的僅僅是字符替換。黑客們也已經解決了這個問題,這就是為什麼網站上任意組合規則建議都不是那麼有用的原因。以下是該密碼的哈希值:
161ebd7d45089b3446ee4e0d86dbcf92
該哈希是使用MD5哈希算法創建的,長度為32個字符。用MD5散列的較短密碼仍為32個字符長。整個用Md5散列的博客帖子也長32個字符。這可以看出散列和加密之間的根本區別:散列是數據的表示,而加密是受保護的數據。如果擁有密鑰,可以反向進行加密,這就是為什麼它被用於保護設備上的文件到信用卡號(如果您將其保存在網站上使用的所有內容)以及通過互聯網發送的本頁內容的原因。在每種情況下,在將來的某個時候都需要以其原始格式檢索受保護的數據,因此需要進行加密。而哈希是,無需在註冊時檢索提供給網站的密碼,只需確保它與你在登錄時提供的密碼匹配,即可使用哈希。
那麼,哈希在哪裏有什麼問題?
在谷歌搜索該哈希搜出了一堆網站,這些網站將原始密碼與哈希版本相匹配。在這裏,哈希的確定性反而變成了劣勢而不是優勢,因為一旦哈希和純文本版本相互匹配,便獲得了一個方便的可搜索索引。另一種思考方式是密碼哈希值太可預測了,那麼我們該怎麼辦?增加隨機性嗎?
進一步説,如果不只是對單詞“ P@ ssw0rd” 進行哈希運算,而是先向其中添加了十幾個完全隨機的字符,然後對其進行哈希運算。如果其他人並使用相同的密碼,但使用不同的隨機鹽(Salt)得到了不一樣的密碼,該隨機碼被添加到密碼中,然後進行哈希處理。即使使用相同的密碼,當與個性的隨機碼/鹽組合時,所得的哈希值本身也將是唯一的。只要在登錄時將與註冊時使用的相同的鹽添加到您的密碼中(是的,這意味着將鹽與哈希一起存儲在數據庫中的某個位置)。
問題是,如果某人擁有數據庫中的所有數據,他們難道就不可以重現隨機碼/鹽和哈希過程嗎?也就是説,數據庫那裏已經放了鹽和哈希,從數據庫中選擇一個鹽,然後將其添加到每個密碼中,對其進行哈希處理,然後查看它是否與密碼匹配?唯一阻礙密碼破解的是時間。從數據庫中散列一個用户記錄的密碼列表需要多長時間?以十億註冊用户的網站需要有多長時間?這一切都取決於所選擇的哈希算法。消費級cpu硬件能夠進行每秒數十億次運算。通常算法使用MD5或SHA-1。以這樣的猜測率,散列密碼的破解不會保持多長時間。
現實網站是可能使用bcrypt的哈希算法。這是一種用於專門用於存儲密碼的哈希算法,它與上述算法的真正區別在於它的速度很慢。創建哈希需要花費數千萬倍的時間。當您在網站上註冊或登錄時,計算密碼的哈希值僅需不到一秒鐘的時間,但是對於嘗試通過哈希來破解你的密碼,加大了難度,但並非不可能...
查密碼強度
這個網站可以查詢你的密碼出現的頻次
“passwo”出現了3649次
這是一個非常差勁的密碼,不是因為沒有數字,大寫字母或非字母數字字符(我可以很容易地使密碼非常小寫),而是因為它的可預測性和普遍性。
“iloveyou”則出現了160萬次,密碼標準太弱,所以可能很多人使用了該密碼,因此很容易被破解。
諸如bcrypt-generator.com之類的在線工具可以方便會根據給定的哈希值檢查給定的密碼。
因此網站泄露,這就是建議更改密碼的原因。因為即使使用良好的密碼哈希算法也可能會破解它們。它們不能被解密,因為它們首先沒有被加密。
你密碼的哈希如果是人腦易分辨有意義的版本,則更加危險。因為密碼哈希表示你的密碼,該密碼不能被還原密碼,但是如果有人再次對其進行哈希處理並獲得相同的結果,則仍可以確定原始密碼。