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

303 阅读4分钟

13.1 简介

  • 什么是摘要认证

    • 是一种HTTP认证协议
  • 为什么会出现摘要认证

    • 修复基本认证中存在的问题
  • 摘要认证的优势

    • 不会以明文的方式在网络上发送密码
    • 可以防止重放攻击
    • 可以防止报文被篡改
  • 摘要认证的不足

    • 相比公钥认证机制还是弱了点
    • 大部分信息还是明文传输

13.1.1 工作原理

  • 客户端发起请求
  • 服务器响应401
    • 随机数
    • 劫持的摘要算法列表
    • WWW-Authentcate: digest
  • 客户端发送密码的摘要
    • 选择一个算法加密密码
    • 如果要验证服务器,还要发一个随机数
    • Authorization
  • 服务器验证摘要,并返回数据
    • 根据客户端的数据计算摘要
    • 对比2边算的摘要是否相同

13.1.2 摘要

  • 什么是摘要

    • 对信息主体的浓缩
    • 是一种单向函数
    • 用于把无限的输入值置换成有限长度的输出值
  • 常见的摘要函数

    • MD5
    • SHA

13.1.3 重放攻击

  • 什么是重放攻击

    • 坏人拦截了摘要
    • 用摘要重复发起请求
  • 如何避免重放攻击

    • 每次响应服务器发送一个随机码给客户端
    • 客户端用随机码+官能计算摘要
  • 为什么随机码可以避免重放攻击

    • 随机码每次都会变
    • 导致每次请求摘要都会变
    • 坏人拿到的摘要只能用一次

13.2 算法

13.2.1 摘要算法的组成部分

  • 散列函数H(d) KD(s,d)
    • 一般使用MD5
  • 安全信息A1
    • 用户名user
    • 密码password
    • 需要授权才能访问的域名列表realm
    • 随机数nonce
  • 非保密信息A2
    • URI
    • 请求方法
    • 报文主体

13.2.2 保护质量qop

  • 什么是保护质量

    • 就是设置摘要算法的安全等级
  • 保护质量的2个取值

    • auth也是默认值
    • auth-int需要进行完整性验证
  • 保护质量的缺点

    • 因为要对额外的数据加密
    • 会影响传输速度
  • 设置qop=auth-int的注意事项

    • 要对报文主体进行散列计算
    • 服务器要在传输编码之前进行计算
    • 客户端要在传输解码后进行计算

13.2.3 摘要算法

  • A1的组成部分
    • user : realm : password
  • A2的组成部分
    • qop为auth时
      • method : uri
    • qop为auth-int时
      • method : uri : MD5(entity-body)
MD5(
    MD5(A1)
    :
    <nonce>
    :
    <nc>
    :
    <cnonce>
    :
    <qop>
    :
    MD5(A2)
   )

13.2.3 预授权

  • 什么是预授权

    • 服务器在响应时,把下一次的加密随机数也发给客户端
  • 为什么需要预授权

    • 每次请求都要走一个13.1.1中的验证循环比较浪费时间
    • 通过预授权在后面的请求中,就可以省略第2步了
  • 生成随机数的3种方式

    • 直接生成一个随机数响应给客户端
      • 破坏了管道化功能
      • 因为每次请求都是不同的随机数
      • 所以只能一个接一个的发请求
    • 同个随机数可重用多次
      • 可以进行管道化,用了几次之后再换
      • 但是可能会被重放攻击
      • 尽量把重用次数和有效时间设短一点
    • 同步生成随机数
      • 客户端和服务器用相对的算法生成随机数

13.2.4 生成随机数的最佳实践

  • 随机数由哪些部分构成
    • 时间戳
    • 响应实体的ETag
    • 一个私钥

13.2.5 对称认证

  • 什么是对称认证

    • 客户端也需要对服务器进行认证
    • 服务器在的响应时,要把生成的摘要放在Authorization-Info里面
  • 什么情况下使用对称认证

    • 服务器提供了qop时就执行认证
    • 没提供时可以不用

13.3 存在的问题

  • 首部篡改
    • 只保护了密码
    • 其他首部都没有被保护起来
  • 重放攻击
    • 为了防止重放攻击
    • 每次都要生成新的随机码,会加大服务器压力
  • 多重认证机制
    • 服务器在质询时,会提供多种认证方式包括基本认证,摘要认证等
    • 如果客户端不支持摘要认证,就会选择基本认证
    • 但这个缺点和摘要认证有毛关系啊,为什么要放这儿来介绍
  • 词典攻击
    • 拦截者会对摘要进行暴力破解
    • 如果密码和随机数都比较简单的话,很容易猜出来
    • 并且这个没办法避免
  • 中间人攻击
    • 中间人直接把服务器401质询修改成最简单的基本认证
    • 客户端就会直接发送密码了
  • 选择明文攻击
    • 应该也算是中间人攻击
    • 中间人把随机数换成自己的
    • 然后再接收客户端的请求,拿出摘要来猜密码
    • 因为知道了随机数,再猜密码就简单些了
  • 存储密码
    • 即服务器上存储的密码被盗了,一切都玩完
    • 要为同一用户生成N多密码,不同的密码可以访问不同的网址,这样即使被盗了密码,损失相对较小