Passwords
在這種情況下,無限次重複使用相同的隨機數進行解密是否安全?
我正在創建一個密碼管理應用程序,並且正在考慮使用以下過程來確保密碼安全:
- 詢問使用者
raw_password
,例如“MyLongMasterKeyPassword”master_key
使用raw_password
Scrypt 和隨機生成salt
- 儲存
salt
(公開)- 請求
raw_message
(儲存的密碼)- 使用 AEAD-ChaCha20Poly1305IETF生成
cipher
並生成 randomnonce
,然後請求AD
(附加身份驗證)- 儲存
nonce
raw_message
用cipher
,nonce
, 和加密AD
,然後使用nonce
一次進行加密,返回cipher_text
- 儲存
cipher_text
cipher_text
用儲存的salt
和解密nonce
,然後用儲存的請求AD
和raw_password
重新生成,然後用master_key
儲存的和salt
生成一個,它返回(可能是密碼)cipher``master_key``nonce``decrypted_message
現在,問題是,這個程序安全嗎?具體來說,如果您只使用一次加密,那麼無限次重複使用相同的隨機數進行解密是否安全?
具體來說,如果您只使用一次加密,那麼無限次重複使用相同的隨機數進行解密是否安全?
事實上,所有良好的安全定義(密碼被證明是安全的)都不會限制解密算法的輸入。這背後的直覺是加密算法的輸入將通過網路發送,此時任何事情都可能發生在它身上。
僅當您使用相同的密鑰-隨機數對加密兩條不同的消息時,安全性才會崩潰。
現在,問題是,這個程序安全嗎?
是的。事實上,加密方案本質上是PKCS#5 的 PBES2的再發明和實例化,它可證明是安全的1(即使您要使用固定的隨機數)。在這種情況下,您的參數選擇是使用隨機隨機數 ChaCha-Poly 進行加密,使用 scrypt 進行密鑰派生。
1:我們當地的學究們可能會注意到,該論文中 LORX 的安全定義僅暗示 CPA 安全,但 CCA 安全定義的擴展應該很簡單,因為證明本質上依賴於向對手隱藏密鑰然後“繼承”加密方案的安全屬性。