我该如何存储密码盐?

ste*_*ped 11 php security passwords salt

使用PHP,我使用shama6算法使用hmac函数编码密码.我不确定的是如何正确储存盐.

散列密码的全部意义在于黑客可以访问数据库.如果我将数据库中的salt存储在与散列密码相同的行中,是不是就像我将黑客交给"密码"一样?我正拿着一把带锁的门,把入侵者递给钥匙.

任何人都可以向我解释他们如何储存他们的盐?

Mic*_*ski 16

将盐放入窃取数据库的攻击者的手中实际上并不是问题.将salt与原始密码组合到密码哈希中可以防止攻击者使用数百万已知和众所周知的密码哈希的"彩虹表"来获取某些被盗用户ID 的密码.

将密码和盐混合在一起会使得甚至单个密码难以破解许多数量级,因为盐会使彩虹表中已知的密码哈希失效.因此,即使攻击者知道每个用户的盐,这意味着为了破解任何单个用户,攻击者必须仅为该用户计算一个全新的彩虹表,其中将用户的盐与其他用户组合在一起他们开始使用彩虹表中已知的密码.

腌制密码不使它无法破解密码,但要困难得多.例如,攻击者可以使用哈希和盐来定位您的一小部分用户,这也是鼓励不太可能出现在彩虹表中的强密码的另一个原因.

  • +1我只想补充一点,你可以通过添加一个存储在除数据库以外的地方的应用程序范围的盐来进一步阻止攻击者.这样,即使有人掌握了数据库,他们仍然会丢失一条关键信息. (3认同)