身份验证中使用的哈希+加盐电子邮件 - 好做法还是坏做法?



电子邮件地址和用户名的哈希+加盐不是正常的事情吗?就像在数据泄露中一样,您将无法知道谁注册到服务,因为每个字段都是散列+加盐的?这有什么缺点吗,因为互联网上没有太多关于它的信息?

用户名/电子邮件地址进行加盐和哈希处理不是标准做法。

确实,如果在存储之前进行加盐和哈希处理,攻击者将无法识别存储的用户名/电子邮件地址。实际上,没有人能够访问用户名/电子邮件(包括系统管理员等授权用户)。

  • 听起来很安全,那么为什么这是一个问题呢?

当用户尝试登录时,他们将发送用户名(或电子邮件)和密码。由于每个盐对于该特定用户名都是唯一的,因此将用户名/电子邮件与存储的哈希用户名/电子邮件相关联的唯一方法是测试每个盐+哈希组合,直到找到匹配项或尝试/拒绝每个条目。

虽然这对于由少数用户组成的数据库来说是可能的,但在实践中是不可行的,因为散列对计算的要求很高。想象一下,登录服务等待数小时或数天来计算每个salt+hash组合,却发现用户名只是拼写错误。

此外,如果您要腌制用户名,那么您将如何防止重复?

用户名必须是唯一的。如果您加盐用户名,那么您将无法阻止多个用户使用相同的用户名。

  • 开发人员还可以采用哪些其他方法来保护信息?

最明显的解决方案是数据库加密。虽然这有点超出您的问题范围,但维基百科有一篇很好的文章涵盖了这个主题。

哈希和盐用户名和电子邮件地址并不常见,原因如下:

可用性

如果您的电子邮件地址经过哈希处理,则网站无法显示您的电子邮件地址,因为该值已哈希处理。

安全

从安全的角度来看,通过散列您的电子邮件地址,您不会获得太多收益。想象一下,如果有人可以访问您的电子邮件地址,他们可以使用相同的哈希算法,并通过遍历数据库轻松找到您的凭据。这就是为什么某些网站实现了单独的登录身份验证名称和显示名称的原因。登录名保持哈希(未加盐),而显示名称存储时未哈希。除非攻击者拥有您的登录名/地址,否则无法破坏您的数据。在这种特殊情况下,电子邮件地址的哈希处理可以保证数据的完全安全。

最新更新