博客 / 詳情

返回

如何防範密碼被破解

用你會用什麼樣的算法來為你的用户保存密碼?如果你還在用明碼的話,那麼一旦你的網站被hack了,那麼你所有的用户口令都會被泄露了,這意味着,你的系統或是網站就此完蛋了。所以,我們需要通過一些不可逆的算法來保存用户的密碼。比如:MD5, SHA1, SHA256, SHA512, SHA-3,等Hash算法。這些算法都是不可逆的。系統在驗證用户的口令時,需要把Hash加密過後的口令與後面存放口令的數據庫中的口令做比較,如果一致才算驗證通過。

但你覺得這些算法好嗎?我説的是:MD5, SHA1, SHA256, SHA512, SHA-3。如果你使用的是MD5算法來加密你的口令,如果你的口令長度只有小寫字母再加上數字,假設口令的長度是6位,那麼在目前一台比較新一點的PC機上,窮舉所有的口令只需要40秒鐘。而據我們瞭解,幾乎有90%以上的用户只用小寫字母和數字來組織其口令。對於6位長度的密碼只需要最多40秒就可以破解了,這可能會嚇到你。

如果你願意花2000美金和一週的時間來構建一個CUDA,那麼,你可以在你組建的這個集羣中使用進行密碼窮舉運算,其速度是,1秒鐘可以計算7億個口令。對於目前實際當中使用的比較複雜的口令,其破解率也可以高達每秒一個。當然,這裏説的算法是MD5,SHA之類的算法。

那麼,對於這樣的一種情況來説,我們怎麼辦?我們還是有辦法的。

我們知道MD5,SHA的算法速度太快了。所以,我們需要一個“慢一點”的加密算法。呵呵。bcrypt是這樣的一個算法,因為它很慢,對於計算機來説,其慢得有點BT了,但卻慢得剛剛好!對於驗證用户口令來説是不慢的,對於窮舉用户口令來説,其會讓那些計算機變得如同蝸牛一樣。

因為bcrypt採用了一系列各種不同的Blowfish加密算法,並引入了一個work factor,這個工作因子可以讓你決定這個算法的代價有多大。因為這些,這個算法不會因為計算機CPU處理速度變快了,而導致算法的時間會縮短了。因為,你可以增加work factor來把其性能降下來。呵呵。

那麼,bcrypt到底有多慢?如果和MD5一起來比較的話,如果使用值為12的work factor的話,如果加密“cool”的話,bcrypt需要0.3秒,而MD5只需要一微秒(百萬分之一秒)。也就是説,前面我們説的那個只需要40秒就可以窮舉完所有的可能的MD5編碼的口令的算法,在使用bcrypt下,需要12年。

這就是bcrypt給你帶來的選擇,你可以一個安全的口令和一個快速的加密算法,或是一個不怎麼安全的口令和一個性能不好的加密算法。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.