在客户端散列密码是否安全?

如果您在通过线路发送用户密码并将其以纯文本格式保存在内存中之前先对用户密码进行哈希处理,这是否会提高应用程序的安全性?

我认为这可以通过保护存储在客户端内存中的数据来缓解一小部分漏洞。 但是,如果我们担心有人在阅读客户的记忆,那么可能会遇到更大的问题,这是我们无法解决的。

对客户端的哈希算法感到不适应。

密码散列在客户端是否通用? 这样做有没有其他的优点或缺点?

编辑:鉴于通信渠道是安全的(SSL)。 在什么条件下使用这种方法是可以接受的和值得的。 我在问这个问题是因为它是由一位“安全专家”提出的,我在某些应用程序功能中使用了这样的方案。


没有。

当客户端发送一些东西时,无论是P还是H(P)还是H(H(P))任何拦截此事件的人都可以简单地重新发送完全相同的东西,从而使任何类似的功能等同于直接使用密码。

这就是为什么你应该使用随机数; 服务器可以给出一些随机垃圾k ,客户端将计算H(P,k)并将其发送到服务器。 HMAC是这种方法的流行实现。

假设服务器从不接受相同的nonce两次,这对重播攻击是安全的。


在你描述的场景中,哈希与来自安全POV的密码是相同的:如果我拦截哈希,我不需要知道密码,我可以发送服务器哈希我拦截。

认证协议需要一定的时间来避免这个问题; 安全性很难,你最好选择并实施一个理解良好的协议,而不是自己动手。

如果您的流量正在通过SSL,您可以安全地截取和散列,从而为您带来额外的好处。


正如其他人指出的那样,发送哈希密码不会提高网站的安全性(因为您接受哈希密码,所有坏人需要知道哈希版本)。 这也不是很安全,因为坏人可能会加载你的登录页面并检查部署的Javascript或Java。

它所做的是防止有人看到数据包能够提取密码,这是适中的。 许多人在多个站点上使用相同的密码(我为所有人提供相同的密码,除了较高的安全站点),因此如果您可以从他们那里获得一个密码,您可以登录到其他站点的其他帐户。

它还可以防止即时临时将真实密码存储在您的网站上,并且如果您的网站遭到入侵,可能会提供一些额外的安全性。

所以,虽然我认为用户端哈希可能是一件好事,但不值得带来额外的麻烦。

而且,正如其他人告诉你的,不要推出自己的安全措施。 有太多事情可能会出错。 你不会注意到他们几乎像一个坏人那样快速地注意到它们。

链接地址: http://www.djcxy.com/p/485.html

上一篇: Does it make security sense to hash password on client end

下一篇: Difference between decimal, float and double in .NET?