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

    • 时间泄露与条件分支的关系
相关推荐
byoass3 小时前
企业云盘文件预览技术深度剖析:从10种常见格式到渲染架构实战
网络·安全·架构·云计算
小江的记录本5 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
白羊by6 小时前
YOLOv1~v11 全版本核心演进总览
深度学习·算法·yolo
其实防守也摸鱼7 小时前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
2401_873479407 小时前
应急响应:勒索软件攻击源IP分析,如何通过IP地址查询定位辅助溯源?
网络·tcp/ip·安全·网络安全·ip
墨尘笔尖7 小时前
最大最小值降采样算法的优化
c++·算法
white-persist9 小时前
【vulhub shiro 漏洞复现】vulhub shiro CVE-2016-4437 Shiro反序列化漏洞复现详细分析解释
运维·服务器·网络·python·算法·安全·web安全
2603_953527999 小时前
WordPress Finale Lite 插件高危漏洞检测与利用工具 (CVE-2024-30485)
前端·python·安全·web3·xss
FL162386312910 小时前
基于C#winform部署软前景分割DAViD算法的onnx模型实现前景分割
开发语言·算法·c#
baizhigangqw10 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶
算法·启发式算法·web app