security - 我在哪里对密码进行加盐和哈希处理?在客户端还是在主机?

标签 security

我认为直接在客户端机器上加盐和散列密码会更聪明。原因是,我实际上从来不想得到用户的密码。这是一条对他来说应该是 secret 的字符串,而不是我们俩。现在有人争辩说,你想对盐保密,所以你不能通过 channel 以明文形式发送它。 Apparently, that is not the case .所以现在我看不到任何理由,为什么我不应该只从客户端请求哈希。你怎么看?

编辑讨论向主机发送客户端密码的问题实际上不是直接问题。客户的问题是完全从他的计算机中发送密码。一个乐观的客户可能会认为他的电脑是安全的。但是从那根电缆(或天线)出来的一切都是夏娃的领地。你永远不可能是安全场景中的偏执狂。再说一遍:密码应该 从不离开客户的电脑!

最佳答案

发送密码短语或其散列可以让攻击者记录散列并在重放攻击中使用它。

您通常希望使用质询/响应协议(protocol),这意味着您发送一个随机数。客户端使用其密码短语的哈希作为 key 对该随机数进行加密(或对其进行加密哈希),然后发回结果。你做同样的事情,看看两者是否匹配。

这使您可以验证匹配的 key ,而无需每次都通过不安全的 channel 发送 key 本身。

至于最初如何获取数据以进行比较,是的,您通常希望客户端对密码短语进行哈希处理,然后使用服务器的公钥对其进行加密,然后发送该加密的结果。

关于security - 我在哪里对密码进行加盐和哈希处理?在客户端还是在主机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6553363/

相关文章:

security - 具有同源策略和 OAuth 的 REST API 身份验证

MySql LOAD_FILE 奇怪的权限问题?

mysql - 多个主机名和多个权限?

oracle - 如何关闭 Oracle 密码过期功能?

security - Kerberos - 现实世界的例子?

c++ - 32 位逆向工程加密功能失败 64 位

仅当服务器需要客户端证书时,iOS 客户端才无法使用 f5 BigIP 进行服务器验证/身份验证

web-services - 保护 JSON Web 服务

javascript - 如何防范此类攻击?

security - 通过键空间而不是使用的字符类检查密码复杂性的好处?