Passwords

在這種情況下,無限次重複使用相同的隨機數進行解密是否安全?

  • April 5, 2020

我正在創建一個密碼管理應用程序,並且正在考慮使用以下過程來確保密碼安全:

  1. 詢問使用者raw_password,例如“MyLongMasterKeyPassword”
  2. master_key使用raw_passwordScrypt 和隨機生成salt
  3. 儲存salt(公開)
  4. 請求raw_message(儲存的密碼)
  5. 使用 AEAD-ChaCha20Poly1305IETF生成cipher並生成 random nonce,然後請求AD(附加身份驗證)
  6. 儲存nonce
  7. raw_messagecipher, nonce, 和加密AD,然後使用nonce一次進行加密,返回cipher_text
  8. 儲存cipher_text
  9. cipher_text用儲存的salt和解密nonce,然後用儲存的請求ADraw_password重新生成,然後用master_key儲存的和salt生成一個,它返回(可能是密碼)cipher``master_key``nonce``decrypted_message

現在,問題是,這個程序安全嗎?具體來說,如果您只使用一次加密,那麼無限次重複使用相同的隨機數進行解密是否安全?

具體來說,如果您只使用一次加密,那麼無限次重複使用相同的隨機數進行解密是否安全?

事實上,所有良好的安全定義(密碼被證明是安全的)都不會限制解密算法的輸入。這背後的直覺是加密算法的輸入將通過網路發送,此時任何事情都可能發生在它身上。

僅當您使用相同的密鑰-隨機數對加密兩條不同的消息時,安全性才會崩潰。

現在,問題是,這個程序安全嗎?

是的。事實上,加密方案本質上是PKCS#5 的 PBES2的再發明和實例化,它可證明是安全的1(即使您要使用固定的隨機數)。在這種情況下,您的參數選擇是使用隨機隨機數 ChaCha-Poly 進行加密,使用 scrypt 進行密鑰派生。


1:我們當地的學究們可能會注意到,該論文中 LORX 的安全定義僅暗示 CPA 安全,但 CCA 安全定義的擴展應該很簡單,因為證明本質上依賴於向對手隱藏密鑰然後“繼承”加密方案的安全屬性。

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