如何解决是否值得在客户端散列密码
基本上,你的朋友是对的。但是,在客户端简单地对密码进行哈希处理只 比 将其以纯文本形式提交给服务器要好。可以侦听您的纯文本密码的人当然也能够侦听散列密码,并使用这些捕获的散列他/她自己对您的服务器进行身份验证。
对于这个问题,更安全的身份验证协议通常会跳过许多环节,以确保这种重放攻击不起作用,通常是通过允许客户端选择一堆随机位,这些位与密码一起散列,并且还以明文形式提交给服务器。
在服务器上:
- 生成一些随机数
- 将这些位(以明文形式)发送给客户端
在客户端:
- 生成一些随机位
- 连接密码、服务器的随机位和客户端的随机位
- 生成上述哈希
- 向服务器提交随机位(以明文形式)和散列
由于服务器知道自己的随机信息以及客户端的随机位(它以明文形式获取它们),因此它可以执行基本相同的转换。该协议确保,只要双方每次产生不同的“噪音位”,任何人都可以在以后使用该信息来使用记录的信息进行错误的身份验证(除非使用了非常弱的算法......),进行握手。
所有这些都容易出错且乏味,并且有点难以正确(阅读:安全)。如果可能的话,考虑使用知识渊博的人已经编写的身份验证协议实现(不像我!以上只是我前段时间读过的一本书的记忆。)你真的不想通常自己写这个。
解决方法
当我想建立一个登录系统时,我总是将给定密码的 MD5 与其在服务器端用户表中的值进行比较。
但是,我的一位朋友告诉我,“清除”密码可能会被网络软件嗅探。
所以我的问题是:在客户端散列密码是个好主意吗?它比在服务器端散列更好吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。