什么是摘要认证?

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

117918 次浏览

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

HA1 = MD5(username:realm:password)

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

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

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

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

服务器端使用相同的方法来生成一个 hashkey,只是服务器不使用在浏览器中输入的密码,而是从其用户 DB 中查找用户的预期密码。它查找这个用户名的存储密码,通过相同的算法运行,并将其与客户机发送的密码进行比较。如果他们匹配,然后访问被授予,否则它可以发回一个401未授权(没有登录或失败的登录)或403禁止(访问拒绝)。

摘要认证是 在 RFC2617中标准化有一个 在维基百科上有很好的概述:

你可以这样想:

  1. 客户提出要求
  2. 客户端从服务器返回一个 nonce 和一个401身份验证请求
  3. 客户端发送回以下响应数组(用户名、领域、生成 _ md5 _ key (nonce、用户名、领域、 URI、 password _ give _ by _ user _ to _ reader))(是的,这非常简单)
  4. 服务器获取用户名和领域(加上它知道客户机请求的 URI) ,并查找该用户名的密码。然后,它执行自己版本的 generate_ md5 _ key (nonce、用户名、域、 URI、 password _ I _ have _ for _ this _ user _ in _ my _ db)
  5. 如果它们与客户机发送的正确密码匹配,那么它将比较所获得的 generatemd5()的输出与客户机发送的输出。如果他们不匹配发送的密码是错误的。

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