Encryption

鹽值是秘密還是可以像 IV 一樣以明文形式儲存?

  • August 22, 2013

從 Wikipedia 我讀到 IV 用於隨機化明文到密文的映射,並且 IV 通常與加密記錄一起儲存(以明文形式)。(http://en.wikipedia.org/wiki/Initialization_vector

但是,如果我在使用 Rfc2898DeriveBytes 派生密鑰時查看 C# 中的特定實現,則需要鹽值,並且我了解鹽的需要。但很明顯,稍後我將需要鹽來從我的秘密密碼中重新生成密鑰。這是否意味著鹽本身不是秘密,可以與加密記錄一起以明文形式儲存,就像 IV 一樣?

string passphrase = "Hello World, I'm the secret!";
string salt = "13245678";

var deriveBytes = new Rfc2898DeriveBytes(passphrase, Encoding.UTF8.GetBytes(salt), 50000);

using (var rijndael = new RijndaelManaged())
{
   rijndael.KeySize = 256;
   rijndael.Key = deriveBytes.GetBytes ( rijndael.KeySize / 8 );
   rijndael.IV = deriveBytes.GetBytes ( rijndael.BlockSize / 8 ); 

...
}

鹽可以公開。

重要的是,當您從某些輸入猜測中重新導出密碼時,您可以使用

在許多方面,鹽執行的功能與 IV 對密碼執行的功能相同。

您可以在此處閱讀有關鹽和密碼散列的更多資訊。

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