【问题标题】:Is it a bad idea to send the hash of a password instead of the unhashed password?发送密码的哈希而不是未哈希的密码是一个坏主意吗?
【发布时间】:2010-12-03 06:56:55
【问题描述】:

例如,如果用户启用了 JavaScript,我们发送哈希他的密码并发送哈希。如果不是,我们发送未散列的密码和一个标记以标记它未散列。然后我们构建散列(如果它未散列)并将其与存储的散列进行比较。

这看起来既安全又简单。为什么它不是一种流行的发送密码的方式?我错过了什么吗?

换句话说:为什么丢失散列而不是未散列的密码更好? (我们大多数人在许多网站上只有很少的密码)

【问题讨论】:

  • 不要尝试实现自己的安全方案。你会以微妙和不那么微妙的方式弄错。请改用久经考验的系统。
  • 但我仍然看不出我的有什么问题:)
  • @Rinz:我也没有,但这还不足以成为一个好的安全方案。安全漏洞可能非常微妙,任何不是该领域专家的人都应该避免制定他们的安全方案。
  • @Rinz - 这就是问题所在......
  • 我愿意。如果您发送未加密的密码,它可能会被嗅探。如果有人知道您如何标记密码而不是哈希,那么他们可以设置嗅探器来查找进入您网站的标记为未哈希密码的内容并获取它们。

标签: javascript hash passwords security


【解决方案1】:

这里真正的问题是中间人攻击,其中有人会嗅探线路中的内容。无论您发送密码的哈希值还是密码本身都没有关系,如果下游有人可以阅读此内容,他们就可以以该人身份登录。唯一安全的选择是使用 SSL 阻止除服务器之外的任何人解密密码哈希/密码。

【讨论】:

  • 也可以绕过 SSL。有一个中间人可以做到这一点
  • 通过挑战/响应,您可以处理此问题。
  • mfeingold - 是的 SSL 可以通过代理欺骗用户在 http:// 而不是 https:// 下发布他们的详细信息来规避,但如果用户足够聪明以确保他们正在登录在具有他们所在站点的有效证书的页面上,代理无法获取他们的密码。显然,并非所有用户都知道要检查这一点。它可能不是 100% 万无一失的,但它已尽善尽美。
  • SSL 是安全的。然而,正如 JonoW 所解释的,它可以通过“自动化”社会工程来规避——但只能这样。再说一次,这可能就足够了。 :)
  • Ilari,最近有消息表明“SSL 是安全的”需要一个警告:cgisecurity.com/2009/11/…
【解决方案2】:

JavaScript 总是可以被篡改的。通过使用 JavaScript 对密码进行哈希处理,您至少公开了有关如何存储密码的规则。从黑客的角度来看,获取真实密码并将其发送到您的系统或获取经过哈希处理的密码并将其发送到您的系统是一回事。

如果您确实需要提高密码安全性,我建议您使用 https 并在服务器端对其进行哈希处理。不要忘记使用盐键。

【讨论】:

    【解决方案3】:

    然后我只是窃听哈希并使用它登录?

    如果您担心安全性,您应该使用 SSL。然后你可以直接发送密码。

    此外,SSL 证明他们正在登录的服务器不是冒充您的人。

    【讨论】:

    • 同意。证书现在这么便宜,为什么要为此失眠?
    【解决方案4】:

    请注意,如果您只对密码进行哈希处理,则哈希值将完全相同 时间。

    您应该在 POP3 协议中使用类似于 APOP 的某种挑战/响应机制

    【讨论】:

    • @Rinz:然后连同登录表单一起发送挑战。
    • 每次用户登录时挑战应该改变(使用线程ID,时间戳)
    【解决方案5】:

    你让你的工作变得比现在更复杂。只需以纯文本形式发送密码,哈希不会以任何方式提高安全性。 (查看其他人的答案)

    如果您使用相同的散列算法将密码存储在数据库中,实际上会降低安全性。因为如果有人可以从中获得散列密码,他就可以使用它们来验证自己的身份。 (他不必去哈希)如果你的网站有SQL注入或其他信息泄露问题,就会出现这种情况。

    【讨论】:

      【解决方案6】:

      有关实施和讨论,请参阅 Perl/Javascript MD5 Secure User Authentication

      【讨论】:

        【解决方案7】:

        我的建议是发送哈希。尽管您正在公开您的内部安全机制,但它会做一些事情。如果有人获得了哈希,则该人知道您没有在系统中存储密码,并且可能会阻止您试图窃取您的凭证存储库。其次,您正在保护最终用户的原始密码。即使有人获得了哈希,他们也没有原始密码,这可能使他们能够绕过用户使用相同或相似密码的其他系统(加盐会阻止哈希在其他地方使用)。此外,预散列密码允许您在后端严格设置字符限制和字母数字验证。

        【讨论】:

          猜你喜欢
          • 2011-06-20
          • 2016-05-18
          • 2012-07-07
          • 1970-01-01
          • 2023-04-08
          • 2020-04-27
          • 2012-05-06
          • 1970-01-01
          • 2014-07-28
          相关资源
          最近更新 更多