摘要认证的改进
- 永远不会以明文方式在网络上发送密码。
- 可以防止恶意用户捕获并重放认证的握手过程。
- 可以有选择地防止对报文内容的篡改。
- 防范其他几种常见的攻击方式。
摘要认证流程
- 客户端请求了某个受保护文档
- 客户端能够证明其知道密码从而确认其身份之前,服务器拒绝提供文档。服务器向客户端发起质询,询问用户名和摘要形式的密码
- 客户端传递了密码的摘要,证明他是知道密码的。服务器知道所有用户的密码,因此可以将客户提供的摘要与服务器自己计算得到的摘要进行比较,以验证用户是否知道密码。另一方在不知道密码的情况下,很难伪造出正确的摘要
- 服务器将客户端提供的摘要与服务器内部计算出的摘要进行对比。如果匹配,就说明客户端知道密码,可以设置摘要函数,使其产生很多数字,让人不可能幸运地猜中摘要。服务器进行了匹配验证之后,会将文档提供给客户端---整个过程都没有在网络上发送密码
用随机数防止重放攻击
为防止此类重放攻击的发生,服务器可以向客户端发送一个称为随机数的特殊令牌,这个数会经常发生变化(可能是每毫秒,或者是每次认证都变化)。客户端在计算摘要之前要先将这个随机数令牌附加到密码上去。
在密码中加入随机数就会使摘要随着随机数的每一次变化而变化。记录下的密码摘要只对特定的随机值有效,而没有密码的话,攻击者就无法计算出正确的摘要,这样就可以防止重放攻击的发生。
摘要认证要求使用随机数,因为这个小小的重放弱点会使胃随机化的摘要认证变得和基本认证一样脆弱。随机数是在 www-Authenticate 质询中从服务器传送给客户端的。
摘要认证的握手机制
如下图:
- 在(1)步中,服务器会计算出一个随机数。在第(2)步中,服务器会将这个随机数放在 WWW-Authenticate 质询报文中,与服务器所支持的算法列表一同发往客户端。
- 在第(3)步中,客户端选择一个算法,计算出密码和其他数据的摘要。在第(4)步中,将摘要放在一条 Authorization 报文中发回服务器。如果客户端要对服务器进行认证,可以发送客户端随机数。
-
在第(5)步中,服务器接收摘要,选中的算法以及支撑数据,计算出与客户端相同的摘要。然后服务器将本地生成的摘要与网络传送过来的摘要进行比较,验证其是否匹配。如果客户端反过来用客户端随机数对服务器进行质询,就会创建客户端摘要。服务器可以预先将下一个随机数计算出来,提前将其传递给客户端,这样下一次客户端就可以预先发送正确的摘要了。
摘要认证流程
摘要计算
摘要认证会话
客户端响应对保护空间的 WWW-Authenticate 质询时,会启动一个此保护空间的认证会话(与受访问服务器的标准根结合在一起的域就定义了一个"保护空间")。
在客户端收到另一条来自保护空间的任意一台服务器的 www-Authenticate 质询之前,认证会话会一直持续。客户端应该记住用户名,密码,随机数,随机数计数以及一些与认证会话有关的隐晦值,以便将来在此保护空间中构建请求的 Authorization 首部时使用。
随机数过期时,即便老的Authorization 首部所包含的随机数不再新鲜了,服务器也可以选择接受其中的信息。服务器也可以返回一个带有新随机数的 401 响应,让那个客户端重试这条请求;指定这个响应为 stale = true,表示服务器在告知客户端用新的随机数来重试,而不再重新提示输入新的用户名和密码了。
摘要认证首部
基本认证和摘要认证协议都包含了 www-Authenticate 首部承载的授权质询,Authenticate首部承载的授权响应。摘要认证还添加了可选的 Authorization-Info 首部,这个首部是在成功认证之后发送的,用于实现三步握手机制,并传送下一个随机数。
应该考虑的实际问题
多重质询
服务器可以对某个资源发起多重质询。比如,如果服务器步了解客户端的能力,就可以既提供基本认证质询,又提供摘要认证质询。客户端面对多重质询时,必须以它所支持的最强的质询机制来应答。
质询自身可能会包含由逗号分隔的认证参数列表。如果 www-Authenticate 或 Proxy-Authenticate 首部包含了多个质询,或者提供了多个 www-Authenticate 首部,用户 Agent代理在解析 www-Authenticate或 Proxy-Authenticate首部字段值时就要特别小心。注意,很多浏览器只支持基本认证,要求这是提交给它的第一种认证机制。
在提供了认证选项范围的情况下,安全问题上就会存在明显的"最薄弱环节"。只有当基本认证时最低可接受认证方式时服务器才应该包含它,而且管理员还应该警告用户,即使运行了不同层次安全措施,系统间使用相同密码也存在一定危险性。
安全性考虑
首部篡改
为了提供一个简单明了防首部篡改系统,要么就得进行端到端的加密,要么就得对首部进行数字签名---最好是两者的结合!摘要认证的重点在于提供一种防篡改认证机制,但并不一定要将这种保护扩展到数据上去。具有一定保护级别的首部只有 www-Authenticate 和 Authorization。
网友评论