我在哪里用盐和哈希密码? 在客户端还是在主机上?
我认为直接在客户端机器上密码和散列密码会更聪明。 原因是,我实际上从不想获取用户的密码。 这对他来说应该是秘密的,而不是我们两个人的秘密。 现在有人争辩说,你想保持盐的秘密,所以你不能在通道上以明文形式发送。 显然,情况并非如此。 所以现在我没有看到任何理由,为什么我不应该从客户端请求散列。 你怎么看?
编辑讨论向主机发送客户密码的问题其实并不是直接的问题。 客户端的问题是将密码从他的计算机中发出。 乐观的客户可能会认为他的电脑是保存领土。 但是从电缆(或天线)出来的所有东西都是夏娃的领地。 在安全场景中,你永远不会太偏执。 再说一遍:密码永远不会离开客户端电脑!
发送密码短语或其哈希可以让攻击者记录哈希并将其用于重放攻击。
您通常希望使用质询/响应协议,这意味着您发送了一个随机数。 客户端使用其密码的散列作为密钥对该随机数进行加密(或进行密钥散列),并将结果发回。 你也这样做,看看这两场比赛。
这使您可以验证匹配的密钥,而不必通过不安全的通道发送密钥本身。
至于如何让数据最初能够进行比较,是的,您通常希望客户端对密码进行哈希处理,然后使用服务器的公钥对其进行加密,然后发送加密结果。
通常,散列意味着混淆实际的密码,并且不能防止重放攻击。 您需要一个安全的套接字层来确保通道受到保护。
散列法有利于防止信息泄露。 比如说,有人抓住了你的用户表,现在他们拥有大量的账户。 由于人们重复使用密码,这些帐户可以用来攻击其他网站。 哈希使得难以将哈希反转为密码。
只有当您要在本地存储该密码时(例如移动设备),才需要在客户端散列密码。 通常,您想在服务器级别执行哈希。
这样做的麻烦在于腌制后的哈希密码然后通过网络传播,如果有人拦截它,他们可以使用它。
如果服务器将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?