侧信道安全(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(); } 这样的代码是危险的?"

    • 时间泄露与条件分支的关系
相关推荐
刀法如飞5 小时前
JavaScript 数组去重的 20 种实现方式,学会用不同思路解决问题
前端·javascript·算法
洛水水5 小时前
【力扣100题】46.单词拆分
算法·leetcode·职场和发展
KKKlucifer6 小时前
数字安全浪潮下国产数据安全企业发展图鉴
大数据·安全
淼淼爱喝水6 小时前
Pikachu 靶场 RCE 模块乱码问题解决方法
网络·安全·pikachu
hahaha 1hhh6 小时前
用SSH 建立了一个本地端口转发隧道,用于安全地访问远程服务器上的服务,后台运行。autodl
服务器·安全·ssh
IT23106 小时前
国产OpenClaw产品崛起:博云BoClaw如何破解AI智能体的「安全与自主」双命题
人工智能·安全
MicroTech20256 小时前
量子安全赋能协同智能,微算法科技(NASDAQ :MLGO)研发PQS-BFL后量子区块链联邦学习框架
科技·算法·安全
Turboex邮件分享6 小时前
邮件系统中的附件处理机制
安全·软件需求
平行侠6 小时前
A19 工业设备故障决策树智能诊断系统
算法·决策树·机器学习
迈威通信6 小时前
戈壁滩上的“国产化通信网”:850MW光储项目如何稳定运行?
网络·物联网·安全·信息与通信