這幾年來屢屢發(fā)生各大網(wǎng)站用戶數(shù)據(jù)被脫褲的事件,而一些公司對于用戶信息保護意識的缺失更加加劇了這些事件的影響,那么怎么做才能夠保證用戶數(shù)據(jù)的安全呢.
首先,服務器端常見的幾種 不安全的密碼儲存方式如下
1 明文儲存
用戶注冊后,直接把用戶的密碼存入數(shù)據(jù)庫的一列中,登錄的時候取出,與用戶輸入進行比較.
這種方式基本已經(jīng)銷聲匿跡,用于沒有什么安全要求的小網(wǎng)站,因為這種方式儲存的數(shù)據(jù)一旦被人拿到數(shù)據(jù)庫的權(quán)限,所有密碼都會暴露,毫無安全性可言
2 加密存儲
將用戶注冊時的密碼加密后,存儲在數(shù)據(jù)庫中 ,這種方式相對與明文存儲來說,已經(jīng)較為安全,但是驗證的時候需要對密碼進行解密.而且,秘鑰一旦暴露,整個數(shù)據(jù)庫密碼也有可能泄露
3 哈希存儲
哈希是一種不可逆的運算,因此經(jīng)過哈希的密碼是不能恢復到明文的,但是仍存在很大的風險隱患.原因如下\
很多做黑產(chǎn)的人手中都有大量的"褲子",即用戶信息數(shù)據(jù)庫,而且通常有一些其他的方式來獲取用戶名和密碼,比如中間人攻擊和釣魚.通過本數(shù)據(jù)庫內(nèi)橫向的比對,可以由一個暴露的密碼的哈希值導出所有相同的哈希值,得出一大批的密碼明文.
而且,哈希函數(shù)的種類十分有限,常用的只有md5和幾種sha,攻擊者通過構(gòu)建一張彩虹表(即計算出大量的常用密碼的哈希值并存入一個數(shù)據(jù)庫),來很快的找到一些哈希值的原值,從而破解密碼.
那么,什么才是正確的方式呢?
正確的方法就是:
哈希加鹽
鹽就是加在密碼后面的一段隨機字符串,加上這段字符串之后再進行哈希這一段字符串使可以公開的,(作用與非對稱加密中的公鑰類似),但是必須足夠復雜,而且對于每個用戶來說不能夠重復,以防范相同密碼進行的撞庫等攻擊.
加鹽后也使得彩虹表失效