HTTP权威指南-12-13:基本认证与摘要认证机制对比
Executive Summary
核心观点(金字塔原理)
结论先行: HTTP基本认证存在严重安全缺陷,摘要认证通过引入随机数和摘要算法有效防止密码明文传输和重放攻击,但两者都应配合SSL使用以获得更高安全性。
支撑论点:
- 基本认证采用质询-授权四步流程,但密码以易解码形式传输,易受重放攻击
- 摘要认证使用服务器随机数和客户端随机数配合算法生成摘要,避免明文密码传输
- 基本认证的多账号相同密码习惯可能导致连锁安全风险
SWOT 分析
| 维度 | 分析 |
|---|---|
| S 优势 | 基本认证实现简单,广泛支持;摘要认证防止密码明文传输和重放攻击;支持算法协商 |
| W 劣势 | 基本认证密码易被截获和解码;无法防止代理和中间人修改报文;假冒服务器容易欺骗基本认证 |
| O 机会 | 与SSL/TLS配合使用大幅提升安全性;摘要认证的随机数机制可扩展更多安全特性 |
| T 威胁 | 重放攻击获取服务器访问权限;用户密码复用导致多系统被入侵;中间人攻击篡改报文 |
适用场景
- 内部系统的简易访问控制(基本认证+SSL)
- 需要防止重放攻击的API认证场景
- 安全等级要求较高的Web服务认证设计
第十二章 基本认证机制
认证的四个步骤:
| 步骤 | 首部 | 描述 | 方法/状态 |
|---|---|---|---|
| 请求 | 第一条没有请求认证信息 | GET | |
| 质询 | WWW-Authenticate | 服务器用401状态拒绝了请求,说明需要用户提供用户名和密码 | 401 Unauthorized |
| 授权 | Authorization | 客户端重新发出请求,但这次会附加一个Authorization首部,用来说明认证算法、用户名和密码 | GET |
| 成功 | Authorization-Info | 如果授权证书正确,服务器会将文档返回,有些授权算法会在可选的Authorization-Info首部返回一些与授权会话相关的附加信息 | 200 OK |
⚠️基本认证中不包括Authorization-Info首部
基本认证的安全缺陷
- 基本认证会通过网络发送用户名和密码,这些用户名和密码都是以一种很容易的解码的形式表示的。
- 即使密码是以更难解码的方式加密的,第三方用户仍然可以捕获被修改过的用户名和密码,并将修改过的用户名和密码一次次重放给原始服务器,以获取服务器访问授权,没有什么措施可以用来防止重放攻击。
- 即使将基本认证用于一些不太重要的的应用程序,一些不良习惯也会让它变得危险。比如很多用户的很多账号都是用相同的密码,若某些恶徒先获取了基本认证的密码然后尝试某些重要的在线银行网站!
- 基本认证没有提供任何针对代理和作为中间人的中间节点的防护措施,他们没有修改认证首部,但却修改了报文的其余部分,这样就严重地改变了事务的本质。
- 假冒服务器 很容易骗过基本认证。
基本认证与加密数据传输(比如SSL)配合使用,会使基本认证变得更加安全。这是一种常用技巧。
第十三章 摘要认证
在基本认证的基础上添加了更多的限制条件。
- 客户端发起GET请求
- 服务器产生随机数WWW-Authenticate质询,服务器发送域随机数和算法
- 客户端从算法集中选择一个算法产生响应摘要及客户端随机数,Authorization作为向服务器的请求。
- 服务器对摘要进行认证,并产生下一个随机数,返回客户端Authorization-Info信息及下一个需要认证时发送的随机数
⚠️:摘要认证还有很多安全性相关的技巧