我们需要对 BCrypt 使用固定盐吗?

Do we need to use a fixed salt with BCrypt?

Brypt 为每个密码生成一个随机盐。这可以防止 rainbow table 攻击。但这可以防止暴力攻击吗?我的意思是,如果用户选择一个弱的公知密码,则可以对公知密码列表进行暴力攻击。所以我的想法是将用户密码与一个固定的 salt 连接起来,最终也与一个用户 id salt(即:用户伪)连接起来。如果攻击者无法访问软件代码(如果他只破解数据库),那么他将无法使用众所周知的密码列表使用暴力攻击找到真实密码。

那么有什么好的方法呢?

Bcrypt(apassword) 

bcrypt(apassword+pseudo)

bcrypt(apassword+pseudo+fixedsalt)

正如您所写,盐可以防止彩虹 table 攻击并且无助于防止暴力破解,是 BCrypt 的缓慢性减轻了暴力破解。 BCrypt 提供了一个成本因素,它控制计算单个哈希所需的时间。

通过使用服务器端密钥(任何算法,如 AES-256)加密计算的散列值,可以更好地实现您想要的额外保护。密钥不会成为散列的一部分,并且可以在必要时进行交换。优点与固定盐(实际上称为胡椒)相同,只有在服务器上具有特权的攻击者才能开始破解密码哈希。我试图在我的 tutorial 关于安全存储密码的文章末尾解释这一点。

所以让 salt 完成它的工作,不要将其与其他任务混淆,而是在之后加密密码哈希。