WebApp密码管理 - 哈希,盐渍等

时间:2010-05-20 14:02:42

标签: database security hash passwords

我正在网络应用中搜索最安全(但又可行)的密码管理方式。

现在,我将密码保存为哈希。应用程序的DB帐户仅限于存储过程的执行,我通过将用户名和散列密码提供给返回1(true)或0(false)的存储过程来验证用户。

因此,即使您拥有该应用的数据库帐户,也无法从服务器获取密码。多数民众赞成我喜欢这个解决方案。但是要使用它,客户端必须通过Web提交密码,或者至少提供一个可以捕获的静态哈希。

所以我想到了使用这样的握手:

  • 客户端要求服务器提供盐。
  • 随机盐被提供给客户端并存储在服务器上,用于此单个客户端。
  • 客户端生成哈希(salt +密码)并将此哈希值返回给服务器
  • 服务器生成哈希(salt +密码)并检查它是否与客户端
  • 相同

使用此握手可以检查密码而无需发送密码或静态哈希。只是一个动态盐渍哈希,每次用户登录时都不同=>非常安全。

但是对于这次握手,我需要密码或者至少需要来自数据库的哈希密码。但这使得某人至少可以获得哈希密码并在应用程序外部强制使用它。

你更喜欢什么?将密码保存在数据库中并在那里制作任何东西(安全服务器),或者将其从数据库中取出并在外部进行(安全传输)?

提前致谢, 标记

1 个答案:

答案 0 :(得分:3)

您提出的解决方案并未真正解决问题。服务器必须知道密码,所以它必须在普通的某个时刻传输,这是你想要首先避免的。这样你只能避免每次都重新发送密码,但是如果有人在第一次传输时就抓住了它?

我认为你不应该重新发明轮子:-)对所有连接使用SSL,然后你的第一个解决方案工作正常。您甚至可以在客户端执行散列,因此只通过安全通道发送散列。您的服务器永远不会知道密码,也不必知道密码。