三、认证技术
消息认证
基本概念
- 网络环境中的攻击:
- 对付泄密、传输分析——消息保密性.
- 对付伪装、内容修改、顺序修改、计时修改——消息认证.
- 对付发送方否认——数字签名.
- 对付接收方否认——数字签名和相关协议.
- 消息认证:
- 认证 = 比较.
- 验证收到的消息确实来自真正的发送方且未被修改.
- 可以验证消息的顺序和及时性.
- 数字签名是一种认证技术, 用来抗击发送方否认.
- 各种认证协议属于认证技术.
- 消息认证在功能上看作两层:
- 下面有产生认证符的函数, 认证符是用来认证消息的值.
- 上面协议将函数作为原语, 使接收方可以验证消息真实性.
三种认证函数
消息加密
对称加密:
要求明文具有易于识别的结构, 不通过加密函数不能重复这种结构.
加密前, 每个消息附加一个错误检测码 (帧校验序列 FCS).
先计算 FCS, 再加密: 可提供认证.
先加密, 再计算FCS: 攻击者可构造具有正确 FCS 的消息造成混淆.
例: TCP 协议.
特点:
- 提供保密性: 只有 A 和 B 共享密钥.
- 提供认证: 只能发自 A, 传输中未被改变.
- 不能提供数字签名: 接收方可以伪造, 发送方可以否认.
公钥加密:
- 只提供保密性, 不能提供认证.
- 既要提供保密性, 又要提供认证, 发送方先用私钥数字签名, 再用公钥加密.
- 缺点:
- 执行了四次附加公钥算法运算.
- 特点:
- 提供保密性: 只有 B 拥有解密 $K_{U_b}$, 但任何人可加密消息假称是 A.
- 提供认证和签名: 只有 A 拥有加密 $K_{R_a}$, 传输中未被改变.
消息认证码 MAC
与加密的区别: MAC 算法不要求可逆性, 加密算法必须可逆.
双方共享密钥, MAC 不能提供数字签名.
与明文有关的认证: 先计算 MAC, 再加密.
与密文有关的认证: 先加密, 再计算 MAC.
认证和保密分开, 使得层次结构更灵活.
- 可以在应用层提供认证, 而在传输层提供保密性.
Hash 函数
Hash 码是消息认证码的一种变形, 不使用密钥, 具有错误检测能力.
Hash 码用于消息认证:
Hash 码+对称密码: Hash 码提供认证所需的结构或冗余.
Hash 码+对称密码: 不要求保密性, 减少处理代价, 相当于 MAC.
Hash 码+公钥密码: 提供认证与数字签名.
Hash 码+对称密码+公钥密码: 提供认证、数字签名和保密性.
Hash 码+秘密值: 提供了认证.
Hash 码+秘密值+对称密码: 提供了认证和保密性.
不要求保密性, 可不使用加密函数, 减少计算代价:
- 加密软件速度慢.
- 加密硬件成本不容忽视.
- 加密硬件优化针对大数据块.
安全 Hash 函数 (迭代 Hash 函数) 一般结构
MD5, SHA-1 和 RIPEMD-160 都采用这种结构.
Hash 函数将输入分组, 最后分组不足时填充.
输入包含长度, 增加了攻击的难度.
压缩函数 f:
- 输入: 前一步 n 位即连接变量和 b 位分组.
- 输出: 一个 n 位分组.
- 通常 b>n, 称压缩函数.
- 连接变量初始值在算法开始时指定, 终值为 Hash 值.
- 设计安全 Hash 函数归纳为设计有抗碰撞能力 (计算不可行) 的压缩函数.
常用 Hash 算法
- MD 族:
- MD2:
- 数据 16 位补位, 附加 16 位检验和, 计算 128 位散列值.
- 如果忽略检验和, 产生 MD2 碰撞.
- MD4:
- 利用一部个人电脑几分钟内找到 MD4 完整版本碰撞.
- MD5:
- 王小云攻破 MD5 碰撞.
- RIPEMD-128/160/320.
- MD2:
- SHA 族: 根据 MD4 和 MD5 开发的算法.
- HAVAL: 产生不同长度的哈希值, 允许用户指定轮数.
MD5
算法结构:
- 输入长度无限制.
- 分组长度 512 bits.
- 输出长度 128 bits.
- 四轮运算, 每轮 16 步迭代.
设计目标:
- 安全性: 找到摘要相同的消息计算上不可行.
- 速度: 算法有利于快速软件实现.
- 简洁性: 算法易于描述且易于编程.
- 倾向使用低端结构.
算法步骤:
- 增加填充位.
- 填充长度.
- 初始化 MD 缓存:
- 中间结果和最终结果保存于 128 位缓冲区, 4 个 32 位寄存器.
- 以 512 位分组处理消息:
- 四轮运算组成的压缩函数是算法核心, 标记为 HMD5.
- 四轮运算结构相同, 各轮基本逻辑函数不同.
- 每轮对缓冲区 ABCD 进行 16 步迭代.
- 输出.
安全性:
- 输出每一位都是输入每一位的函数.
- 基本逻辑函数复杂迭代使输出对输入依赖性小.
- 找到 Hash 码相同消息的代价是 $2^{64}$.
找到具有给定摘要消息的代价是 $2^{128}$.
SHA
- 建立在 MD4 之上:
- MD4 使用三轮运算, 每轮16步迭代.
- MD4 第一轮运算没有使用加法常量, 第二轮、第三轮运算使用加法常量.
- MD4 使用三个基本逻辑函数, 每轮运算使用一个.
- MD4 没有每步迭代结果与前一步相加.
算法结构:
- 输入长度 $<2^{64}$ bits.
- 分组长度 512 bits.
- 输出长度 160 bits.
- 四轮运算, 每轮 20 步迭代.
RIPEMD-160
- 欧洲 RIPE 计划研究组设计.
算法结构:
- 输入长度无限制.
- 分组长度 512 bits.
- 输出长度 160 bits.
- 五轮运算, 每轮 16 步迭代, 运行两次.
比较
MD5 短, 易于受到强碰撞性攻击.
SHA-1 和 RIPEMD-160 对强碰撞性攻击安全.
数字签名算法 DSS
消息认证的局限性:
- 可以保证通信双方不受第三方的攻击.
- 不能处理通信双方自身发生的攻击.
数字签名:
- 解决收发双方不能完全信任的情况.
- 特征:
- 验证签名者、签名日期和时间.
- 认证被签的消息内容.
- 能由第三方仲裁解决争执.
直接数字签名:
- 只涉及通信双方.
- 发送方用私钥对整个消息或 Hash 码加密来产生数字签名, 用接收方公钥和共享密钥对整个消息和签名加密, 获得保密性.
- 弱点: 方法有效性依赖于发送方私钥安全性.
仲裁数字签名:
- 发送方到接收方的已签名消息先发给仲裁者 A, 进行检查以验证消息源及内容, 然后加上日期, 指明该消息通过仲裁检验.
- 解决了直接数字签名的问题.
数字签名标准 DSS:
- SHA-1 算法: 给出新的数字签名方法, 即数字签名算法 DSA.
- 公钥方法: 不能用于加密或密钥分配, 只提供数字签名 (与 RSA 不同).
算法步骤:
- 发送方产生 Hash 码和随机数 k, 作为签名函数 Sig 输入.
- 签名函数依赖于发送方私钥和全局公钥.
- 签名函数保证拥有私钥的发送方才能产生有效签名.
- 签名由 s 和 r 两部分构成.
- 接收方产生 Hash码, 和签名作为验证函数 Ver 输入.
- 验证函数依赖于全局公钥和发送方公钥.
- 验证函数输出等于签名 r, 则签名有效.
身份认证
- 身份认证: 在主客体交互行为过程中确认行为参与者身份.
电子身份认证概述
常见手段:
网站身份认证技术
HTTP 的 Basic 认证
- 用户身份凭证为账号+静态口令.
- HTTP 协议是面向一次连接的无状态网络协议.
- 每次明文发送 HTTP 请求到服务器端, 与存储的用户凭证进行比较.
- 优点: 交互简单.
- 缺点:
- 明文传递账号和口令, 易被监听盗取.
- 方法 1: 使用加密技术:
- 口令作为密钥, 无法躲避重放攻击.
- 方法 2: 使用消息认证技术:
- 挑战/响应机制, 进行两次 HTTP 请求.
- 第一次: 服务器向客户端返回随机挑战码 M, 避免重放攻击.
- 第二次: 客户端发送 MAC 码, 服务器端进行验证.
- 方法 1: 使用加密技术:
- 本地长期保存账号和口令, 存在安全隐患.
- 服务器每次请求都要进行身份验证, 效率低.
- 方法 3: 使用表单验证的 session 机制.
- 明文传递账号和口令, 易被监听盗取.
基于表单的身份认证
- Session 包括特定客户端、服务器端及操作时间段.
- Session 工作原理:
- 某个 Session 首次启用时, 服务器产生唯一标识符发到客户端.
- 标识符通常是随机字符串, 存于内存或本地文件.
- 客户端浏览器通常用 Cookie 技术存储标识符.
- Session 存活期间, 客户端每次发送 HTTP 请求都会包含标识符.
- Session 存活期间, 服务器通过标识符关联前后多次请求.
- Session 结束, 服务器和客户端销毁上述标识符.
- 基于表单的 Web 身份认证过程:
- 客户端向服务器发送请求, 服务器返回包含表单的页面.
- 用户填写表单, 客户端把表单发送到服务器; 服务器进行验证, 通过则启动 Session 返回给客户端.
- 客户端后续请求包含 Session 标识符, 服务端验证标识符的合法性.
- 通常基于哈希表数据结构.
- 缺点: 明文传输, 安全性低, 存在监听盗取可能.
- 引入挑战/响应机制, 避免明文传输与重放攻击.
- 传输账号口令时, 使用传输层 SSL 协议传输 HTTP 请求.
- 不安全做法: 把账号口令 (加密后) 以 Cookie 机制存放在浏览器端.
- 口令泄露, 重放攻击.
- 存放内容加上时间戳, 服务器每次验证时间戳.
增强认证
- 仅靠静态口令认证用户, 安全强度不足, 需要更高强度认证方式.
- 在静态口令基础上加上其他因素认证方式, 形成双因素或多因素认证.
- 手机短信口令.
- 动态口令:
- VPN, 网上银行, 电子商务.
- 动态口令牌: 客户手持, 生成动态密码的终端.
- 基于时间同步方式, 每 n 秒变换一次有效动态口令.
- 基于计数器同步方式, 每次触发计数器累进时产生动态口令.
- USB KEY:
- USB 接口硬件设备, 内置单片机或智能芯片, 存储密钥或数字证书.
- 用于身份认证、数据加密和数字签名.
- USB KEY 中私钥不可导出, 仅用于内置的加密或签名运算.
- 身份认证原理:
- 服务器产生随机消息 M 送到 USB KEY.
- USB KEY 用内部私钥对 M 签名.
- 服务器使用用户公钥验证签名.
- 数字证书:
- 权威机构/证书授权中心 CA 数字签名发行的文件.
- 包含拥有者公钥、名称和 CA 数字签名.