盐不需要是唯一的。这不是绝对的要求。但是,您使用的不同盐越多,安全性就越高,因此如果它们几乎是唯一的,那很好,但不要担心某些人可能会由于随机性差而共享盐。
Salt用于防止人们使用预先准备好的彩虹表来破解您的密码。如果您在每个密码上使用相同的盐,您已经挫败了预先准备好的彩虹表,但可能值得破解者花时间为您的加盐密码创建自定义彩虹表。如果您为某些用户更改盐,那么您会降低破解者在制作彩虹表时的潜在收益。例如,如果你随机使用了两种盐,那么破解者需要创建两个彩虹表。如果你随机使用 50 种盐,那么破解者需要创建 50 个彩虹表——得到更多的工作。如果您为每个用户使用随机生成的盐,破解者必须为每个用户重新创建一个新的彩虹表。现在这项工作太多了,破解者不会费心去尝试,而是使用不同的攻击。
如果您为每个用户随机生成了盐,则有可能两个或多个用户的盐是相同的。这只会略微影响网站的安全性。破解者现在可以使用自定义彩虹表来破解所有相同的加盐密码。如果具有相同盐的用户数量足够大,这可能是一种可行的攻击。如果相同盐的数量在单个数字中,则不会造成大问题。
盐的价值不必是秘密。隐藏盐值是由某些人完成的,但主流密码系统通常不会。将盐保密并不能提供太多额外的安全性。salt的目的是确保每个用户的密码算法不相似,从而阻止彩虹表攻击。只要盐通常几乎是唯一的,知道盐不会使哈希更容易破解。