密碼存儲方式

1、哈希運算:即散列函數。它是一種單向密碼體制,即它是一個從明文到密文的不可逆的映射,只有加密過程,沒有解密過程。同時,哈希函數可以將任意長度的輸入經過變化以后得到固定長度的輸出。哈希函數的這種單向特征和輸出數據長度固定的特征使得它可以生成消息或者數據。建議使用SHA256,SHA512,RipeMD等函數,不使用MD5或SHA1。

2、常見密碼攻擊方式:字典攻擊、暴力破解、查表法、反向查表法、彩虹表(具體參看http://blog.jobbole.com/61872/)

3、系統隨機生成salt:在密碼中混入一段“隨機”的字符串再進行哈希加密,這個被字符串被稱作鹽值。這使得同一個密碼每次都被加密為完全不同的字符串。為了校驗密碼是否正確,我們需要儲存鹽值。通常和密碼哈希值一起存放在賬戶數據庫中,或者直接存為哈希字符串的一部分。鹽值并不需要保密,由于隨機化了哈希值,查表法、反向查表法和彩虹表都不再有效。攻擊者無法確知鹽值,于是就不能預先計算出一個查詢表或者彩虹表。這樣每個用戶的密碼都混入不同的鹽值后再進行哈希,因此反向查表法也變得難以實施。

鹽值應該使用基于加密的偽隨機數生成器(Cryptographically Secure Pseudo-Random Number Generator – CSPRNG)來生成。CSPRNG和普通的隨機數生成器有很大不同,如C語言中的rand()函數。物如其名,CSPRNG專門被設計成用于加密,它能提供高度隨機和無法預測的隨機數。我們顯然不希望自己的鹽值被猜測到,所以一定要使用CSPRNG。(Java:java.security.SecureRandom

對于每個用戶的每個密碼,鹽值都應該是獨一無二的。每當有新用戶注冊或者修改密碼,都應該使用新的鹽值進行加密。并且這個鹽值也應該足夠長,使得有足夠多的鹽值以供加密。一個好的標準的是:鹽值至少和哈希函數的輸出一樣長;鹽值應該被儲存和密碼哈希一起儲存在賬戶數據表中。

4、加鹽函數:加鹽可以讓攻擊者無法使用查表和彩虹表的方式對大量hash進行破解。但是依然無法避免對單個hash的字典和暴力攻擊。高端的顯卡(GPUs)和一些定制的硬件每秒可以計算數十億的hash,所以針對單個hash的攻擊依然有效。為了避免字典和暴力攻擊,我們可以采用一種稱為key擴展(key stretching)的技術。

思路就是讓hash的過程便得非常緩慢,即使使用高速GPU和特定的硬件,字典和暴力破解的速度也慢到沒有實用價值。通過減慢hash的過程來防御攻擊,但是hash速度依然可以保證用戶使用的時候沒有明顯的延遲。

key擴展的實現是使用一種大量消耗cpu資源的hash函數。不要去使用自己創造的迭代hash函數,那是不夠的。要使用標準算法的hash函數,比如PBKDF2或者bcrypt,scrypt。

5、其他參考資料:

http://en.wikipedia.org/wiki/Rainbow_table

http://project-rainbowcrack.com/table.htm(有一些常見的彩虹表的規格,大小)

http://en.wikipedia.org/wiki/PBKDF2

http://www.openbsd.org/papers/bcrypt-slides.pdf

http://www.tarsnap.com/scrypt/scrypt.pdf

http://codahale.com/how-to-safely-store-a-password/(這篇文章作者詳細分析了crypt的優點)

https://tools.ietf.org/html/draft-josefsson-scrypt-kdf-01(scrypt 草案)

https://crackstation.net/hashing-security.htm(介紹了如何正確的存儲密碼)

http://www.ietf.org/rfc/rfc2898.txt(關于基于密碼的鑒權, 提到了鹽,PBKDF2,KDF)

http://arstechnica.com/security/2012/08/passwords-under-assault/3/(介紹密碼安全)

https://www.schneier.com/blog/archives/2013/06/a_really_good_a.html(關于密碼破解的)

https://news.ycombinator.com/item?id=3724560(關于pbkdf2, bcrypt, scrypt的討論)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容