目前,我的项目仍然使用MD5哈希加密密码。是的,我知道。
我计划更新密码系统,以便在PHP中使用更新的password_hash和password_verify函数,这将提高用户密码的安全性。
然而,我的主持人团队表达了一个担忧:由于我们的核心规则之一禁止用户拥有多个帐户,他们需要知道两个帐户是否属于同一个人。他们使用的一种方法是检查两个可疑帐户上的MD5哈希是否相同--如果是,那么帐户具有相同的密码,猜疑加剧。但有了拟议的新系统,这将不再可能,因为这两个帐户将产生不同的散列。
为了找到一个折衷方案,是否有任何方法可以使用password_hash的更好的安全性,同时仍然为版主团队提供了一种方法来检测两个帐户何时共享相同的密码?
目前,我的想法是以其他方式对密码进行散列,从而生成相同密码的哈希,但我担心这会重新引入与我们试图从MD5中逃脱的漏洞相同的漏洞。这里是否有任何选择,或者我是否必须使用行政决策权来推翻这一关切?
发布于 2015-11-20 11:39:29
password_hash对相同密码产生不同结果的原因之一是防止信息泄漏,如果攻击者获得哈希,密码就更难破解。你真的不想损害这个安全特性--它不仅会减少对客户数据的保护,而且还会滚动你自己的解决方案,而不是使用得到良好支持和接受的解决方案。
使用相同的密码来检测同一个帐户持有人的多个帐户是个坏主意--它必然会导致误报并导致您阻塞合法帐户。
发布于 2015-11-20 17:07:30
您拥有的是经典的X问题 (xyproblem.info)。您希望防止用户拥有多个帐户,并且错误地认为,实现已损坏的密码系统和比较散列将帮助您解决这个问题。所以你问如何检测相同的密码。正如@Ggd的答案所描述的那样,尝试这样做会导致错误,很容易被规避,并迫使您放弃尝试过的和真实的密码处理方法。
你的问题背后的问题是“我如何阻止用户拥有多个帐户?”这个问题被问到在此之前。然而,一个问题是2008年的问题,甚至提到了“具有相同密码的帐户”作为缓解的一个因素,而另一个问题没有详细说明/选择,因此似乎应该重新讨论这个问题。
正如你和你的公司已经发现的那样,没有简单和简单的解决方案。你可以做的是有一个聪明的多前线努力,以尽量减少问题。有效检查包括:
解决你的问题的实际办法无疑需要一个平衡。除非你更关心的是“一个人,一个账户”,而不是增长和牵引力,否则你不想阻止那些门槛太高的用户。作为这种权衡的一部分,你绝对不想用一个糟糕的密码系统来危害你的用户的帐户安全:非法入侵的法律、财务和声誉成本远远超过任何(可疑的)利益。
发布于 2015-11-20 19:29:46
我要说,有一种方法可以安全地做到这一点-基于你问题中的这一声明:
他们使用的一种方法是检查两个可疑帐户上的MD5散列是否相同。
这并不是一种使用相同密码自动识别任意一对帐户的方法。您只需要一种方法,以决定一对帐户是否共享相同的密码,一旦已经存在怀疑。
基于此,我会这样解决这个问题:
当然,正如其他人所指出的,密码相同只是许多人中的一个信号。最可靠的方法是将许多不同的信号结合起来。我在这里提出的核查方法只有在怀疑低于或超过采取行动的门槛时才应作为最后的措施。
如果其他信号可以清楚地将帐户对放在阈值的一边,而不管密码的等效性如何,那么首先就没有必要将其放在可疑表中。
https://security.stackexchange.com/questions/106026
复制相似问题