对称加密与攻击案例分析
字数 1657 2025-08-18 11:38:41

对称加密与攻击案例分析教学文档

一、对称加密概述

对称加密算法分为两类:

  1. 对称加密:通信双方共享相同密钥
  2. 非对称加密:使用公钥/私钥对

对称加密通常与非对称加密结合使用:用对称加密加密明文,再用非对称加密加密对称密钥。

对称加密分类

  1. 流加密(Stream Ciphers)

    • 逐字节加密数据
    • 示例:RC4算法
    • 原理:以密钥为种子产生随机数序列,与明文逐字节异或
  2. 块加密(Block Ciphers)

    • 逐块加密数据(常见块大小:128位、256位)
    • 示例:AES、DES、3DES、Towfish
    • 需要填充(Padding)对齐块边界

填充(Padding)

PKCS#7填充方式:

  • 不论数据是否对齐块边界都进行填充
  • 填充内容为填充字节数
  • 示例(块大小8字节):
    • 'AAAAAAA' + '\x01'
    • 'AAAAAA' + '\x02\x02'
    • 'AA' + '\x06'*6
    • 'A' + '\x07'*7
    • '\x08'*8

二、块加密模式

1. ECB模式(Electronic CodeBook)

  • 每个明文块独立加密
  • 相同明文块产生相同密文块
  • 缺陷:泄露明文模式信息(如图像加密后仍可见轮廓)

2. CBC模式(Cipher-Block Chaining)

  • 每个明文块加密前与前一个密文块异或
  • 第一个块使用初始化向量(IV)异或
  • 特性:翻转一个密文块的某一位,会导致下一个明文块相同位翻转

三、常见攻击案例分析

1. 流加密密钥重用攻击(Stream Cipher Reuse Attack)

原理

  • 相同密钥K生成相同随机序列C
  • E(A) = A xor C
  • E(B) = B xor C
  • E(A) xor E(B) = A xor B
  • 已知B时可计算A = E(A) xor E(B) xor B

防御

  • 不重用流加密密钥
  • 加密前将密钥与随机数nonce组合

2. ECB块重排攻击

原理

  • ECB模式下块独立加密
  • 攻击者可重排密文块组合成合法新密文

示例

  • 假设cookie格式:admin=0;username=pan@@@@
  • 设置用户名为pan@@@@admin=1;
  • 加密后将包含admin=1;的块替换原始admin=0;

防御

  • 加密后添加MAC校验
  • 注意:应先加密后MAC,顺序相反可能导致安全问题

3. CBC Padding Oracle攻击

前提条件

  • 使用CBC模式和PKCS#7填充
  • 服务器对不同填充状态返回不同响应

攻击步骤

  1. 解密最后一个字节

    • 修改前一个密文块(C1)的最后一个字节
    • 当服务器返回填充有效时:
      • P2[15] = 0x01
      • 计算I2[15] = P2[15] xor C1'[15]
      • 原始P2[15] = I2[15] xor C1[15]
  2. 解密前一个字节

    • 固定C1[15]使P2[15]=0x02
    • 爆破C1[14]直到填充有效
    • 计算I2[14] = 0x02 xor C1'[14]
    • 原始P2[14] = I2[14] xor C1[14]
  3. 重复过程

    • 从后向前逐字节解密整个块
    • 对所有块应用相同方法(除第一个块需特殊处理)

防御

  • 使用加密后MAC
  • 对所有错误返回相同响应
  • 使用认证加密模式如GCM

四、总结与最佳实践

  1. 流加密

    • 避免密钥重用
    • 结合nonce使用
  2. 块加密

    • 避免使用ECB模式
    • CBC模式需配合MAC
    • 对所有错误返回相同响应
  3. 通用建议

    • 优先使用认证加密模式(如AES-GCM)
    • 密钥管理至关重要
    • 理解所使用加密算法的基本原理和限制

五、参考实现

Padding Oracle攻击示例代码

(见原文完整Python示例)

