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

时间:2019-03-26 00:12:44

标签: django security authentication hash salt

电子邮件地址和用户名的哈希+盐腌不是正常的事情吗?就像在数据泄露中一样,您将无法知道谁注册了该服务,因为每个字段都是经过哈希+加盐处理的?互联网上没有太多关于这一点的内容吗?

2 个答案:

答案 0 :(得分:1)

  

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

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

  • 声音安全,为什么这是个问题?

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

尽管对于由很少用户组成的数据库而言,这可能是可行的,但由于散列在计算上的需求,因此在实践中是不可行的。想象一下,登录服务需要等待数小时或数天才能计算出每个salt + hash组合,只是发现用户名拼写错误。

此外,如果您在给用户名添加盐分,那么如何防止重复?

用户名必须唯一。如果给用户名加盐,则无法阻止多个用户使用相同的用户名。

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

最明显的解决方案是数据库加密。尽管这超出了您的问题范围,Wikipedia has a good article covering this topic.

答案 1 :(得分:0)

由于多种原因,对用户名和电子邮件地址进行散列和加盐并不常见:

可用性

如果您的电子邮件地址被散列,则该网站将因为该值被散列而无法显示您的电子邮件地址。

安全性

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