侧信道安全(Side-Channel Security)

第一章 背景

1.1 什么是侧信道攻击?

  • 核心定义 :侧信道攻击(Side-Channel Attack, SCA)是一种不直接攻击密码算法的数学结构,而是通过观察系统在执行密码运算时泄露的物理信息(时间、功耗、电磁辐射、声音等)来推导秘密信息(如密钥)的攻击方法。
  • 关键区分
    • 传统密码分析 → 攻击算法本身的数学弱点(如差分分析、线性分析)
    • 侧信道攻击 → 攻击算法的实现方式,利用物理世界的"副产品"

侧信道攻击的本质是信息泄露存在于物理实现层面,而非逻辑层面。

1.2 为什么侧信道攻击重要?

  • 即使一个密码算法在数学上被证明是安全的(如 AES),其硬件/软件实现仍可能因侧信道泄露而被攻破

第二章 基本原理:信息为何会泄露?

泄露的根源

  • 计算的物理本质 :任何计算都需要消耗能量、花费时间、产生电磁辐射。这些物理量往往与所处理的数据和操作相关。
  • 数据依赖性 (Data Dependency):
    • 处理 0x000xFF 时的功耗可能不同(汉明重量不同)
    • 执行乘法和跳过乘法的时间不同(条件分支泄露)
    • 访问不同缓存行会导致不同的延迟(缓存状态泄露)

信息泄露的基本模型

  • 设密钥为 (k),输入为 (x),侧信道观测为 (L)
  • 泄露模型:L = f(k, x) + noise
  • 攻击者的目标:通过大量观测L,结合已知/选择的 x,统计推断出密钥 k

第三章 常见侧信道攻击类型

3.1 时间攻击(Timing Attack)

  • 原理:密码运算的执行时间依赖于输入数据或密钥的值
  • 经典案例 :Kocher (1996) 对 RSA 的时间攻击
    • RSA 中模幂运算的"平方-乘"算法:密钥位为 1 时执行乘法,为 0 时跳过
    • 通过统计运算时间,推断密钥的每一位

3.2 功耗分析(Power Analysis)

  • 简单功耗分析(SPA) :直接从单条功耗曲线中识别操作模式
    • 例:RSA 平方-乘操作在功耗曲线上有明显的高低区分
  • 差分功耗分析(DPA)
    • Kocher 等人 (1999) 提出
    • 利用大量功耗曲线的统计差异提取密钥
    • 基于汉明重量模型或汉明距离模型

3.3 电磁泄露攻击(EM Attack)

  • 原理:电子设备运行时产生电磁辐射,其特征与内部计算相关
  • 优势
    • 非接触式(可在一定距离外采集)
    • 可针对芯片的特定区域进行近场探测
    • 某些场景下比功耗分析更有效(如多核处理器中隔离单核信号)
  • 研究进展:已证明可通过电磁泄露攻击 AES、RSA 等算法实现

3.4 缓存攻击(Cache Attack)

  • 原理:现代 CPU 使用多级缓存;访问缓存命中(cache hit)和缓存未命中(cache miss)的延迟差异巨大
  • 主要技术
    • Prime+Probe:攻击者填充缓存集 → 等待受害者执行 → 探测哪些缓存集被替换
    • Flush+Reload:利用共享内存页,刷新某行 → 等待受害者访问 → 测量重新加载时间
    • Evict+Time:驱逐特定缓存行 → 测量受害者执行时间变化
  • 威胁模型:可在同一物理机或同一云实例中实施(跨虚拟机攻击)

3.5 其他类型

类型 泄露来源 备注
声学攻击 电子元件的声音振动 Genkin 等 (2014) 攻击 RSA
故障注入 人为引入错误,分析错误输出 属于主动攻击(Active Attack)
光学攻击 芯片表面光发射 需要精密设备
数据残留 内存中的残留数据 冷启动攻击(Cold Boot Attack)

第四章 典型真实攻击案例

