HTTP权威指南学习--第13章 摘要认证

摘要认证和基本认证兼容,但更为安全。虽然还没有德奥广泛应用,但对实现安全事务来说,这些概念很重要。

13.1 摘要认证的改进

1.永远不会以明文方式在网络上发送密码。
2.可以防止恶意用户捕获并重放认证的握手过程。
3.可以有选择地防止对报文内容的篡改。
4.防范其他几种常见的攻击方式。
对然不是最安全的,也不能满足安全HTTP事务的很多需求,但还是比一些协议好。

13.1.1 用摘要保护密码

客户端不发送密码而是发送一个指纹或密码的摘要,这是密码的不可逆扰码。客户端和服务器都知道这个密码。因此服务器可以验证所提供的摘要是否与密码匹配。另一方在不知道密码的情况下很难伪造摘要。

13.1.2 单向摘要

摘要是“对信息主体的浓缩”,是一种单向函数,主要用于将无限的输入转换成有限的1浓缩输出值。常见的有MD5,SHA(安全散列算法)。
有时也将摘要函数成为加密的校验和、单向散列函数或指纹函数。

13.1.3 用随机数防止重放攻击

即便不知道密码,别有用心的人也可以截获摘要,并一遍遍地重放给服务器。为此,服务器向客户端发送一个成为“随机数(nonce)”的特殊令牌,这个数经常变化,客户端在计算摘要之前将随机数附加到密码上。

13.1.4 摘要认证的握手机制

HTTP摘要认证协议是一种升级版的认证方式,所用首部与基本认证类似。他在传统首部中添加了一些新的选项,还添加了新的可选首部Authorization-Info。

13.2 摘要的计算

核心就是对公共信息保密信息有时限的随机值这个组合的单向摘要。

13.2.1 摘要算法的输入数据

三个组件计算摘要:
1.由单向散列函数H(d)和摘要KD(s,d)组成一队函数,其中s表示密码,d表示数据。
2.一个包含了安全信息的数据块,包括密码,成为A1.
3.一个包含了请求报文中非保密属性的数据块,成为A2.
H和KD处理两块数据A1和A2,产生摘要。

13.2.2 算法H(d)和KD(s,d)

摘要认证支持对各种摘要算法的选择。推荐使用MD5和MD5-sess(“sess”表示会话)。
都会用函数H来计算数据的MD5,用摘要函数KD来计算以冒号连接的密码和非保密数据的MD5.

H(<data>) = MD5(<data>)
KD(<secret>,<data>) = H(concatence(<secret>:<data>))

13.2.3 与安全性相关的数据(A1)

被称为A1的数据块是密码和受保护信息的产物,它包括有用户名、密码、保护域和随机数<nonce>等内容。

MD5 A1 = <user>:<realm>:<passward>
MD5-sess A1 = MD5(<user>:<realm>:<password>):<nonce>:<nonce>

13.2.4 与报文有关的数据(A2)

数据块A2表示的是与报文自身有关的信息,比如URL,请求方法和报文实体的主体部分。A2有助于防止方法、资源或报文被篡改。A2会与H、KD和A1一起用于摘要的计算。
根据所选择的保护质量(qop),为A2定义了两种策略:
qop=“auth”时只包含HTTP请求方法和URL。
qop=“auth-int”时添加了报文实体的主体部分,以提供一定程度的报文完整性检测。

13.2.5 摘要算法总述

qop未定义时 KD(H(A1),<nonce>:H(A2))。qop等于auth或auth-int时计算方法为KD(H(A1),<nonce>:<nc>:<cnonce>:<qop>:H(<A2>))

13.2.6 摘要认证会话

客户端响应对保护空间的WWW-Authenticate质询时,会启动一个此保护空间的认证会话(与受访问服务器的标准根结合在一起就定义了一个“保护空间”)。

在客户端收到另一条来自保护空间的任意一台服务器的WWW-Authenticate质询之前,认证会话会一直持续。客户端应该记住用户名、密码、随机数、随机数计数以及一些与认证会话有关的隐晦值,以便将来在此保护空间中构建请求的Authorization首部时使用。

13.2.7 预授权

在普通的认证方式中,事务结束之前,每条请求都要有一次请求/质询的循环。如果客户端事先知道下一个随机数是什么,就可以取消这个请求/质询循环,这样客户端就可以在服务器发出请求之前,生成正确的Authorization首部了。如果客户端能够在服务器要求它计算Authorization首部之前将其计算出来,就可以预先将Authorization首部发送给服务器,从而不用进行请求/质询了。
三种预授权方式:
1.服务器预先在Authentication-info成功首部发送下一个随机数。
2.服务器允许在一小段时间内使用同一个随机数。
3.客户端和服务器使用同步、可预测的随机数生成算法。

