3、侧信道攻击概述:侧信道泄露原理、攻击分类与攻击者模型
侧信道攻击(Side-Channel Attack, SCA)是硬件安全领域中最具现实威胁的一类攻击方式。与传统的软件漏洞利用不同,侧信道攻击并不直接破坏密码算法或协议的逻辑正确性,而是利用密码设备在运行过程中物理泄露的时间、功耗、电磁辐射、缓存行为等信息,间接恢复出密钥或敏感数据。理解侧信道泄露的物理本质、攻击分类以及攻击者的能力假设,是开展硬件安全评估与防护设计的第一步。本章将从泄露原理出发,系统梳理攻击分类,并建立攻击者模型,为后续的实战分析与防护实验奠定理论基础。
上图展示了侧信道攻击的完整链路:从密码设备的物理泄露出发,经过采集、预处理、统计分析,最终实现密钥恢复。攻击者模型决定了攻击的可行性与实施方式,而防护目标则对应着每一类泄露的缓解策略。下面将逐一展开核心原理、攻击分类、攻击者模型与实战案例。
3.1 侧信道泄露的物理本质
侧信道泄露的根本原因在于:密码设备在执行运算时,其物理状态(电压、电流、电磁场、时序、温度等)与正在处理的数据和操作码之间存在依赖关系。CMOS 电路在翻转时会产生动态电流,不同数据位翻转的数量和时刻不同,导致整体功耗出现可观测的差异。同样,分支语句、缓存命中率、乘法器执行周期等也会造成时间上的差异。这些物理量本质上是一种“无意的信息通道”,与密码算法本身的安全性无关,却可以被攻击者利用。
核心泄露模型:对于功耗攻击,常用“汉明重量模型”(Hamming Weight Model)或“汉明距离模型”(Hamming Distance Model)来近似描述泄露。汉明重量指中间值中比特位为 1 的个数;汉明距离指两次状态转换中翻转的比特数。对于 AES 的 S 盒输出,攻击者通常假设功耗与 S 盒输出的汉明重量线性相关,即 P = a·HW(S盒输出) + b + 噪声。这一模型是 DPA/CPA 攻击的数学基础。
时序泄露则来源于算法实现中的密钥相关分支。例如,RSA 的二进制平方-乘算法中,如果密钥位为 1 则执行乘法和平方,为 0 则只执行平方,那么总执行时间与密钥中 1 的个数成正比。缓存泄露则发生在查找表(如 AES S 盒)访问时,若表项不在 Cache 中,则访问延迟显著增加,攻击者通过 Prime+Probe 或 Flush+Reload 技术可以探测到访问地址,进而推断密钥。
3.2 攻击分类与典型特征
根据泄露通道的不同,侧信道攻击可分为五大类。每类攻击的采集方式、分析方法和适用场景均有显著差异。下表总结了各类攻击的核心特征与典型应用场景。
| 攻击类型 | 泄露物理量 | 典型采集设备 | 分析方法 | 适用场景 |
|---|---|---|---|---|
| 时序攻击 | 执行时间 | 高精度计时器、逻辑分析仪 | 统计检验、距离分析 | 软件密码实现、网络协议 |
| 功耗攻击 | 动态电流/电压 | 示波器 + 电流探头/电阻 | DPA、CPA、模板攻击 | 智能卡、嵌入式设备 |
| 电磁攻击 | 电磁辐射场 | 近场探头 + 频谱分析仪 | EMA、相关性分析 | 非接触场景、芯片解密 |
| 缓存攻击 | Cache 访问延迟 | 软件计时函数(rdtsc) | Prime+Probe、Flush+Reload | 云环境、共享主机 |
| 故障注入 | 错误输出/异常行为 | 电压毛刺、激光、时钟毛刺 | 差分故障分析(DFA) | 硬件钱包、安全启动 |
功耗攻击是最经典且研究最深入的一类。其攻击流程通常包括:选择中间值(如 AES 首轮 S 盒输出)、采集大量功耗轨迹、按假设密钥进行划分、计算差分均值或相关系数。当假设密钥正确时,差分曲线会出现明显尖峰;错误密钥则近似平坦。电磁攻击与功耗攻击原理类似,但无需直接接触电路,可通过近场探头在芯片上方采集辐射信号,适合攻击无法直接测量功耗的封装设备。
缓存攻击在云计算环境中尤为突出。由于宿主机上多个虚拟机共享物理 Cache,攻击者可以通过监控自身 Cache 的加载延迟来推断受害进程的访问模式。例如,在 Flush+Reload 攻击中,攻击者先刷新共享库中的目标地址,然后等待受害进程执行,再重新加载该地址并测量时间。若加载时间短,说明受害进程访问过该地址,从而泄露了密钥相关的索引信息。
3.3 攻击者模型与能力假设
攻击者模型定义了攻击者具备的物理访问权限、设备控制能力和先验知识。根据攻击者与目标设备的接触程度,通常分为以下三类:
- 非侵入式攻击者:仅通过外部可观测接口(如电源引脚、电磁辐射、计时接口)获取信息,不打开芯片封装。此类攻击成本低、可重复性强,但信号噪声较大,需要大量采集和统计处理。典型代表:功耗分析、电磁分析、时序分析。
- 侵入式攻击者:具备打开芯片封装、使用探针台接触内部金属层的能力。可以读取内部总线信号、直接注入故障或修改电路。此类攻击需要昂贵设备和专业实验室,但攻击效果最直接。典型代表:聚焦离子束(FIB)编辑、微探针窃听。
- 半侵入式攻击者:打开封装但不破坏钝化层,通过紫外线、激光或电压毛刺干扰电路工作。此类攻击介于前两者之间,成本适中且效果显著。典型代表:激光故障注入、光化学分析。
能力假设的关键点:在设计防护方案时,必须明确攻击者是否知道算法细节(Kerckhoffs 原则)、是否拥有参考设备(用于模板攻击)、能否同步触发采集(是否知道加密开始时刻)、以及能否多次重复加密(是否支持选择明文)。这些假设直接决定了防护强度的需求。例如,若攻击者无法同步触发,则需增加轨迹对齐的难度;若攻击者无法选择明文,则已知明文攻击将失效。
在实际评估中,通常假设攻击者具备以下能力:能够观测加密设备的功耗或电磁轨迹、能够控制或至少知道明文/密文、能够重复执行加密操作以采集大量样本、具备一定的统计分析和信号处理能力。对于故障注入攻击,还假设攻击者能够在精确的时间点注入电压毛刺或激光脉冲,且注入精度达到纳秒级。
3.4 实战场景:针对 AES-128 的 CPA 攻击流程拆解
为了将上述理论落地,这里以一个典型的 AES-128 软件实现为例,演示相关功耗分析(CPA)攻击的完整流程。该实验在 ChipWhisperer 平台上进行,目标板为 8 位 AVR 微控制器,运行未经掩码的 AES 实现。
实验背景与约束:目标设备为 Atmel XMEGA 系列,工作电压 3.3V,系统时钟 7.37MHz。攻击者通过 USB 接口与 ChipWhisperer 采集板通信,采样率为 29.5MS/s,每条功耗轨迹采集 3000 个采样点。攻击者已知明文,但不知道密钥,目标是恢复 AES 首轮轮密钥的 16 个字节。
初始现象与目标:初次采集时,功耗轨迹存在明显的时钟噪声和触发抖动。直接进行 CPA 分析时,相关系数峰值仅为 0.12,无法有效区分正确密钥。目标是通过预处理提高信噪比,使正确密钥的相关系数达到 0.5 以上。
关键参数与数据:采集 5000 条功耗轨迹,明文随机生成。每条轨迹包含 3000 个采样点,对应 AES 首轮加密过程。中间值选择为 S 盒输出 sbox[plaintext[i] ^ key_guess],功耗模型采用汉明重量模型。
分析判断过程:首先对轨迹进行简单平均滤波(窗口大小 5),去除高频噪声。然后使用峰值为 0.8 的触发器进行对齐,消除触发抖动。重新计算 CPA 后,正确密钥 0x2B 的相关系数提升至 0.47,而错误密钥的最大相关系数仅为 0.18。进一步采用“差分轨迹”方法,将正确密钥与错误密钥的功耗差可视化,可以清晰看到在 S 盒输出时刻(采样点 1200-1400 附近)出现明显尖峰。
实际操作步骤:
- 连接 ChipWhisperer 采集板与目标板,配置采样率和触发条件。
- 编写 Python 脚本,循环发送明文并采集功耗轨迹,保存为 numpy 数组。
- 对轨迹进行带通滤波(100kHz-5MHz),去除电源噪声。
- 使用峰值检测算法对齐轨迹,确保每条轨迹的 S 盒输出时刻一致。
- 对于每个密钥字节的 256 种假设,计算中间值汉明重量,并与每个采样点的功耗值计算 Pearson 相关系数。
- 选取相关系数最大的密钥假设作为恢复结果,并验证正确性。
结果对比与复盘:经过预处理后,正确密钥的相关系数从 0.12 提升至 0.47,攻击成功率显著提高。但值得注意的是,若采集轨迹数量减少至 1000 条,相关系数降至 0.31,仍可恢复密钥但置信度下降。若目标设备启用了随机延时干扰,则需增加轨迹对齐的复杂度,例如使用互相关对齐或弹性匹配算法。
经验总结:在实际攻击中,轨迹质量往往比数量更重要。良好的触发对齐和滤波可以显著减少所需轨迹数。此外,选择中间值时,应优先选择算法早期轮次的输出,因为此时密钥影响尚未充分扩散,信噪比更高。对于 AES,首轮 S 盒输出是最常用的攻击点。
3.5 常见误区与防护启示
在侧信道攻击的学习和实践中,初学者常陷入以下误区:
- 误区一:认为侧信道攻击需要昂贵设备。实际上,针对 8 位微控制器的功耗攻击,使用 200MHz 采样率的入门级示波器和 10Ω 采样电阻即可完成。对于缓存攻击,仅需一台普通 PC 和计时函数。
- 误区二:混淆“算法安全”与“实现安全”。AES 算法本身是安全的,但若实现时未加掩码、未使用恒定时间比较,则物理泄露会破坏其安全性。侧信道攻击针对的是实现,而非算法。
- 误区三:忽视攻击者模型假设。若攻击者无法同步触发采集,则功耗攻击的难度会大幅上升。但攻击者可以通过已知明文和固定触发条件来规避这一限制。防护设计必须基于最坏情况的攻击者能力。
- 误区四:认为故障注入只是“破坏设备”。实际上,故障注入的目标是产生可分析的错误密文,通过差分分析恢复密钥。例如,在 AES 最后一轮注入单字节故障,通过比较正确与错误密文,可以仅用少量样本恢复密钥。
从防护角度看,理解侧信道泄露原理后,可以采取分层防护策略:在算法层面使用掩码(Masking)和隐藏(Hiding)技术;在硬件层面增加噪声源、平衡功耗、使用恒定时间逻辑;在系统层面增加故障检测机制和主动屏蔽层。每种防护都有其代价,需要根据攻击者模型和安全等级进行权衡。
防护设计要点:掩码技术通过将中间值拆分为多个随机分享,使功耗与真实数据无关;隐藏技术通过随机插入伪操作或使用双轨逻辑,使功耗曲线趋于平坦;恒定时间实现则消除密钥相关的分支和查找表访问。对于故障注入,通常采用冗余计算和结果校验,检测到异常时立即清零密钥。
综上所述,侧信道攻击是一个跨学科领域,涉及微电子、密码学、信号处理和统计分析。掌握泄露原理和攻击分类,是进行安全评估和防护设计的基础。在实际项目中,应根据目标设备的物理环境、攻击者的潜在能力和安全需求,选择合适的分析方法和防护强度。