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

Mar*_*rks 6 database security passwords hash

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

现在,我将密码保存为哈希.的DB帐户该应用的被限制的存储过程和excecution我通过给出用户名和哈希密码到返回1(真)或0(假)存储过程验证用户.

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

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

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

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

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

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

马克斯,提前谢谢你

Dav*_*ter 3

您提出的解决方案并不能真正解决问题。尽管如此,服务器必须知道密码,因此必须在某个时刻以明文形式传输密码,这是您首先要避免的。这样你只能避免每次都再次发送密码,但是如果有人在第一次传输密码时就发现了怎么办?

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