Encryption
加密/解密方法安全
我想知道這個加密/解密流程是否非常可靠/安全。我使用帶有靜態 IV 的 AES CBC 256 位加密數據。
當使用者使用他的 Firebase 帳戶(身份驗證的第一階段)登錄時,他可以選擇輸入安全密碼。完成後,將檢索一些加密值,如前綴、後綴和 IV。我創建密鑰如下:前綴+給定密鑰+後綴。之後我解密一個檢索到的字元串,如果我得到一個特定的文本,我知道它是正確的密鑰並開始為這個會話解密它。
所以總結一下:
- 使用 Firebase 登錄
- 獲取前綴、後綴、IV 和加密字元串等加密值
- 讓使用者輸入密碼
- 創建格式為前綴 + 給定密碼 + 後綴的密鑰並應用靜態 IV
- 使用生成的密鑰解密字元串
- 如果成功解密,則使用此會話的密鑰
注意:由於某些原因,我不會使用公鑰/私鑰交換。
我想知道這個加密/解密流程是否非常可靠/安全。
您所描述的不是加密方案*,而是使用者身份驗證方案,即使用者嘗試登錄,提供密碼並且您要檢查該密碼是否屬於給定使用者。
現在您所描述的可能會實現該目標,但這並不是真正“認為”對密碼學中的這個案例有益的方法:
- 密碼的長度受限於密碼的密鑰大小(例如 32 字節?)。
- 密碼並非旨在為非均勻分佈的密鑰提供良好的安全性。
- 這種方法需要相當低的儲存空間,並且驗證速度非常快,這意味著攻擊者可以要求例如 GPU 每秒執行數十億個可能的密碼。
但從好的方面來說,使用密碼作為固定消息的密鑰是一種散列函式,使用 IV / 前綴 / 後綴是一種salt,它們都是密碼散列的核心成分。
現在您真正想要的是密碼散列方案(PHS)。這是一個函式,它接受儲存在數據庫中的鹽、成本參數(集)和密碼,並在這些參數中輸出確定性的值,您可以對照數據庫中的預儲存值進行檢查。然後,您將為每個使用者生成一個唯一的鹽,並在時間和記憶體方面使用您可以容忍的最高成本參數,以在數據庫洩漏的情況下減慢攻擊者的速度。常見的 PHS 是Argon2、bcrypt、scrypt或者如果您沒有選項PBKDF2。
*
:加密方案將指定給定密鑰、隨機數和消息如何生成加密消息。