【发布时间】:2011-02-21 21:33:11
【问题描述】:
我正在寻找网络应用中最安全(但可行)的密码管理方式。
现在,我将密码保存为哈希。该应用程序的数据库帐户仅限于执行存储过程,我通过将用户名和散列密码提供给返回 1(true) 或 0(false) 的存储过程来验证用户。
因此,即使您拥有应用程序的数据库帐户,也没有机会从服务器获取密码。这就是我喜欢这个解决方案的地方。但是要使用它,客户端必须通过网络提交他的密码,或者至少是一个可以被捕获的静态哈希。
所以我想到了使用这样的握手:
- 客户端向服务器请求盐。
- 随机盐分给客户端并存储在服务器上供这个单个客户端使用。
- 客户端生成哈希(盐+密码)并将这个哈希返回给服务器
- 服务器生成哈希(盐+密码)并检查它是否与客户端相同
使用此握手可以在不发送自身或密码的静态哈希的情况下检查密码。只是一个动态加盐哈希,每次用户登录时都不一样 => 高度安全。
但是对于这次握手,我需要密码或至少来自数据库的散列密码。但这使某人至少可以获取哈希密码并在应用程序之外对其进行暴力破解。
你喜欢什么?将密码保存在数据库中并在那里进行任何操作(安全服务器),或者将其从数据库中取出并在外部进行(安全传输)?
提前致谢, 标记
【问题讨论】:
标签: database security hash passwords