13.2.8 随机数的选择

随机数的内容不透明,而且与实现有关。但性能、安全和便捷性的优劣都取决于明智的选择。
RFC2617建议采用这个随机数公式:

BASE64(time-stamp H(time-stamp":"ETag":"private_key))

time-stamp是服务器产生的时间或其它不会重复的值,ETag是与所请求实体有关的HTTP Etag首部,private_key是只有服务器知道的数据。

13.2.9 对称认证

RFC2617扩展了摘要认证机制,允许客户端对服务器进行认证。这是通过提供客户端随机值来实现的,服务器会根据他对共享保密信息的正确了解生成正确的响应摘要,然后通过Authorization-Info首部将此摘要返回给客户端。
对称认证是可选的,为了兼容以前的版本。

13.3 增强保护质量

可以在三种摘要首部中提供qop字段:WWW-Authenticate、Authorization和Authentication-Info。
从而可以协商保护质量,是否保护报文完整性。

13.3.1 报文完整性保护

如果使用了完整性保护(qop=“auth-int”),H(实体的主体部分)就是对实体主体部分,而不是报文主体部分散列。

13.3.2 摘要认证首部

基本认证和摘要认证协议都包含了WWW-Authenticate首部承载授权质询、Authorization首部承载授权响应。摘要认证还添加了Authorization-Info首部,这个首部是在成功认证之后发送的,用于实现三步握手机制,并传送下一个随机数。

13.4 应该考虑的实际问题

13.4.1 多重质询

服务器可以对某个资源发送多重质询。比如,如果服务器不了解客户端的能力,就可以既提供基本认证质询,又提供摘要认证质询。客户端面对多重质询时,必须以它所支持的最强的质询机制来应答。

13.4.2 差错处理

在摘要认证中,如果某个指令或其值使用不当,或缺少某个必要指令,就应该使用响应400Bad Request。如果请求的摘要不匹配,就应该记录一次失败。某客户端连续多次失败可能说明有攻击者正在猜测密码。

13.4.3 保护空间

域值,与被访问服务器的标准根URL结合在一起,定义了保护空间。通过域,可以将服务器上受保护资源划分为一组保护空间,每个空间都有自己的认证机制和/或授权数据库。

13.4.4 重写URI

dialing可以通过改变URI语法,而不改变所描述的实际资源的方式来重写URI。

13.4.5 缓存

共享的缓存在收到带有Authorization首部的请求时,不能随意使用,要根据Cache-Control指令确定处理方式。

13.5 安全性考虑

13.5.1 首部篡改

进行端到端的加密,或对首部进行数字签名(最好是两者的结合)。

13.5.2 重放攻击

在当前上下文中,重放攻击指的就是有人将某个事务中窃取的证书用于另一个事务。

可以让服务器产生的随机数包含(如前所述)根据客户端IP地址、时间戳、资源ETag和私有服务器秘钥算出的摘要。

一种可以完全避免重放攻击的方法就是为每个事务都使用唯一的随机数。

13.5.3 多重认证机制

如何让客户端选用最强的认证机制。

13.5.4 词典攻击

是典型的密码猜测攻击方式。恶意用户对某个事务进行窃听,并对随机数/响应对使用标准的密码猜测程序。

13.5.5 恶意代理和中间人攻击

如果代理是恶意的或者容易被入侵的,那么就会是客户端置于中间人攻击之下。
这种攻击可以采用窃听的方式也可以删除提供的所有选项,用最薄弱的认证策略(比如基本认证机制)来取代现有的认证机制,对其进行修改。

防止这些攻击唯一简便的方式就是使用SSL。

13.5.6 选择明文攻击

使用摘要认证的客户端会用服务器提供的随机数来生成响应。但如果中间有一个被入侵或恶意的代理在拦截流量(或者有个恶意的原始服务器),就可以很容易地为客户端计算提供随机数。使用已知秘钥来计算可以简化响应的密码分析过程。这被称为选择明文攻击(chosen plaintext attack)。包括以下两种变体:
1.预先计算的词典攻击:
2.批量暴力型攻击:

13.5.7 存储密码

密码文件被入侵,攻击者马上就能够使用域中的所有文件而不需要进行解码。
可以采用以下方式保护:
1.就像密码文件中包含的是明文密码一样保护她;
2.确保域名在所有域都是唯一的。从而将损失缩小到某个域内。

尽管摘要认证提供的解决方案比基本认证要强壮且安全得多,到它没有为内容的安全提供任何保证–真正安全的事务只有通过SSL才能实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值