我遇到了一家公司正在使用的系统,我们正在考虑与一家中型(对我们而不是他们)项目合作。正在通过电缆发送哈希密码的安全漏洞?
他们有一个我们需要整合的web服务。
我目前对正确的用户名/密码管理的理解是,用户名可以作为明文存储在数据库中。每个用户应该有一个独特的伪随机盐,它也可以以明文形式存储。它们的密码文本必须与盐级联,然后可将此组合字符串散列并存储在数据库的nvarchar字段中。只要密码通过SSL提交给网站(或网络服务),一切都应该是可爱的。
如果我错了,随意翻阅我的理解,如上所述。
无论如何,回到手头的话题。这个潜在的合作伙伴运行的WebService不接受我期望的用户名和密码。它接受两个名为'Username'和'PasswordHash'的字符串字段。我给出的'PasswordHash'值确实看起来像一个散列,而不仅仅是一个错误密码字段的值。
这是为我提高红旗。我不确定为什么,但由于某种原因,我觉得通过电线发送散列密码会感到不舒服。关于我的头顶,我无法想到这将是一件坏事的原因......从技术上讲,无论如何,数据库中都有散列。但它让我感到紧张,而且我不确定是否有这个原因,或者我只是偏执狂。
编辑
我被一些评论困惑下面,直到我重新阅读我的文章。
原来,我有一句“只要密码通过明文提交给网站(或网络服务),一切都应该是可爱的。”
我发誓,因为我以为我在想'SSL'这个词。出于某种原因,我输入了“明文”这个词。哇。
最差。错字。永远。
感谢那个弗雷迪。我想我会 - 仍然,很高兴知道它不像我最初担心的那样糟糕。 – 2010-04-30 09:06:38
弗雷迪是正确的:哈希密码是密码然后。除非服务器首先发送一个随机数,而客户端使用随机数来散列密码 - 这是允许的。但是不要重新发明轮子...... – Konerak 2010-04-30 09:09:13
实际上,哈希密码只是密码 - 用于该网站 - 。如果散列包含nonce/salt客户端,则拦截器将无法在其他站点上重用该密码。当然,客户端的散列是不可接受的,但它可能会增加一点瑕疵。 – Kzqai 2011-06-27 20:32:48