我們數(shù)據(jù)庫(kù)的權(quán)限管理十分嚴(yán)格,敏感信息開(kāi)發(fā)工程師都看不到,密碼明文存儲(chǔ)不行嗎?

不行。存儲(chǔ)在數(shù)據(jù)庫(kù)的數(shù)據(jù)面臨很多威脅,有應(yīng)用程序?qū)用?、?shù)據(jù)庫(kù)層面的、操作系統(tǒng)層面的、機(jī)房層面的、員工層面的,想做到百分百不被黑客竊取,非常困難。

如果密碼是加密之后再存儲(chǔ),那么即便被拖庫(kù),黑客也難以獲取用戶(hù)的明文密碼。可以說(shuō),密碼加密存儲(chǔ)是用戶(hù)賬戶(hù)系統(tǒng)的底褲,它的重要性,相當(dāng)于你獨(dú)自出遠(yuǎn)門(mén)時(shí)縫在內(nèi)衣里錢(qián),雖然你用到他們的概率不大,但關(guān)鍵時(shí)刻他們能救命。

那用加密算法比如AES,把密碼加密下再存,需要明文的時(shí)候我再解密。

不行。這涉及到怎么保存用來(lái)加密解密的密鑰,雖然密鑰一般跟用戶(hù)信息分開(kāi)存儲(chǔ),且業(yè)界也有一些成熟的、基于軟件或硬件的密鑰存儲(chǔ)方案。但跟用戶(hù)信息的保存一樣,想要密鑰百分百不泄露,不可能做到。用這種方式加密密碼,能夠降低黑客獲取明文密碼的概率。但密鑰一旦泄露,用戶(hù)的明文密碼也就泄露了,不是一個(gè)好方法。

另外,用戶(hù)賬戶(hù)系統(tǒng)不應(yīng)該保存用戶(hù)的明文密碼,在用戶(hù)忘記密碼的時(shí)候,提供重置密碼的功能而不是找回密碼。

保存所有密碼的HASH值,比如MD5。是不是就可以了?

不是所有的HASH算法都可以,準(zhǔn)確講應(yīng)該是Cryptographic Hash。Cryptographic Hash具有如下幾個(gè)特點(diǎn):

  1. 給定任意大小任意類(lèi)型的輸入,計(jì)算hash非常快;
  2. 給定一個(gè)hash,沒(méi)有辦法計(jì)算得出該hash所對(duì)應(yīng)的輸入;
  3. 對(duì)輸入做很小改動(dòng),hash就會(huì)發(fā)生很大變化;
  4. 沒(méi)有辦法計(jì)算得到兩個(gè)hash相同的輸入;

雖然不是為加密密碼而設(shè)計(jì),但其第2、3、4三個(gè)特性使得Cryptographic Hash非常適合用來(lái)加密用戶(hù)密碼。常見(jiàn)的Cryptographic Hash有MD5、SHA-1、SHA-2、SHA-3/Keccak、BLAKE2。

從1976年開(kāi)始,業(yè)界開(kāi)始使用Cryptographic Hash加密用戶(hù)密碼,最早見(jiàn)于Unix Crypt。但MD5、SHA-1已被破解,不適合再用來(lái)保存密碼。

那我保存用戶(hù)密碼的SHA256值。

網(wǎng)友評(píng)論