Key-Derivation

重用鹽為聊天應用程序生成對稱密鑰是否安全?

  • August 7, 2019

我正在編寫一個程序,允許兩個使用者通過 E2E 加密聊天與他們過去商定的秘密進行通信。

該過程如下:

  1. 使用 Argon2id 從密鑰派生密鑰,其中鹽在應用程序中被硬編碼。
  2. 密鑰用於加密crypto_secretbox來自 NaCl 的使用者消息。
  3. 消息被發送到伺服器並由其他使用者下載。
  4. 接收端的使用者使用以相同方式派生的相同密鑰解密消息。

據我了解,在密碼雜湊系統中,每個密碼唯一的鹽可以防止攻擊者預先計算出大量不同密碼的雜湊值。

我的應用程序為每個使用者使用不同的鹽(可能由伺服器生成)會有什麼好處嗎?

你永遠不應該重複使用鹽,你尤其不應該為你的整個應用程序硬編碼它!鹽有幾個目的,包括你提到的一個(擊敗彩虹表攻擊和其他基於預計算的攻擊)。但是,salt 還可以防止攻擊者嘗試一次破解多個使用者的密碼。如果您使用不唯一的鹽,攻擊者可能會為您的應用程序輕鬆建構彩虹表,或攻擊一批使用者。這幾乎和沒有鹽一樣糟糕!

通常,您希望鹽與加密數據或散列一起交換。在這種情況下,您希望將鹽和任何其他未加密的元數據與密文一起發送。鹽應該由雙方商定,而不是由伺服器或任何其他第三方生成。

話雖如此,您不應該使用商定的預共享秘密密碼來派生端到端聊天應用程序中的加密密鑰。加密密鑰應使用公鑰加密生成。我建議使用 NaCl 支持的 ECC 算法,例如x25519。商定的秘密只能用於身份驗證。這確保了弱密碼不會導致機密性失去。您應該向OTR學習,它使用SMP進行相互身份驗證。

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