2011-02-02 164 views
0

考虑以下交互:是否可以验证密码哈希与另一个密码哈希?

用户将他们的用户名和密码存储在Web服务器上。为了安全起见,服务器记录密码的散列和一些独特的盐。

当用户使用客户端应用程序时,它会向服务器发送一个请求,提交他们的用户名和密码以及其他一些独特盐的散列。

所以,你必须在服务器上的以下信息,并且需要知道该请求是否是地道:

  • 服务器的盐
  • 服务器的哈希密码
  • 客户的盐
  • 客户端的散列密码

再次...客户端发送:clientSalt + MD5(clientSalt + password)。服务器有serverSalt + MD5(serverSalt + password)。我不想知道密码,我只想知道是否从密码计算了相同的密码。

不知道被哈希的密码,有什么办法来验证这两个哈希是相同的密码?

我的目标是在客户端 - 服务器环境中允许某种形式的安全身份验证,而无需通过线路交换实际密码。这只是我的一个想法,但我甚至不知道是否有可能。

回答

4

这将需要解锁密码,这是不可能的。如果服务器收到:salt, md5sum,则无法看到进入md5sum的内容。

一个质询 - 响应协议可以替代。服务器应该生成一个随机值nonce并将其发送给客户端。客户端计算出md5(md5(password) | nonce))并将其返回给服务器。服务器通过检查md5(storedpassword | nonce)进行验证。

+0

请您详细介绍一下吗? – EAMann 2011-02-02 16:09:58

0

我的目标是在客户端 - 服务器环境中允许某种形式的安全身份验证,而无需通过线路交换实际密码。这只是我的一个想法,但我甚至不知道是否有可能。

对于这一点,我建议寻找到的Kerberos:Official SiteWikipedia

1

不,你不能做到这一点。

一旦将盐加入混合中,实际上不可能比较散列。 (这样做需要在比较“未散列”数据之前对这些散列进行“散列”)。

0

这是不可能的。如果您不在服务器上存储密码,则用户必须提供密码。

OR

如果存储在服务器上的密码,用户可以提供使用要求的盐来计算哈希值。

0

您将无法使用此设置验证散列。 如果你不想让别人看到密码,那么SSL是更简单的方法。 如果您不想使用SSL,则可以检出SRP。 另外:不要使用MD5 + Salt来存储你的密码,使用密钥加强功能,如bcrypt或scrypt。

1

Challenge-response authentication可能是要走的路,可能使用Kerberos,这取决于您的权衡。其中一个折衷是攻击者控制客户端使用受到攻击的哈希来验证自己的可能性。

不要发明自己的密码协议。使用一个众所周知且经过充分测试的方法。如果可能的话,使用现有的(vetted)实现。