在身份验证中使用Hashing + salting电子邮件 - 好的还是坏的做法?

问题描述 投票:0回答:2

散列+盐渍电子邮件地址和用户名不是正常的事情吗?就像在数据泄露中一样,您无法知道谁注册了该服务,因为每个字段都是哈希+盐渍的?因为在互联网上有很多不足之处,有没有任何缺点?

django security authentication hash salt
2个回答
1
投票

对用户名/电子邮件地址进行加盐和散列不是标准做法。

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

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

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

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

此外,如果您正在使用用户名,那么您将如何防止重复?

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

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

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


0
投票

由于以下几个原因,散列和使用用户名和电子邮件地址并不常见:

可用性

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

安全

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

© www.soinside.com 2019 - 2024. All rights reserved.