第二章 能量分析攻击原理:基础功耗与电磁泄漏
这一章我们聊聊最核心的问题:芯片为什么会泄密?
说白了,芯片在工作时,每一个比特的翻转都在消耗能量。这些能量变化,会通过电源引脚和电磁波被泄露出去。我刚开始接触这个领域时,总觉得能量分析很玄乎。直到我用示波器亲眼看到不同密钥下波形完全不同——那种感觉,就像能直接"看见"芯片脑子里在想什么。
为什么会泄密?硅片上的物理痕迹
每个CMOS门电路翻转时,都会从电源吸收短暂电流。这个电流的峰值、持续时间,都由正在处理的数据决定。你想想看,如果处理的数据是0x00和0xFF,驱动那么多负载的电流能一样吗?
核心洞察:功耗与数据相关,是所有能量分析攻击的物理基础。
功耗从哪里来?门级别的能量账单
CMOS电路的功耗由两部分组成。我整理了一个对比表,方便你快速理解。
| 功耗类型 | 物理来源 | 数据相关性 | 典型占比 |
|---|---|---|---|
| 动态功耗 | 门输出翻转,电容充放电 | 强相关(主要攻击目标) | 70%~90% |
| 静态功耗 | 亚阈值漏电流、栅极漏电流 | 弱相关(工艺越先进越明显) | 10%~30% |
动态功耗才是攻击者关注的重点。它在时钟边沿爆发式出现,幅度与翻转的比特数成正比。静态功耗虽然一直在消耗,但变化相对平稳,通常只能做辅助分析。
动态功耗:翻转的那一下最显眼
动态功耗的公式很简单:
P_dyn = α × C_L × V_DD² × f_clk
这里面α(翻转活动因子)是关键。α表示每个时钟周期,门输出平均翻转的概率。0→1翻转时,负载电容充电,电流从VDD流向输出;1→0翻转时,电容放电,电流从输出流向GND。
我举个例子。一个8位的总线从0x55变成0xAA,8个比特全部翻转,瞬间电流脉冲非常明显。但从0x55变成0x54,只有最低位翻转,电流脉冲就很小。差值就是攻击者用来区分密钥的线索。
小技巧:在实际测量中,我们通常用高精度电阻串联在VDD路径上采集电压降。千万别直接用电流探头——带宽和噪声都会让你后悔。
静态功耗:漏电也能泄漏信息
你可能觉得静态功耗没什么好分析的。嗯,以前我也这么想。但先进工艺节点(28nm以下)的亚阈值漏电变得很可观。不同数据状态下,晶体管栅极下方耗尽层的厚度不同,漏电流能差出20%~30%。
我记得评估一个28nm FPGA的AES实现时,动态功耗分析因为板级噪声太大搞不定。后来改用静态功耗分析,虽然信号弱,但通过重复采样平均,反而拿到了密钥。这是个冷门但很实用的思路。
功耗为什么能泄漏密钥?数据相关性
攻击者并不是直接测量功耗数值,而是测量功耗与假设值之间的相关性。这里有个关键步骤:
- 选择一个中间值(比如S盒输出)
- 遍历所有可能的密钥候选值
- 计算每个候选值对应的理论功耗
- 与实测功耗轨迹做相关性分析
最经典的算法是CPA(相关性功耗分析),用皮尔逊相关系数衡量。相关系数最高的那个密钥候选值,就是真正的密钥。具体公式是:
ρ = (∑(x_i - x̄)(y_i - ȳ)) / (√(∑(x_i - x̄)²) × √(∑(y_i - ȳ)²))
x_i是理论模型值,y_i是实测值。公式看着复杂,但你把它想成两条曲线之间的相似度打分就行。两条曲线长得越像,分数越高。
避坑指南:我曾经因为忘记对齐波形起始点,花了整整两天才找到问题。测量时一定要触发对齐——用一条指令的执行开始作为基准点。不对齐的数据,相关性永远是零。
从芯片到天线:电磁泄漏的另一面
除了功耗,芯片工作时还会通过电磁辐射泄漏信息。电流在金属走线中流动时,会在周围产生磁场。这些磁场会随着电流变化而变化。
电磁泄漏有几个特点:
- 局部性:靠近某个模块的探针只收到该模块的信号
- 频率范围宽:从几百kHz到几GHz都能检测到
- 非侵入性:不需要接触芯片,用近场探头就能采集
我建议你在实际项目中,优先尝试电磁分析。只要有一个X-Y移动平台和近场探头(直径1mm左右),就能对芯片表面做热力图扫描。找到辐射最强的点,再在那里采集轨迹——效果往往比功耗分析好。
但要注意,电磁信号更容易受周围环境干扰。手机信号、开关电源、甚至日光灯都会耦合进来。滤波和去噪是必要的预处理。
总结攻击模型:一张图讲清楚
把上面的理论整合起来,可以画一个攻击流程模型。左侧是秘密数据和操作指令,中间是CMOS电路的物理实现,右侧是我们能采集到的侧信道信号,下方是后处理阶段。
从图中可以看到,秘密数据和操作指令驱动CMOS门翻转,产生电流脉冲。这些电流脉冲通过电源网络和电磁场辐射出去。我们用示波器或近场探头捕获这些信号后,再通过对齐、降噪和相关性分析,最终恢复出密钥。
整个过程环环相扣。你想想看,如果我们能在电路设计阶段就切断这条链路——比如使功耗与数据解耦——攻击者就没戏了。这就是后续章节要讲的防御技术。
经验总结:能量分析攻击的本质,就是把底层的物理泄露(电流)当成上层的逻辑信号(数据)来看待。理解了这一点,你就掌握了攻防博弈的全局视角。