散列密码时从哪里获取盐?
Where to get salt when hashing passwords?
我了解到我需要使用 salt,这样相同的密码就不会出现在数据库中。
但是去哪里弄盐呢?我不能一劳永逸,因为它无济于事。我可以生成一个随机的,但是每次哈希都会不同,没有人会重新登录。
所以我发现了使用加密安全 RNG 并与用户一起存储盐的建议。
但为此我必须将 table 变大。我不能使用相同的散列函数来散列用户名并将其用作密码的盐吗?它应该是密码安全的,因为我使用密码安全的散列函数来散列密码,对吗?
通常,您会为每个密码生成一次不同的(不一定是随机的)盐,并将其与哈希一起存储。
如果用户名是唯一的,则从用户名生成盐来生成盐就足够了。通过使用加密散列函数生成盐,您实际上并没有获得任何东西(但您也没有真正失去任何东西),均匀分布就足够了。即使只是按原样使用用户名也会阻止相同的密码出现在数据库中,但它不会像具有更广泛分布的盐那样加强它对彩虹 table 攻击的抵抗力。
我了解到我需要使用 salt,这样相同的密码就不会出现在数据库中。
但是去哪里弄盐呢?我不能一劳永逸,因为它无济于事。我可以生成一个随机的,但是每次哈希都会不同,没有人会重新登录。
所以我发现了使用加密安全 RNG 并与用户一起存储盐的建议。
但为此我必须将 table 变大。我不能使用相同的散列函数来散列用户名并将其用作密码的盐吗?它应该是密码安全的,因为我使用密码安全的散列函数来散列密码,对吗?
通常,您会为每个密码生成一次不同的(不一定是随机的)盐,并将其与哈希一起存储。
如果用户名是唯一的,则从用户名生成盐来生成盐就足够了。通过使用加密散列函数生成盐,您实际上并没有获得任何东西(但您也没有真正失去任何东西),均匀分布就足够了。即使只是按原样使用用户名也会阻止相同的密码出现在数据库中,但它不会像具有更广泛分布的盐那样加强它对彩虹 table 攻击的抵抗力。