侧信道安全(Side-Channel Security)

第一章 背景

1.1 什么是侧信道攻击?

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

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

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

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

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

泄露的根源

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

信息泄露的基本模型

  • 设密钥为 (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(); } 这样的代码是危险的?"

    • 时间泄露与条件分支的关系
相关推荐
EasyGBS6 小时前
摄像头还在线,画面已经不能用了?国标GB28181视频平台EasyGBS视频质量诊断怎么用
服务器·安全·音视频
启观川6 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
码爸6 小时前
排序算法介绍
python·算法·排序算法
迪康Defender7 小时前
终端安全审批体系设计:如何平衡安全管控与业务连续性
运维·服务器·安全·运维开发·学习方法·业界资讯·远程工作
动词ing8 小时前
【题目练习】算法 组合总和||
算法
longlongzihan8 小时前
链表找环:Floyd 判圈算法(LeetCode 141 & 142 )
c++·算法·leetcode·链表
jimmyleeee8 小时前
大模型安全之四十五:从数据到输出----GenAI 版权、知识产权与伦理合规实战指南
人工智能·深度学习·安全
专业程序开发源8 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
Logic1018 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
yi0118 小时前
LeetCode 643. 子数组最大平均数 I|从暴力枚举到滑动窗口
人工智能·笔记·python·算法·leetcode·滑动窗口