【发布时间】:2014-01-26 04:09:45
【问题描述】:
我不是安全专家,只是一个充满激情的开发人员。在The definitive guide to form-based website authentication 中非常明确地指出,只有 SSL 或奇怪而复杂的算法对于保护登录数据不被窃听是实用的。因此,在我完全不了解计算机安全的情况下,我不明白为什么以下身份验证方案不安全:
- 按下登录按钮后,客户端通过 javascript 向服务器请求一个足够长的随机字符串
- 客户端对随机消息和密码(尚未传输)进行哈希处理。
- 客户端使用密码散列加密(通过河豚或您最喜欢的算法)随机消息散列。
- 客户端将生成的 blob 发送到服务器
- 服务器使用存储在数据库中的密码哈希解密消息(因为我们自己保留哈希而不是密码;)
- 如果生成的哈希与原始消息哈希匹配,则客户端通过身份验证。
我没看到的陷阱在哪里?密码永远不会通过网络发送,也不是哈希。服务器只保留密码哈希...
【问题讨论】:
-
这比使用 TLS 更“奇怪和复杂”吗?TLS 根本不涉及客户端上的编码?
-
好吧,SRP 肯定要复杂得多 :) 我并不是说我不会使用 TLS,我只是想不明白这有什么问题。
-
也许这个问题应该放在security.stackexchange.com
标签: javascript authentication login client-side