散列算法是單向函數(shù)。他們采用任何字符串并將其變成固定長度的“指紋”,該指紋無法反轉(zhuǎn)。這意味著,如果數(shù)據(jù)庫中的數(shù)據(jù)受到破壞,則黑客無法很好地獲得用戶密碼,因為用戶密碼從來沒有以哈希表的形式存儲在驅(qū)動器上。使用哈希的網(wǎng)站通常具有以下工作流程:
1. 用戶創(chuàng)建一個帳戶
2. 他們的密碼被散列并存儲在數(shù)據(jù)庫中
3. 當(dāng)用戶嘗試登錄時,將其輸入密碼的哈希值與數(shù)據(jù)庫中存儲的密碼進(jìn)行比較
4. 如果哈希匹配,則用戶可以訪問該帳戶。
5. 如果不是,則會發(fā)回一般錯誤消息,例如“輸入的無效憑據(jù)”,這樣黑客就無法將錯誤具體跟蹤到用戶名或密碼。
hash("hello")=2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hellu")=3937f988aeb57b6fd75b9c71bf17b9658ec97823bab613df438389b0c896b724
hash("danny")=668e2b73ac556a2f051304702da290160b29bad3392ddcc72074fefbee80c55a
注意:僅安全或加密哈希函數(shù)可用于密碼哈希。
令人遺憾的是,僅對密碼進(jìn)行哈希加密并不能確保安全性。
破解哈希:蠻力和字典攻擊
解密哈希的最簡單方法是猜測密碼。這樣做的方法是猜測用戶密碼,對猜測值進(jìn)行哈希處理,然后將其與您要解決的實際密碼的哈希值進(jìn)行比較。如果兩個哈希值匹配,則未加密的猜測版本就是正確的密碼。
一個蠻力攻擊經(jīng)歷給予一定的字符長度的每一個可能的組合。即使他們最終會100%破解任何給定的密碼,但由于此方法的計算量很大,因此很難使用該方法。使用蠻力破解某些長度甚至很短的密碼可能要花費(fèi)數(shù)千年的時間。
Tryingaaa:failed
Tryingaab:failed
Tryingaac:failed
...
Tryingacb:failed
Tryingacc:success
字典攻擊使用的文件包含可能是已使用密碼的常用單詞,短語或密碼。還有,你可以找到數(shù)據(jù)庫是按住頂部100000最常用的密碼。攻擊會對這些密碼進(jìn)行哈希處理,然后將哈希值與密碼進(jìn)行比較以破解。對于破解普通的JoeShmo來說,這有時是一個很好的使用方法,并且肯定比使用蠻力攻擊要快。
查找表可以通過預(yù)先計算哈希值來提高破解性能,因此,當(dāng)需要猜測密碼時,程序無需花費(fèi)計算時間實際對猜測值進(jìn)行哈希處理。
在下一節(jié)中,我們將研究“鹽化”,這使這些破解方法無法可靠地使用。
查找表,字典攻擊和暴力攻擊之所以可以起作用的原因是,每次密碼都以相同的方式散列。我們可以通過在哈希之前或之后在密碼前添加一個稱為salt的隨機(jī)字符串來使哈希隨機(jī)化。
hash("hello")=2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
hash("hello"+"jHjdbJShdiodb")=6f7f167a978166ee23b32c9531ce5dc23ae8fc26e412045858d938d11470831f
鹽不必是秘密的,因為攻擊者不知道鹽將是什么,因此無法為其創(chuàng)建預(yù)先計算的表。
注意事項
·對每個哈希密碼重復(fù)使用相同的鹽
·使用短鹽
·使用奇怪的雙哈希值(例如:hash(hash(hash(‘mypass’))))在鹽里
·使用加密安全的偽隨機(jī)數(shù)生成器生成隨機(jī)鹽
·為散列的每個密碼生成一個新的隨機(jī)唯一鹽
·產(chǎn)生長鹽
鹽化工作流程
存儲密碼:
·用CSPRNG生成超長鹽
·將鹽添加到用戶密碼中并進(jìn)行哈希處理
·將鹽和哈希值保存在數(shù)據(jù)庫中
檢查密碼:
·從數(shù)據(jù)庫中獲取鹽和哈希
·將鹽添加到提交的密碼之前并對其進(jìn)行哈希處理
·比較散列。如果它們相等,則密碼正確
注意:務(wù)必總是總是哈希在服務(wù)器上。有時未啟用JavaScript,并且哈希在客戶端不起作用。另外,沒有其他人可以訪問服務(wù)器,因此請確保對服務(wù)器進(jìn)行哈希處理。
上述就是關(guān)于密碼哈希指南:如何確保數(shù)據(jù)庫安全的全部內(nèi)容,想了解更多關(guān)于數(shù)據(jù)庫安全的信息,請繼續(xù)關(guān)注中培偉業(yè)。