Security salt散列密码验证

Security salt散列密码验证,security,hash,password-hash,saltedhash,Security,Hash,Password Hash,Saltedhash,我一直在阅读OWASP 10,发现了存储信息的最佳实践。 盐渍哈希法。在这里,您为每个密码生成一个随机salt,并对其进行梳理、散列和存储。 我的疑问是,如果salt是随机生成的,那么当用户键入密码时,如何验证密码? 盐是否与用户名一起保存? 如果是这样,这种做法仍然很脆弱。 或者他们是如何做到的?盐与用户名一起保存。盐不是秘密。salt的目的是确保如果两个人拥有相同的密码,他们就不会拥有相同的哈希密码。这可以防止预先计算的哈希攻击(rainbow表),并防止泄漏数据库中两个用户具有相同的密码

我一直在阅读OWASP 10,发现了存储信息的最佳实践。 盐渍哈希法。在这里,您为每个密码生成一个随机salt,并对其进行梳理、散列和存储。 我的疑问是,如果salt是随机生成的,那么当用户键入密码时,如何验证密码? 盐是否与用户名一起保存? 如果是这样,这种做法仍然很脆弱。
或者他们是如何做到的?

盐与用户名一起保存。盐不是秘密。salt的目的是确保如果两个人拥有相同的密码,他们就不会拥有相同的哈希密码。这可以防止预先计算的哈希攻击(rainbow表),并防止泄漏数据库中两个用户具有相同的密码


虽然每用户随机盐是理想的,但盐的好处也可以通过确定但独特的盐实现。例如,您可以为数据库使用一些固定字符串,并将其与userid(
com.example.mygreatsystem:user1@example.com
)并将其用作盐。因为它对每个用户都是唯一的(不仅在这个系统中,而且在全球范围内),所以它实现了与随机salt相同的目标,而不需要额外的数据库查找。与随机盐一样,该方案不需要保密。盐的重要组成部分是它必须是独一无二的。但如果可行的话,与用户记录一起存储足够长(通常为8个随机字节)的每个用户随机salt是最佳做法。

感谢您的解释。我的怀疑是,如果盐不是一个秘密,并且黑客掌握了盐以及用户名和密码列表,那么破解密码对他来说是很容易的,对吧?不,这就是盐的意义所在。salt阻止哈希的预计算,因此攻击者必须一次破解一个密码。没有有效的方法来反转散列,因此他们必须猜测许多密码。如果您只使用SHA-2密码+散列,攻击者可以合理地破解非常弱的密码,但是如果您使用PBKDF2(或另一个密钥拉伸器)作为散列,则只有非常弱的密码才易受攻击,并且PBKDF2可以调整为使猜测尽可能慢。