4、功耗分析基础:功耗模型(汉明重量、汉明距离)、功耗采集平台(示波器、电流探头、电阻采样)与信号调理

功耗分析是侧信道攻击与防护中最核心的切入点。无论是针对智能卡、安全MCU还是SoC芯片,攻击者通过测量芯片在运行加密算法时的瞬态功耗变化,即可推断出内部密钥或敏感数据。本章将系统讲解功耗分析的两大基石:功耗模型(汉明重量与汉明距离)和功耗采集平台(示波器、电流探头、电阻采样),并深入探讨信号调理对采集质量的决定性影响。理解这些内容,是后续进行CPA(相关功耗分析)、DPA(差分功耗分析)以及模板攻击的前提。

功耗分析基础:模型 → 采集 → 调理 → 分析 功耗模型 汉明重量模型 (HW) 功耗 ∝ 数据中“1”的个数 汉明距离模型 (HD) 功耗 ∝ 前后状态翻转位数 适用:CMOS工艺芯片 采集平台 示波器 (高带宽/高采样率) 电流探头 (非侵入/高频) 电阻采样 (低成本/需调理) 信号调理 放大 (低噪声LNA) 滤波 (带通/陷波) 阻抗匹配/偏置 分析目标 密钥恢复 (CPA/DPA) | 算法识别 | 硬件安全评估 关键链路:功耗模型指导假设 → 采集平台获取真实功耗 → 信号调理提升SNR → 统计分析验证 关键参数速查 采样率:≥ 5× 时钟频率 (建议10×) 带宽:DC ~ 1GHz (取决于攻击目标) 采样电阻:1Ω ~ 50Ω (低阻防压降) 分辨率:≥ 8 bit (推荐12 bit) 触发:与加密操作同步 (RTS/GPIO) 记录长度:覆盖完整加密操作

上图展示了功耗分析的整体工程链路:功耗模型为分析提供理论假设,采集平台负责将物理功耗转换为可观测的电信号,信号调理则确保信号质量满足分析要求。三者环环相扣,任何一环的缺失或不足都会导致分析失败。下面我们逐一深入展开。

4.1 功耗模型:从物理现象到数学抽象

核心原理:CMOS数字电路在逻辑翻转时产生动态功耗,其大小与翻转节点的负载电容、电源电压和翻转频率成正比。对于同一芯片,在固定电压和频率下,功耗主要取决于翻转的位数。功耗模型正是基于这一物理特性,将功耗与数据处理过程中的位变化建立数学关联。

汉明重量模型(Hamming Weight, HW)是最基础的功耗模型。它假设功耗与某个中间值中“1”的个数成正比。例如,在AES加密的S盒输出中,若输出字节为0x3C(二进制00111100),其汉明重量为4,则功耗与4成正比。该模型适用于预充电总线或寄存器清零后写入的场景,即每次操作前数据位都被复位为0。

汉明距离模型(Hamming Distance, HD)则更为精确,它关注的是前后两个状态之间的翻转位数。公式为:HD = HW(前状态 XOR 后状态)。例如,寄存器从0x3C变为0x5A,异或结果为0x66(01100110),HD=4。该模型适用于寄存器连续写入不同值的场景,是实际CMOS电路中最常见的功耗来源。

模型类型数学表达式适用场景典型应用
汉明重量 (HW)P ∝ HW(data)预充电总线、清零后写入软件实现AES的S盒输出
汉明距离 (HD)P ∝ HW(prev ⊕ curr)寄存器连续写入、状态机跳转硬件AES轮运算、密钥寄存器更新
比特模型P ∝ bit_value单比特泄露(如串行接口)UART数据线、时钟信号
实战选择建议:在针对软件实现的密码算法(如ARM Cortex-M上运行的AES)进行功耗分析时,优先使用汉明重量模型,因为软件通常将中间值加载到寄存器后立即使用,寄存器初始状态未知但可假设为0。而在针对硬件密码引擎(如AES加速器)时,汉明距离模型更准确,因为硬件寄存器在连续轮次间保持状态,功耗取决于状态翻转。

