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

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

故意增加密碼計(jì)算所需耗費(fèi)的資源和時(shí)間,使得任何人都不可獲得足夠的資源建立所需的rainbow table。

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

這個(gè)方案的常用算法有三種:

1)PBKDF2(Password-Based Key Derivation Function)

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

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

2) bcrypt

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

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

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

3) scrypt

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

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

小知識(shí):

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