使用两种盐是个好主意吗?

信息安全 密码 bcrypt
2021-08-17 14:46:07

使用两种盐是个好主意吗?这意味着一个对用户来说是唯一的,一个对服务器来说是唯一的,当然使用 Bcrypt。

因此,例如,如果您使用 Golang 作为后端,从 /dev/random 生成 20 个字符的长盐,将其烘焙到 Golang 二进制文件中,并将其与从生成的 20 个字符的盐一起使用/dev/urandom 对每个用户都是唯一的?散列过程看起来像userSalt + serverSalt + 密码 = 密码摘要

这背后的想法是,即使攻击者可以访问您的数据库,他们仍然无法破解密码,因为他们还需要反编译您的服务器以获取 serverSalt。即使他们获得了 serverSalt,他们也需要生成彩虹表,由于 Bcrypt,这将需要很长时间。

先感谢您!

1个回答

无论如何,盐并不意味着私有。它们旨在避免对您的哈希的字典/彩虹表攻击(有关更多详细信息,请参阅为什么加盐哈希对密码存储更安全?)。

hashed_pwd = hash_function(salt + password)

因此,使用两种盐与使用一种盐的目的相同。

hashed_pwd = hash_function(salt1 + salt2 + password)

如果salt1 + salt2 == salt你得到第一个代码。