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

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

如果密碼是加密之后再存儲,那么即便被拖庫,黑客也難以獲取用戶的明文密碼??梢哉f,密碼加密存儲是用戶賬戶系統(tǒng)的底褲,它的重要性,相當于你獨自出遠門時縫在內(nèi)衣里錢,雖然你用到他們的概率不大,但關鍵時刻他們能救命。

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

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

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

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

不是所有的HASH算法都可以,準確講應該是Cryptographic Hash。Cryptographic Hash具有如下幾個特點:

  1. 給定任意大小任意類型的輸入,計算hash非???;
  2. 給定一個hash,沒有辦法計算得出該hash所對應的輸入;
  3. 對輸入做很小改動,hash就會發(fā)生很大變化;
  4. 沒有辦法計算得到兩個hash相同的輸入;

雖然不是為加密密碼而設計,但其第2、3、4三個特性使得Cryptographic Hash非常適合用來加密用戶密碼。常見的Cryptographic Hash有MD5、SHA-1、SHA-2、SHA-3/Keccak、BLAKE2。

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

那我保存用戶密碼的SHA256值。

網(wǎng)友評論