这种认证方案有什么问题?

时间:2014-01-23 18:13:40

标签: javascript authentication login client-side

我不是安全专家,只是一个热情的开发人员。在The definitive guide to form-based website authentication中,它非常清楚地表明只有SSL或奇怪而复杂的算法才能保护登录数据免遭窃听。因此,在我完全无视计算机安全性的情况下,我无法理解为什么以下认证方案不安全:

  1. 点击登录按钮后,通过javascript,客户端要求服务器提供长随机字符串
  2. 客户端哈希随机消息和密码(尚未传输)。
  3. 客户端使用密码哈希加密(通过河豚或您最喜爱的算法)随机消息哈希值。
  4. 客户端将生成的blob发送到服务器
  5. 服务器使用存储在数据库中的密码哈希对消息进行解密(因为我们保持哈希值不是密码本身;)
  6. 如果生成的哈希与原始消息哈希匹配,则客户端将进行身份验证。
  7. 我没有看到的陷阱在哪里?密码永远不会通过网络发送,也不是哈希。服务器只保留密码哈希...

1 个答案:

答案 0 :(得分:0)

您不需要密码来通过此方案进行身份验证,只需要密码的哈希值。所以密码哈希实际上是来自加密方面的普通密码。所以:

  • Salt和hash(pass + salt)可能被窃听,pass是一个de-hash away
  • 服务器存储普通密码

而且没有考虑到未加密的连接总是容易受到MITM的攻击