本文目录导读:

针对功耗分析 (Power Analysis) 的防护是硬件安全(特别是密码学实现、智能卡、物联网设备)中的核心课题,功耗分析主要分为两类:简单功耗分析 (SPA) 和 差分功耗分析 (DPA),防护策略需要同时对抗这两种攻击。
以下是系统性的防护方法,按硬件层面和算法/代码层面分类:
硬件层面防护
硬件防护旨在从物理上减少功耗与数据/操作之间的相关性。
-
低功耗与恒定功耗逻辑
- 互补 CMOS 逻辑:设计传统CMOS时,功耗与数据翻转率相关,需要采用特殊的逻辑风格。
- 差异功耗逻辑:如 SABL (Sense Amplifier Based Logic) 或 WDDL (Wave Dynamic Differential Logic),这些逻辑保证在每一个时钟周期,电路中的所有节点都产生一次翻转(无论输入数据是0还是1),从而强制功耗恒定,代价是功耗和面积显著增加(约2-4倍)。
-
电源与衬底噪声注入
在电源网络(VDD/VSS)中引入可控的随机噪声或高频时钟抖动,使真实信号的功耗淹没在噪声中,这会大幅提高攻击者需要采集的样本量(即提高了DPA的攻击复杂度)。
-
去耦电容
在芯片的电源引脚附近放置大量的片上去耦电容,这些电容储存电荷,能瞬间提供芯片所需的电流尖峰,从而平滑掉由数据处理引起的局部功耗波动。
-
双轨/预充电逻辑
- 使用差分信号线(如Q和/Q)。
- 在预充电阶段,所有差分线都充电到相同电平。
- 在求值阶段,只有一根线放电,无论数据如何,放电的总电流量是固定的,实现了逻辑层面的数据无关功耗。
-
掩蔽
使用随机掩码对中间值进行异或或乘法,硬件运算单元(如乘法器)在掩码下工作,使实际计算的数据与真实数据的关联性被隐藏。
算法/代码层面防护
软件防护更为灵活,适用于嵌入式CPU、ARM、RISC-V等通用处理器。
-
平衡操作(对抗 SPA)
- 条件分支恒定时间:避免“if(bit)==1 then A else B”这种时间或功耗不均的代码,将分支改为始终执行两边的操作,然后通过掩码选择结果。
- 幂指数运算:在RSA、ECC中,采用蒙哥马利阶梯 (Montgomery Ladder) 或 点乘统一公式 (Unified Point Addition),确保每一次循环执行的操作一致(始终是加法和倍点),而与密钥位无关。
-
掩码技术(对抗 DPA)
- 布尔掩码:将敏感值
X分割为X_m和M,满足X = X_m XOR M,计算时,操作数都被掩码覆盖,中间结果也是随机的。 - 乘法掩码:用于乘法运算(如AES MixColumns)。
- 高阶掩码 (High-Order Masking):用多个随机掩码(n个)分割一个变量,攻击者需要攻破n+1阶才能恢复,但实现复杂度指数级上升。
- 重组掩码 (Mask Refreshing):在每次运算后,重新生成新的掩码,防止掩码被追踪。
- 布尔掩码:将敏感值
-
随机延迟/伪装操作
在循环中插入随机的等待周期或NOP指令(无操作指令),打乱攻击者对齐功耗迹线的能力,从而干扰DPA的统计学分析,但在高分辨率采样下效果有限。
-
隐藏 (Hiding) 技术
- 功耗随机化:随机插入与输出无关的短路电流。
- 频率调制:动态调整时钟频率,使功耗采样点不规则。
工程实践中的典型方案对比
| 防护类型 | 核心原理 | 优点 | 缺点 | 典型应用 |
|---|---|---|---|---|
| 恒定逻辑 | 逻辑门/寄存器每个周期翻转 | 理论上绝对抵抗SPA/DPA | 面积功耗极大,设计复杂 | 高端智能卡、军事级安全芯片 |
| 掩码 | 使用随机数掩盖中间值 | 灵活,可实现高安全等级 | 需设计复杂的代数运算逻辑,可能引入组合逻辑泄漏 | AES、SHA-3软件实现 |
| 平衡编程 | 无条件分支,执行路径一致 | 实现简单,对CPU开销低 | 仅抵抗SPA,对DPA效果一般 | 低端MCU上的RSA/ECC |
| 噪声注入 | 增加无关功耗 | 兼容现有设计,改造成本低 | 只能提高攻击成本,无法根本消除 | 普通物联网安全芯片 |
验证方法(防护有效性问题)
即使采用了上述措施,仍需进行侧信道攻击的验证性测试,因为现实世界中的泄漏可能比理论模型更复杂:
- TVLA (Test Vector Leakage Assessment):通常使用Welch’s t-test,固定随机对照注入,分析功耗迹线是否显示出与数据相关的统计差异,如果t-statistic绝对值在任何点超过4.5/6.0(通常4.5为警告,6.0为失败),说明存在显著泄漏,防护不足。
- 实战攻防演练:用已知的DPA工具(如ChipWhisperer、NewAE Technology的CW305平台等)进行实际攻击,统计需要的样本量(通常需要百万级以上的迹线才算有一定安全裕度)。
要有效防护功耗分析,单一技术往往不够,一个健壮的系统通常采用分层防护策略 (Defense in Depth):
- 硬件底层:使用双轨预充电逻辑或掩蔽。
- 软件/算法层:使用恒定时间算法 + 随机掩码 + 随机延迟。
- 物理层:在电源网络上引入噪声,并优化对地回路,防止电磁泄漏。
最终目标是:使攻击者提取到单次密钥所需的功耗迹线样本数量 > 设备的使用寿命周期(需要采集100亿条迹线,而设备在正常寿命内只会产生100万次加密操作)。