Key-Derivation

scrypt算法中的鹽值

  • April 6, 2022

我看到有很多與處理鹽值有關的問題,但到目前為止我所看到的都沒有解決以下問題。

當使用像 scrypt 這樣的 KDF 時,我相信 salt 的值應該是隨機的,並且每次甚至在每個使用者的基礎上都會發生變化(同一使用者在不同的時間點生成兩個不同的密鑰)。因此,將隨機生成的鹽儲存在一些持久儲存中是否安全?

我正在使用 scrypt 為 AES 生成密鑰。我不儲存用於加密的密鑰。因此,要解密數據,我必須再次使用 scrypt 來生成密鑰。為此,我必須獲取使用者密碼(每次由使用者輸入)和鹽。鑑於密鑰必須與用於加密的密鑰匹配,我是否必須儲存鹽才能重新派生相同的密鑰?

與初始化向量類似,這種鹽可以公開儲存嗎?對於我的案例,加密字元串和 IV 都將公開儲存,鹽也可以這樣儲存嗎?

鹽的目的是防止使用彩虹表。簡而言之,使用不同的鹽來散列不同的密碼。鹽不需要保密。鹽以易於獲取的形式儲存是一種常見的做法。

要使用 scrypt 派生相同的 AES 密鑰,您應該使用相同的輸入。不僅應該相同,而且其他參數(如*迭代次數)*也應該相同,這就是為什麼也應該儲存的原因。這些參數以及鹽不需要保密。

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