118

除了以纯文本形式发送凭据之外,摘要式身份验证与基本身份验证有何不同?

4

3 回答 3

206

主要区别在于它不需要以明文形式通过网络发送用户名和密码。它也不受重放攻击的影响,因为它使用来自服务器的一次性号码。

服务器给客户端一个一次性的使用编号(一个随机数),它与用户名、领域、密码和 URI 请求相结合。客户端通过 MD5 散列方法运行所有这些字段以生成散列键。

它将这个散列密钥连同用户名和领域一起发送到服务器以尝试进行身份验证。

服务器端使用相同的方法生成哈希键,只是服务器不使用在浏览器中输入的密码,而是从其用户数据库中查找用户的预期密码。它查找该用户名的存储密码,通过相同的算法运行并将其与客户端发送的密码进行比较。如果它们匹配,则授予访问权限,否则它可以发送回 401 Unauthorized(未登录或登录失败)或 403 Forbidden(访问被拒绝)。

摘要式身份验证在 RFC2617 中进行了标准化。维基百科上有一个很好的概述

你可以这样想:

  1. 客户提出要求
  2. 客户端从服务器取回一个 nonce 和一个 401 身份验证请求
  3. 客户端发回以下响应数组(用户名,领域,generate_md5_key(nonce,用户名,领域,URI,密码_given_by_user_to_browser))(是的,这非常简化)
  4. 服务器获取用户名和领域(加上它知道客户端请求的 URI)并查找该用户名的密码。然后它开始执行自己的 generate_md5_key(nonce, username, realm, URI, password_I_have_for_this_user_in_my_db) 版本
  5. 如果它们与客户端发送的正确密码相匹配,它将获得的 generate_md5() 输出与客户端发送的输出进行比较。如果他们不匹配发送的密码是错误的。
于 2010-03-05T02:57:35.650 回答
16

凭据的散列通过网络发送。

HA1 = MD5(username:realm:password)

维基百科有一篇关于这个主题的优秀文章

于 2010-03-05T02:47:23.407 回答
1

获取凭据的哈希 HA1 的唯一方法是知道密码。服务器知道 HA1,但不知道生成它的密码。如果攻击者知道 HA1,它就可以进入系统。所以它不会通过电线发送。在此之前基于随机数等进行进一步的散列,并且这必须与在服务器上完成的类似计算一致。因此,只要服务器保持 HA1 私有,系统就是安全的。

于 2016-01-07T14:27:18.297 回答