4.2 功耗采集平台:构建高保真测量链路

核心原理:功耗采集的本质是将芯片的瞬态电流变化转换为电压信号,并以足够高的采样率和分辨率记录下来。采集平台的选择直接影响信号带宽、噪声底和测量精度。

示波器是功耗采集的核心设备。推荐使用带宽≥500MHz、采样率≥2.5GS/s的数字示波器,并具备深存储(≥100Mpts)以记录完整加密操作。示波器的垂直分辨率至少8bit,对于微弱信号分析建议12bit。关键设置包括:采样率设为芯片时钟频率的10倍以上,以确保捕获功耗波形的细节;触发模式设为上升沿或下降沿,与加密操作的起始信号同步。

电流探头(如Tektronix TCP0030A或Keysight N2783B)通过霍尔效应或罗氏线圈非侵入式测量电流。其优点是不引入额外压降,且带宽可达100MHz以上。但电流探头价格昂贵,且低频响应受限(通常>10Hz),不适合测量极低频的功耗变化。

电阻采样是最经济实用的方案。在芯片的VDD引脚串联一个低阻值采样电阻(典型值1Ω~10Ω),通过测量电阻两端电压降推算电流。该方案成本低、带宽高(取决于电阻寄生电感),但会引入IR压降,可能影响芯片工作电压。实际使用时需权衡:电阻越小,压降越小,但信号幅度也越小,需要后续放大。

电阻采样电路设计要点:
VDD(3.3V) → [采样电阻 Rs=2.2Ω] → VDD_CHIP
                                   │
                                   └─→ 差分探头 → 示波器CH1
GND ───────────────────────────────┴─→ 示波器GND

采样电阻应选用低温度系数(±25ppm/°C)的精密电阻,且寄生电感小于1nH。差分探头可有效抑制共模噪声,提高测量精度。

操作流程:① 确认芯片工作电压和最大电流,计算采样电阻功耗(P=I²R),确保不超过电阻额定功率;② 使用差分探头连接采样电阻两端,探头带宽应≥100MHz;③ 设置示波器采样率为时钟频率的10倍,记录长度为完整加密操作的1.5倍;④ 触发信号从芯片的GPIO或加密引擎的起始信号引出;⑤ 采集多组功耗轨迹(建议≥1000条),用于后续统计分析。

4.3 信号调理:从原始信号到高质量功耗轨迹

核心原理:原始功耗信号通常非常微弱(毫伏级),且叠加了高频噪声、电源纹波和电磁干扰。信号调理的目标是最大化信噪比(SNR),同时保持功耗波形的真实形状。

放大:使用低噪声放大器(LNA)将信号放大至示波器ADC的满量程范围(通常1Vpp)。关键参数包括:增益(20dB~40dB)、带宽(DC~500MHz)、噪声系数(<2dB)。推荐使用差分放大器(如TI THS4304),可同时实现放大和共模噪声抑制。

滤波:根据信号频率分布选择滤波器。若功耗信号集中在低频(<10MHz),使用低通滤波器(截止频率20MHz)去除高频噪声;若存在特定干扰(如50Hz工频),使用陷波滤波器。但需注意,过度滤波会滤除功耗信号的高频分量,导致波形失真,因此滤波器的截止频率应至少为信号最高频率的3倍。

阻抗匹配与偏置:确保信号源(采样电阻)与放大器输入阻抗匹配(通常1MΩ),避免信号反射。对于交流耦合场景,需设置直流偏置(如+1.65V),使信号在ADC输入范围内。

常见误区:许多初学者直接使用示波器探头连接采样电阻,未经过放大和滤波,导致采集到的功耗轨迹噪声大、信号弱,无法进行有效的CPA分析。正确的做法是:先放大,再滤波,最后进入示波器。此外,切勿使用示波器的“平均”功能来降噪,因为这会抹平功耗轨迹的逐点差异,破坏侧信道信息。

4.4 案例拆解:基于STM32F407的AES功耗采集实战