关键点回顾

  • 流加密密钥重用导致明文泄露
  • ECB模式块独立性导致重排攻击
  • CBC填充预言攻击利用服务器响应差异
  • 所有攻击都源于加密方案使用不当而非算法本身缺陷

通过理解这些攻击原理,可以更好地设计和实现安全的加密系统。

对称加密与攻击案例分析教学文档 一、对称加密概述 对称加密算法分为两类: 对称加密 :通信双方共享相同密钥 非对称加密 :使用公钥/私钥对 对称加密通常与非对称加密结合使用:用对称加密加密明文,再用非对称加密加密对称密钥。 对称加密分类 流加密(Stream Ciphers) : 逐字节加密数据 示例:RC4算法 原理:以密钥为种子产生随机数序列,与明文逐字节异或 块加密(Block Ciphers) : 逐块加密数据(常见块大小:128位、256位) 示例:AES、DES、3DES、Towfish 需要填充(Padding)对齐块边界 填充(Padding) PKCS#7填充方式: 不论数据是否对齐块边界都进行填充 填充内容为填充字节数 示例(块大小8字节): 'AAAAAAA' + '\x01' 'AAAAAA' + '\x02\x02' 'AA' + '\x06'* 6 'A' + '\x07'* 7 '\x08'* 8 二、块加密模式 1. ECB模式(Electronic CodeBook) 每个明文块独立加密 相同明文块产生相同密文块 缺陷:泄露明文模式信息(如图像加密后仍可见轮廓) 2. CBC模式(Cipher-Block Chaining) 每个明文块加密前与前一个密文块异或 第一个块使用初始化向量(IV)异或 特性:翻转一个密文块的某一位,会导致下一个明文块相同位翻转 三、常见攻击案例分析 1. 流加密密钥重用攻击(Stream Cipher Reuse Attack) 原理 : 相同密钥K生成相同随机序列C E(A) = A xor C E(B) = B xor C E(A) xor E(B) = A xor B 已知B时可计算A = E(A) xor E(B) xor B 防御 : 不重用流加密密钥 加密前将密钥与随机数nonce组合 2. ECB块重排攻击 原理 : ECB模式下块独立加密 攻击者可重排密文块组合成合法新密文 示例 : 假设cookie格式: admin=0;username=pan@@@@ 设置用户名为 pan@@@@admin=1; 加密后将包含 admin=1; 的块替换原始 admin=0; 块 防御 : 加密后添加MAC校验 注意:应先加密后MAC,顺序相反可能导致安全问题 3. CBC Padding Oracle攻击 前提条件 : 使用CBC模式和PKCS#7填充 服务器对不同填充状态返回不同响应 攻击步骤 : 解密最后一个字节 : 修改前一个密文块(C1)的最后一个字节 当服务器返回填充有效时: P2[ 15 ] = 0x01 计算I2[ 15] = P2[ 15] xor C1'[ 15 ] 原始P2[ 15] = I2[ 15] xor C1[ 15 ] 解密前一个字节 : 固定C1[ 15]使P2[ 15 ]=0x02 爆破C1[ 14 ]直到填充有效 计算I2[ 14] = 0x02 xor C1'[ 14 ] 原始P2[ 14] = I2[ 14] xor C1[ 14 ] 重复过程 : 从后向前逐字节解密整个块 对所有块应用相同方法(除第一个块需特殊处理) 防御 : 使用加密后MAC 对所有错误返回相同响应 使用认证加密模式如GCM 四、总结与最佳实践 流加密 : 避免密钥重用 结合nonce使用 块加密 : 避免使用ECB模式 CBC模式需配合MAC 对所有错误返回相同响应 通用建议 : 优先使用认证加密模式(如AES-GCM) 密钥管理至关重要 理解所使用加密算法的基本原理和限制 五、参考实现 Padding Oracle攻击示例代码 (见原文完整Python示例) 关键点回顾 流加密密钥重用导致明文泄露 ECB模式块独立性导致重排攻击 CBC填充预言攻击利用服务器响应差异 所有攻击都源于加密方案使用不当而非算法本身缺陷 通过理解这些攻击原理,可以更好地设计和实现安全的加密系统。