拖庫是指黑客盜取了網站的數據庫。撞庫是指黑客用拖庫得到的用戶名和密碼在其它網站批量嘗試登錄,進而盜取更有價值的東西。因爲一些用戶在多個網站用相同的用戶名和密碼,因此撞庫是有必定成功率的。如今稍微有點責任感的網站都不會將密碼明文保存在數據庫中,起碼會作一次MD5。要想撞庫,必須得知道密碼的明文,也就是用戶真正輸入的密碼。咱們知道MD5算法是不可逆的,黑客是怎麼弄到密碼明文的呢?最經常使用的辦法就是MD5字典。
MD5字典是什麼?
其實就是提早將一些比較簡單的密碼(好比10位之內的純數字)作MD5運算,將結果保存下來,破譯密碼的時候直接查就好了。好比字符串「123」的MD5值是「202cb962ac59075b964b07152d234b70」,黑客在拖來的數據庫中看到某位用戶的密碼是「202cb962ac59075b964b07152d234b70」,經過字典一查就知道密碼明文是「123」了。固然黑客用字典破譯密碼不會人工一個一個的查,而是用程序批量查詢的。
全部密碼都能用MD5字典破譯嗎?
理論上能夠,但實際上只能破解比較簡單的密碼。下面咱們看看不一樣複雜度密碼對應的MD5字典有多大。
1.10位之內純數字
共10^1+10^2+10^3+10^4+10^5+10^6+10^7+10^8+10^9+10^10=10(1-10^10)/(1-10)=11,111,111,110條≈110億條
保存每條記錄至少須要42字節(密碼10字節+MD5值32字節),則存儲該MD5字典至少須要約467GB空間。
2.10位之內的數字+小寫字母
共36(1-36^10)/(1-36)=3,760,620,109,779,060條≈3760萬億條
保存每條記錄至少須要42字節(密碼10字節+MD5值32字節),則存儲該MD5字典至少須要約157946TB空間。
經過以上兩個例子能夠看到,若是用戶的密碼是10位以上的數字和字母組合,經過MD5字典破解的機率幾乎爲零。但並非全部用戶的密碼都足夠強,黑客拖庫後,使用弱密碼的帳戶很容易就被查到明文了。對於使用弱密碼的帳戶,被拖庫的網站就無能爲力了嗎?不是的。辦法也很簡單,只要在MD5的時候加一個稍微複雜點的鹽(好比GUID/UUID),就能極大的提升用戶密碼的安全性。
加鹽後的明文=明文+鹽;
密文=MD5(加鹽後的明文);
以GUID/UUID做爲鹽爲例,哪怕明文再簡單,加一個32位的鹽,加鹽後的明文也在32位以上了,經過MD5字典來破解是不現實的。
若是全部網站都沒有加鹽,黑客只需建一套MD5字典,全部網站都能通用。若是全部的網站都加了鹽,退一萬步講,哪怕鹽也被黑客盜了,也不能用通用的MD5字典,得爲每個拖庫的網站建一個字典。這樣成本會高不少,若是動力不夠,黑客就放棄了。
防止拖庫和撞庫的對策有不少,我這裏只是分析了其中的一點,並提出了相應的對策。辦法很簡單,相信不少網站也加了鹽,或作了更復雜的操做,但沒有加鹽的網站也不少,要否則就不會常常發生撞庫的事了。
盡全力保護用戶的信息安全是每一個網站應盡的義務,這樣纔對得起用戶對你的信任。一個小小的改變可讓用戶的密碼更加安全,但願能引發全部網站的重視。算法