安全的存儲密碼該如何設(shè)置

最近爆出的網(wǎng)站安全問題越來越多,甚至有部分網(wǎng)站的密碼泄露,層出不窮的類似事件對用戶會造成巨大的影響,那么安全的存儲密碼該如何設(shè)置呢?今天我就給大家介紹一個非常不錯的方案。

故意增加密碼計算所需耗費的資源和時間,使得任何人都不可獲得足夠的資源建立所需的rainbow table。

這個方案有一個特點,算法中都有個因子,用于指明計算密碼摘要所需要的資源和時間,也就是計算強度。計算強度越大,攻擊者建立rainbow table越困難,以至于不可繼續(xù)。

這個方案的常用算法有三種:

1)PBKDF2(Password-Based Key Derivation Function)

PBKDF2簡單而言就是將salted hash進行多次重復計算,這個次數(shù)是可選擇的。如果計算一次所需要的時間是1微秒,那么計算1百萬次就需要1秒鐘。假如攻擊一個密碼所需的rainbow table有1千萬條,建立所對應的rainbow table所需要的時間就是115天。這個代價足以讓大部分的攻擊者忘而生畏。

美國政府機構(gòu)已經(jīng)將這個方法標準化,并且用于一些政府和軍方的系統(tǒng)。 這個方案最大的優(yōu)點是標準化,實現(xiàn)容易同時采用了久經(jīng)考驗的SHA算法。

2) bcrypt

bcrypt是專門為密碼存儲而設(shè)計的算法,基于Blowfish加密算法變形而來,由Niels Provos和David Mazières發(fā)表于1999年的USENIX。

bcrypt最大的好處是有一個參數(shù)(work factor),可用于調(diào)整計算強度,而且work factor是包括在輸出的摘要中的。隨著攻擊者計算能力的提高,使用者可以逐步增大work factor,而且不會影響已有用戶的登陸。

bcrypt經(jīng)過了很多安全專家的仔細分析,使用在以安全著稱的OpenBSD中,一般認為它比PBKDF2更能承受隨著計算能力加強而帶來的風險。bcrypt也有廣泛的函數(shù)庫支持,因此我們建議使用這種方式存儲密碼。

3) scrypt

scrypt是由著名的FreeBSD黑客 Colin Percival為他的備份服務(wù) Tarsnap開發(fā)的。

和上述兩種方案不同,scrypt不僅計算所需時間長,而且占用的內(nèi)存也多,使得并行計算多個摘要異常困難,因此利用rainbow table進行暴力攻擊更加困難。scrypt沒有在生產(chǎn)環(huán)境中大規(guī)模應用,并且缺乏仔細的審察和廣泛的函數(shù)庫支持。但是,scrypt在算法層面只要沒有破綻,它的安全性應該高于PBKDF2和bcrypt。

小知識:

bcrypt,是一個跨平臺的文件加密工具。由它加密的文件可在所有支持的操作系統(tǒng)和處理器上進行轉(zhuǎn)移。它的口令必須是8至56個字符,并將在內(nèi)部被轉(zhuǎn)化為448位的密鑰。然而,所提供的所有字符都具有十分重要的意義。密碼越強大,您的數(shù)據(jù)就越安全。