背景与目标:某安全产品使用STM32F407运行AES-128加密,需评估其抗功耗分析能力。目标是通过功耗采集获取高质量的AES加密轨迹,为后续CPA攻击测试做准备。

初始现象:直接使用示波器探头(10×衰减)连接VDD引脚,采集到的功耗波形噪声极大(峰峰值约200mV),且无法区分AES轮运算的功耗特征。

关键参数与问题分析:STM32F407工作频率168MHz,AES加密操作约需20μs。示波器采样率设为1GS/s,记录长度20kpts。但信号幅度仅约10mV,远低于示波器ADC的满量程(1V),量化噪声严重。

操作步骤:① 在VDD引脚串联2.2Ω采样电阻,使用差分探头(带宽100MHz)测量电阻两端电压;② 设计两级放大电路:第一级使用AD8421仪表放大器(增益20dB),第二级使用OPA847(增益20dB),总增益40dB;③ 在两级之间插入10MHz低通滤波器(巴特沃斯),滤除高频开关噪声;④ 使用STM32的PA0引脚在AES加密开始时输出高电平触发信号,连接示波器外部触发;⑤ 采集5000条功耗轨迹,每条轨迹包含完整的AES加密过程。

结果对比:调理后的信号幅度约800mV,噪声峰峰值降至20mV,SNR从10dB提升至32dB。功耗轨迹中可清晰分辨AES的10轮运算特征,每轮约2μs,轮间有短暂的空闲周期。

风险与代价:放大电路引入了额外的电源噪声(约5mV),但通过差分结构和低噪声设计,该噪声远小于信号幅度。采样电阻的2.2Ω压降在芯片最大电流(约100mA)时产生220mV压降,导致芯片实际工作电压降至3.08V,仍在STM32F407的允许范围(2.0V~3.6V)内。

复盘经验:① 采样电阻阻值需在信号幅度和压降之间权衡,2.2Ω是较好的折中;② 差分探头比单端探头抗干扰能力强得多,强烈推荐;③ 滤波器的阶数不宜过高(2~3阶即可),否则会引入相位失真;④ 触发信号必须与加密操作严格同步,否则轨迹对齐误差会破坏后续分析。

4.5 常见误区与总结复盘

误区一:采样率越高越好。过高的采样率(如10GS/s)会产生大量冗余数据,增加存储和处理负担,且对信号质量提升有限。应根据信号带宽选择采样率,遵循奈奎斯特定理并留出3~5倍裕量。

误区二:忽略电源去耦。芯片VDD引脚旁的去耦电容(如100nF)会旁路高频功耗信号,导致采集到的信号失真。在功耗采集时,应临时移除或减小去耦电容,或从去耦电容前端采样。

误区三:使用交流耦合丢失低频信息。功耗信号包含直流分量(静态功耗)和交流分量(动态功耗),交流耦合会滤除直流分量,但某些攻击(如模板攻击)需要完整的功耗信息。建议使用直流耦合,并通过偏置电路调整信号范围。

误区四:忽视触发抖动。触发信号与加密操作之间的时间偏差(抖动)会导致轨迹对齐不准,降低相关性。应使用硬件触发(如GPIO)而非软件触发,并尽量缩短触发信号到加密引擎的路径。

检查项推荐值验证方法
采样率≥10× 时钟频率观察功耗波形是否平滑,无混叠
信号幅度占ADC满量程50%~90%示波器垂直刻度检查
SNR≥20dB计算信号功率/噪声功率
触发抖动<1ns多次采集同一操作,检查轨迹对齐
采样电阻压降<5% VDD万用表测量芯片VDD电压

总结:功耗分析的成功率高度依赖于功耗模型的准确性和采集信号的质量。汉明重量与汉明距离模型为分析提供了理论指导,而精心设计的采集平台和信号调理链路则是获取高质量数据的基础。在实际项目中,建议先使用已知密钥的测试向量验证采集系统,确认功耗轨迹中能观察到预期的轮运算特征,再进行密钥恢复攻击。只有将模型、采集、调理三者有机结合,才能构建可靠的功耗分析能力。