如何验证加盐密码?

信息安全
2021-08-21 04:10:22

如果只存储密码哈希,用户输入原始密码,程序怎么知道它是正确的?我想它可以检查所有可能的盐,但如果有 32 位盐,那么程序必须检查所有 2^32 盐(最坏的情况),这似乎需要很长时间。

3个回答

答案很简单;盐与密码哈希一起存储。典型的数据库方案如下所示;

uid  | username    | password         | password_salt
-----|-------------|------------------|--------------
0    | alice       | 862a6c81b7f8361b | 71e9c02731

盐不是秘密。它使某些类型的攻击变得更加困难。

这个答案应该包含你需要知道的一切。

如果不是,那么这个答案有更多关于加盐的来龙去脉的信息。

如前所述,盐与哈希一起存储。盐主要用于保护您的哈希免受彩虹表攻击。换句话说,蛮力攻击不能提前运行

正如 lynks 所指出的,盐与哈希一起存储。盐的重点是使某人无法通过寻找与任何用户的哈希匹配的密码来攻击整个数据库。

例如,假设我有一个非常大的网站 A 的用户表,他们有 1 亿用户。如果他们使用的是 32 位散列(无论如何这根本不安全)并且每个用户都有一个解析为不同散列的密码,那么我只需要尝试大约 43 个密码就可以找到与某个用户匹配的密码。但是,如果每个人使用不同的盐,那么我必须单独攻击每个密码。