Encryption

我應該在將鹽儲存到數據庫之前保護鹽還是改用胡椒(秘密鹽)?

  • July 28, 2021

如果我保護鹽或使用胡椒(秘密鹽)並且攻擊者可以訪問數據庫,他就無法對目標使用者(名人或重要人物)進行彩虹表攻擊。

我應該使用胡椒粉(秘鹽)嗎?如果是,那麼:

  • 如何使其在所有使用者或一組使用者中獨一無二(不使其成為全域和固定的)?
  • 如何在不進行硬編碼的情況下安全地儲存它?

還是我應該保護鹽​​?如果是,哪個更好:

  • 安全地儲存一部分鹽?
  • 加密鹽本身?(由此:用於加密的密鑰難道不是某種辣椒嗎?)
  • 從安全儲存的秘密中提取鹽?(另外:使用的秘密難道不是某種胡椒嗎?)

挑選辣椒的方式與挑選加密密鑰的方式相同:使用作業系統的 CSPRNG 生成 16-32 字節(128-256 位)的辣椒。

如果您的系統具有硬體安全模組 (HSM) 或安全飛地,您可以為那裡的所有使用者儲存一個辣椒。否則,您必須使用正常文件,因此請適當設置訪問權限。

在某些情況下,每個使用者可能有一個辣椒。為此,您通常不能使用 HSM 或安全飛地,因為您將擁有太多條目,並且還必須儲存哪個使用者與哪個辣椒一起使用。因此,它可能會使事情變得不那麼安全,而不是更安全。

根據定義,鹽是非秘密的。將鹽儲存在與使用者名和密碼雜湊相同的數據庫中。對於所有目前的安全密碼散列函式,鹽是密碼散列算法輸出的一部分,因此不需要單獨的數據庫列。

無論您做什麼,都可以確保您有辦法備份和恢復辣椒。畢竟,它不會被您的數據庫備份所備份!如果失去,您的使用者將無法登錄。請記住,安全性是機密性、完整性和可用性的組合,因此不要讓辣椒成為單點故障。

引用自:https://crypto.stackexchange.com/questions/92296