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