如何摘要式身份验证,从基本身份验证不同比发送凭据以纯文本格式等?
Answer 1:
主要的区别是,它不需要以纯文本形式通过线路发送的用户名和密码。 这也是免疫重放攻击,因为它使用从服务器一次性数。
服务器对所述客户端的一次性使用数(随机数),它与用户名,域,密码和URI请求相结合。 客户端运行所有这些字段通过MD5散列法以产生一个散列密钥。
它的用户名,并尝试验证的境界一起发送该散列关键服务器。
服务器端使用相同的方法来生成hashkey,只而不是使用在服务器查找从它的用户数据库的用户密码预期在浏览器中键入的密码。 它查找存储的密码此用户名,通过相同的算法在运行,并将其与客户端发送的内容。 如果它们匹配,则允许访问,否则它可以发送回一个401未授权(没有登录或登录失败)或403禁止(拒绝访问)。
摘要式身份验证在RFC2617规范 。 有一个它在维基百科上很好的概述 :
你可以认为它是这样的:
- 客户端发出请求
- 客户回来从服务器现时和401的认证请求
- 客户端发回以下响应阵列(用户名,领域generate_md5_key(随机数,用户名,领域,URI,password_given_by_user_to_browser))(酵母,这是非常简化的)
- 服务器需要用户名和领域(加上它知道URI的客户端请求),并将其用于该用户名查找密码。 便去确实generate_md5_key它自己的版本(随机数,用户名,领域,URI,password_I_have_for_this_user_in_my_db)
- 它比较generate_md5的输出(),它与一个客户端发送的,如果他们匹配的客户端发送正确的密码了。 如果它们不匹配发送的密码是错误的。
Answer 2:
凭证的散列通过网络发送。
HA1 = MD5(username:realm:password)
维基百科有关于这个主题的优秀文章
Answer 3:
获得证书的哈希值HA1的唯一方法是知道密码。 服务器知道HA1但不生成它的密码。 如果HA1是众所周知的攻击者就可以得到到系统中。 因此,这不是发下来的电线。 基于现时等进一步的散列在此之前完成,而这必须在服务器上进行类似的计算同意。 因此,只要服务器保持HA1专用的系统是安全的。
文章来源: What is digest authentication?