这是一个简单的想法,基于一些阅读。
服务器存储(明文+盐)的散列版本。只要散列难以反转,就可以避免看到密码。
当客户端尝试登录时,服务器发送它(盐,随机),即一个恒定盐和一个新生成的随机字符串。
客户端发回哈希(哈希(明文+盐)+随机),即客户端附加盐,散列,然后附加随机,然后再次散列。
服务器检查哈希值是否与它自己的 H(H(pwd+salt)+rnd) 相同。
我对此没有太多经验,所以我能问一下潜在的问题是什么吗?另外,人们通常用盐做什么?你真的可以不用同样的盐吗?
您建议的方案不会为检查密码增加任何安全性,只会增加使用 SSL 登录所没有的复杂性。使用 SSL,您可以安全地将明文密码从浏览器传输到服务器,用盐对其进行哈希处理,然后检查存储的哈希值。这消除了对复杂方案的需要。目前,只有民族国家才能真正可行地以系统方式破坏 SSL 连接,尽管一些真正有进取心的黑客发现了一些有趣的漏洞。
您描述的方案听起来很像 Diffie-Helman 零知识密钥交换,它比 ssl 安全得多,因为它在最初与服务器设置后从未真正传输密码。今天这种密钥交换的问题在于,它必须在客户端用 Javascript 编写,因此,它会将实际的工作原理暴露给每个愿意查看的攻击者。然后,攻击者可以用其他东西替换您的 Javascript,或者如果您不使用 SSL,则只需利用它来收集初始密码,因此您再次只需要一个从客户端到服务器的 SSL 连接的安全性一堆增加的复杂性和故障点。有一些方法可以使用 ActiveX、Java 或其他项目来创建浏览器插件来处理所有密钥交换的东西,但这又是,
Firefox 一直致力于在浏览器级别实现密码的 Diffie-Helman 密钥交换,如果它成功的话,将允许大量增加安全性并使这种密码方案可行。