我在哪里用盐和哈希密码? 在客户端还是在主机上?

我认为直接在客户端机器上密码和散列密码会更聪明。 原因是,我实际上从不想获取用户的密码。 这对他来说应该是秘密的,而不是我们两个人的秘密。 现在有人争辩说,你想保持盐的秘密,所以你不能在通道上以明文形式发送。 显然,情况并非如此。 所以现在我没有看到任何理由,为什么我不应该从客户端请求散列。 你怎么看?

编辑讨论向主机发送客户密码的问题其实并不是直接的问题。 客户端的问题是将密码从他的计算机中发出。 乐观的客户可能会认为他的电脑是保存领土。 但是从电缆(或天线)出来的所有东西都是夏娃的领地。 在安全场景中,你永远不会偏执。 再说一遍:密码永远不会离开客户端电脑!


发送密码短语或其哈希可以让攻击者记录哈希并将其用于重放攻击。

您通常希望使用质询/响应协议,这意味着您发送了一个随机数。 客户端使用其密码的散列作为密钥对该随机数进行加密(或进行密钥散列),并将结果发回。 你也这样做,看看这两场比赛。

这使您可以验证匹配的密钥,而不必通过不安全的通道发送密钥本身。

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


通常,散列意味着混淆实际的密码,并且不能防止重放攻击。 您需要一个安全的套接字层来确保通道受到保护。

散列法有利于防止信息泄露。 比如说,有人抓住了你的用户表,现在他们拥有大量的账户。 由于人们重复使用密码,这些帐户可以用来攻击其他网站。 哈希使得难以将哈希反转为密码。

只有当您要在本地存储该密码时(例如移动设备),才需要在客户端散列密码。 通常,您想在服务器级别执行哈希。


这样做的麻烦在于腌制后的哈希密码然后通过网络传播,如果有人拦截它,他们可以使用它。

如果服务器将salt用于客户端,然后客户端使用服务器创建的salt发回盐渍哈希密码,可能会起作用。 攻击者可能能够捕获到答复,但由于服务器的salt每次都会有所不同,因此客户端的响应每次都会有所不同。 然而,这要求服务器知道密码,以便它可以用盐重新粉碎它,从而击败你的目标之一。

基本上,服务器必须知道一些事情,以确保客户端不会欺骗它; 做这件事的经典方法是让服务器存储盐腌散列密码,然后客户端将密码发送到服务器,该服务器通过腌制和散列发送的密码并将结果与​​它存储的内容进行比较来验证客户端发送的内容。 这可以避免服务器以明文形式保存密码,但确实意味着密码通过网络传播。 因此,请确保密码在发送之前已加密。

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

上一篇: Where do I salt and hash my Passwords? At the client or at the host?

下一篇: Is it safe to hash passwords that protect sensitive data with MD5?