AES 缓存时间攻击

  • Bernstein (2005)
    • 对 OpenSSL 的 AES 实现发起远程时间攻击
    • AES 的 T-table 查表操作依赖密钥和明文
    • 不同输入导致不同的缓存命中/未命中模式 → 运算时间不同
    • 通过统计分析恢复完整 AES-128 密钥
  • Osvik 等 (2006)
    • 在同一系统上使用 Prime+Probe 攻击 AES
    • 仅需约 65 毫秒即可提取完整密钥

第五章 · 攻击流程

5.1 通用侧信道攻击流程

复制代码
  Step 1: 目标识别与建模         
  → 确定目标设备/软件、密码算法、泄露类型                       

  Step 2: 数据采集                                         
  → 采集侧信道信号(功耗曲线、时间戳、缓存状态等)               
  → 同步采集对应的输入/输出(已知明文或密文)                    

  Step 3: 信号预处理            
  → 对齐、滤波、降噪、特征提取                                

  Step 4: 密钥假设与统计分析                                 
  → 对密钥的每个子部分(如一个字节),穷举所有候选值              
  → 用泄露模型预测每个候选值应产生的侧信道信号                   
  → 计算预测值与实际观测值的统计相关性                          

  Step 5: 密钥恢复                                         
  → 相关性最高的候选值即为正确的子密钥                          
  → 组合所有子密钥 → 恢复完整密钥                             

第六章 · 防御机制

6.1 算法层防御

  • 恒定时间实现(Constant-Time Implementation)
    • 确保所有操作的执行时间与数据无关
    • 避免条件分支、数据依赖的查表、提前退出
    • 例:使用位运算替代条件选择 → result = (mask & a) | (~mask & b)
  • 掩码技术(Masking / Boolean Masking)
    • 将敏感中间值 (v) 分割为多个随机份额:(v = v_1 \oplus v_2 \oplus \cdots \oplus v_d)
    • 每个份额单独看是均匀随机的,不泄露 (v) 的信息
    • 需要 (d) 阶掩码抵御 (d) 阶攻击(高阶掩码的实现复杂度和性能开销较大)
  • 随机化(Shuffling / Randomization)
    • 随机打乱操作顺序(如 AES 中 16 个 SubBytes 的执行顺序随机化)
    • 增加攻击者对齐信号的难度

6.2 硬件层防御

  • 片上噪声生成器:增加信号的噪声水平,降低信噪比
  • 电压/频率随机化:使功耗曲线的时间对齐更加困难
  • 物理不可克隆函数(PUF):利用制造偏差生成设备唯一密钥,增强密钥保护

总结

  1. "如果一个加密算法在数学上被证明是安全的,是否意味着它的实现一定安全?"

    • 算法安全 vs 实现安全
  2. "为什么在密码学实现中,if (secret_bit == 1) { do_multiply(); } 这样的代码是危险的?"

    • 时间泄露与条件分支的关系
相关推荐
要努力点1 小时前
26考研——计算机考研复试——0854(2)
java·c语言·考研·算法·复试
少许极端1 小时前
算法奇妙屋(三十六)-贪心算法学习之路3
学习·算法·贪心算法·买卖股票问题
Predestination王瀞潞2 小时前
8.4.1 安全->SM商密(GM T 0002-2012 0003-2012):SM商密
网络·安全
觉醒程序员2 小时前
【保姆级】阿里云ECS服务器选购、安全组配置及VS Code SSH连接全攻略(避坑指南)
服务器·安全·阿里云
动物园猫2 小时前
厨房食品卫生与安全检测14类数据集分享(适用于YOLO系列深度学习分类检测任务)
深度学习·安全·yolo
逆境不可逃2 小时前
LeetCode 热题 100 之 138. 随机链表的复制 148. 排序链表 23. 合并 K 个升序链表 146. LRU 缓存
算法·leetcode·职场和发展
Q741_1472 小时前
每日一题 力扣 3546. 等和矩阵分割 I 前缀和 贪心 剪枝 C++ 题解
算法·leetcode·前缀和·矩阵·剪枝·贪心
我是咸鱼不闲呀2 小时前
力扣Hot100系列23(Java)——[回溯]总结(上)(全排列,子集,电话号码的字母组合,组合总和)
java·算法·leetcode