Encryption

在(成功)使用者登錄時更改密碼雜湊和 iv

  • November 15, 2017

我已經為我的登錄頁面(使用 php)實現了一個系統,它將在每次登錄時更新密碼雜湊和初始化向量(用於 openssl)。所以本質上,每次使用者成功登錄時,openssl 的初始化向量都會通過以下方式重新創建:

1. generate 16 random bytes.
2. Hash the bytes with SHA256.
3. Store the hash in the database.

對於加密密碼:

1. Grab the newly created IV.
2. Cut the IV to a 16-byte-long string using a secret algorithm.
3. Use the shortened IV in the openssl_encrypt function, 
  along with the secret key and plaintext password.

總體而言,密碼儲存為SHA256openssl 輸出的散列,IV 儲存為SHA256散列。

這個方法有多強?在任何情況下,更新數據庫使用者憑據會增加還是減少解密的機會?

重新創建 openssl 的初始化向量 1. 生成 16 個隨機字節。2. 使用 SHA256 對字節進行散列。3.將hash存入數據庫

如果您生成 16 個隨機字節 (128b),則沒有理由對其進行散列

密碼儲存為 openssl 輸出的 SHA256 雜湊。

這個方法有多強?

您正在加密具有主要弱點的密碼 - 它是可逆的。一旦有人訪問您的系統(因此包括您的密鑰在內的所有程式碼和配置),所有使用者密碼都將被洩露。使用者密碼應儲存為 salted hash,因此它們是不可恢復的。

似乎您正在有效地儲存密碼的加鹽雜湊,這很好。但是 sha256 是比較快的功能,你最好使用 PBKDF2(慢散列)來緩解字典或暴力攻擊。有一篇很好的文章如何正確地做到這一點

在任何情況下,更新數據庫使用者憑據會增加還是減少解密的機會?

問題是一旦有人可以訪問數據庫和所有配置,攻擊者將擁有解密所有密碼所需的所有資訊。

接下來 - 如果密碼不會自行更改,我認為沒有理由重新散列密碼,它只會增加您的應用程序的複雜性。

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