假设我为每个用户存储了一个随机salt value。更改用户密码时是否必须生成新的salt值,或者在该用户帐户的整个生命周期内使用相同的值?
答案 0 :(得分:21)
你应该改变盐。对于所有密码实例,salt被设计为唯一的(尽可能多)。
如果对旧密码和新密码使用相同的salt,则看到旧散列密码和新散列密码的攻击者可以攻击两者,但成本不到攻击成本的两倍。这正是盐所设想避免的那种东西(盐没有其他用途)。
当然,旧密码不再是进入您的系统的有效方式,但由于用户倾向于重复使用密码,旧密码可能仍然值得(来自攻击者)观点看法)。特别是,当用户再次更改密码时,用户可以重复使用旧密码(这是大多数用户在面对需要定期更改密码的系统时所做的事情:他们在两个密码之间切换)。
答案 1 :(得分:2)
如果密码不弱(并且攻击者不知道盐),使用不同的salt值将无法提高密码安全性,如果密码更改,所以您可以保持不变。
salt值的目的是确保具有相同密码的不同用户不具有相同的密码哈希值。
无论如何,假设攻击者之前已经破解了用户密码并且知道了盐值。如果你只更改密码,攻击者可以减少计算次数,因为他已经知道了盐。
因此,在设置新密码时更改盐可能是个好主意。