【发布时间】:2020-09-16 14:56:00
【问题描述】:
我一直在阅读关于 OWASP 10 的内容,并且发现了存储信息的最佳实践。 盐渍哈希。您为每个密码生成一个随机盐并将其组合并散列并存储它。 我的疑问是,如果盐是随机生成的,当用户键入密码时如何验证密码? 盐是否与用户名一起保存? 如果是这样,这种做法仍然是脆弱的。 或者他们是怎么做到的?
【问题讨论】:
标签: security hash password-hash saltedhash
我一直在阅读关于 OWASP 10 的内容,并且发现了存储信息的最佳实践。 盐渍哈希。您为每个密码生成一个随机盐并将其组合并散列并存储它。 我的疑问是,如果盐是随机生成的,当用户键入密码时如何验证密码? 盐是否与用户名一起保存? 如果是这样,这种做法仍然是脆弱的。 或者他们是怎么做到的?
【问题讨论】:
标签: security hash password-hash saltedhash
盐与用户名一起保存。盐不是秘密。加盐的目的是确保如果两个人有相同的密码,他们不会有相同的散列密码。这可以防止预先计算的哈希攻击(彩虹表),并防止泄露数据库中的两个用户具有相同的密码。
虽然每个用户的随机盐是理想的,但通过确定性但独特的盐也可以实现加盐的好处。例如,您可以为您的数据库使用一些固定字符串并将其与用户 ID (com.example.mygreatsystem:user1@example.com) 连接起来,并将其用作盐。由于它对每个用户都是唯一的(不仅在这个系统内,而且在全球范围内),它实现了与随机盐相同的目标,而不需要额外的数据库查找。与随机盐一样,该方案不需要保密。盐的重要部分是它是独一无二的。但在实际可行的情况下,最佳做法是与用户记录一起存储足够长度(通常为 8 个随机字节)的每个用户随机盐。
【讨论】: