什么是摘要认证?


101

摘要身份验证除了将凭据作为纯文本发送外,与基本身份验证有何不同?


1
@Gumbo的出色解释就在这里:stackoverflow.com/a/5288679/591487
inorganik

2
您永远不要使用的东西。不保护传输中的密码,要求服务器以纯格式存储密码。
CodesInChaos

2
对于未加密的流量,摘要确实比基本身份验证提供了更好的传输中安全性,但是它很弱。相反,将基本身份验证与SSL / TLS结合使用会更安全,因为这样您还可以使服务器上的密码保持加密状态。
rustyx '16

Answers:


179

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

服务器为客户端提供一次性使用编号(随机数),该编号与用户名,领域,密码和URI请求结合在一起。客户端通过MD5哈希方法运行所有这些字段,以产生哈希密钥。

它将此哈希密钥以及用户名和领域发送到服务器以尝试进行身份验证。

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

摘要认证在RFC2617中标准化Wikipedia上对此有一个很好的概述

您可以这样想:

  1. 客户提出要求
  2. 客户端从服务器获取随机数和401身份验证请求
  3. 客户端发回以下响应数组(用户名,领域,generate_md5_key(立即,用户名,领域,URI,password_given_by_user_to_browser))(是的,这非常简化)
  4. 服务器采用用户名和领域(加上它知道客户端正在请求的URI),并查找该用户名的密码。然后,它执行自己的版本generate_md5_key(一次,用户名,领域,URI,password_I_have_for_this_user_in_my_db)
  5. 如果它们与客户端发送的正确密码匹配,它将输出的generate_md5()的输出与客户端发送的输出进行比较。如果它们不匹配,则发送的密码错误。

很好的解释。Windows用户名和密码是Windows用户吗?它们是从哪里产生的?
SoftwareGeek 2010年

它们是用户在浏览器中键入的任何内容。密码需要与服务器为该用户存储的密码相匹配。它很有可能是特定于该Web应用程序的,而不是Windows密码。这在很大程度上取决于Web应用程序的组合方式。
伊恩·C.2010年

14
这个答案已有6年历史了,但是我想现在所有安全意识系统都以盐腌哈希格式存储密码。没有,也应该没有任何方法可以从数据库中获取原始密码,从而使摘要授权变得不可能。
拉蒙·德克莱因

3
如果用户名和密码的摘要哈希存储在db中而不是普通密码中,则仍然可以使用摘要身份验证@RamondeKlein
karakays

1
@BlueBockser我认为karakays的意思是不是使用普通密码,而是使用哈希在注册时将用户名和其密码组合在一起产生存储在服务器中,并在进行身份验证之前在客户端进行计算。也可以仅使用密码的哈希值来完成。
logo_writer


1

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


这是对摘要式身份验证的说明,其中密码不是以纯文本形式发送的(基本身份验证就是这种情况)
Erik Oppedijk 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.