4、功耗分析基础:CMOS电路功耗模型、动态功耗与静态功耗、功耗与数据相关性
侧信道分析的核心前提是:芯片在运行过程中产生的物理泄露(功耗、电磁辐射、时序偏差)与内部处理的数据和操作存在可观测的关联。要理解这种关联,首先必须建立对CMOS电路功耗机制的定量认识。本章从晶体管级功耗模型出发,厘清动态功耗与静态功耗的构成与占比,并重点剖析功耗与数据相关性这一侧信道分析的理论基石。只有掌握了功耗为何随数据变化、变化幅度受哪些参数影响,才能为后续功耗采集、相关功耗分析(CPA)和模板攻击打下坚实的物理基础。
4.1 CMOS电路功耗模型:从晶体管到系统级
CMOS(互补金属氧化物半导体)电路是当前数字芯片的主流实现工艺。其基本结构由PMOS上拉网络和NMOS下拉网络互补组成,任何时刻只有一个网络导通,因此理想情况下静态电流几乎为零。然而在实际工作中,CMOS电路的功耗远非零,而是由多个物理机制共同贡献。理解这些机制,是侧信道分析的第一步。
4.1.1 核心原理:功耗的三大来源
CMOS电路的总功耗可以分解为三个主要部分:动态功耗(开关功耗)、短路功耗(直通功耗)和静态功耗(漏电功耗)。其中动态功耗占据主导地位(在典型数字IC中占70%-90%),也是侧信道分析最关注的部分。
- 动态功耗(P_dynamic):当输出节点从0→1或1→0翻转时,需要对负载电容CL进行充放电。其公式为:
P_dynamic = α · CL · VDD² · f,其中α为翻转率(每个时钟周期内节点发生翻转的概率),CL为负载电容,VDD为电源电压,f为时钟频率。这部分功耗与数据活动直接相关。 - 短路功耗(P_short-circuit):在输入信号翻转的瞬间,PMOS和NMOS会同时导通,形成从VDD到GND的短暂直通电流。其大小与输入信号的上升/下降时间成正比,通常占动态功耗的10%-20%。
- 静态功耗(P_static):即使电路处于稳态,晶体管仍存在亚阈值漏电、栅极漏电和PN结反向漏电。在先进工艺节点(如7nm以下),静态功耗占比显著上升,但在侧信道分析中,静态功耗通常不携带数据信息,属于噪声源。
4.1.2 功耗模型的分层抽象
在实际侧信道分析中,我们并不需要精确到晶体管级的SPICE仿真,而是采用更高层次的功耗模型来近似。常用的模型包括:
| 模型层级 | 描述 | 精度 | 计算开销 | 侧信道用途 |
|---|---|---|---|---|
| 晶体管级(SPICE) | 基于BSIM等模型,精确模拟每个晶体管的充放电电流 | 极高 | 极高 | 验证攻击可行性,生成模板 |
| 门级(标准单元) | 基于标准单元库的功耗模型,按翻转次数累加 | 高 | 中 | 仿真功耗轨迹,评估泄露点 |
| 架构级(RTL) | 基于寄存器传输级的活动因子估算 | 中 | 低 | 快速评估算法泄露风险 |
| 算法级(汉明模型) | 假设功耗与数据位翻转数成正比 | 粗 | 极低 | CPA攻击中的假设模型 |
在侧信道攻击中,最常用的是汉明距离模型(Hamming Distance, HD)和汉明重量模型(Hamming Weight, HW)。汉明距离表示两个连续状态之间发生翻转的位数,直接对应动态功耗;汉明重量表示当前状态中为1的位数,适用于预充电总线或静态逻辑。
4.2 动态功耗与静态功耗:特性对比与侧信道意义
动态功耗和静态功耗在物理机制、数据相关性、温度依赖性和工艺缩放趋势上存在显著差异。这些差异直接决定了它们在侧信道分析中的角色。
4.2.1 动态功耗:数据泄露的主要载体
动态功耗的公式P_dynamic = α · CL · VDD² · f揭示了几个关键点:
- 翻转率α是数据相关的:对于8位数据总线,从0x00变为0xFF需要翻转8个位,而从0x00变为0x01只需翻转1个位。前者消耗的功耗约为后者的8倍(假设每位负载电容相同)。
- VDD²项使功耗对电压敏感:降低电源电压可以显著降低功耗,但同时也降低了信号摆幅,使得功耗差异更难测量——这既是低功耗设计的手段,也是侧信道防护的一种方式。
- 频率f是全局因子:频率提高时,单位时间内的翻转次数增加,平均功耗上升,但每次翻转的功耗不变。因此,频率变化不会改变功耗与数据的相关性,只会改变信噪比。
在实际测量中,我们通常使用电流探头或电阻采样来获取芯片电源引脚的瞬态电流波形。当芯片执行不同操作(如AES加密的不同轮次)时,电流波形会呈现明显的差异。这些差异不仅来自数据值,还来自操作类型(如查表、移位、异或)。
4.2.2 静态功耗:噪声源与工艺泄露
静态功耗主要由漏电流构成,其公式简化为P_static = I_leak · VDD。漏电流包括:
- 亚阈值漏电(Sub-threshold leakage):晶体管在截止区仍存在微弱的源漏电流,随温度升高呈指数增长。
- 栅极漏电(Gate leakage):栅氧化层极薄时,电子直接隧穿通过绝缘层。
- 结漏电(Junction leakage):源/漏与衬底之间的PN结反向饱和电流。
从侧信道角度看,静态功耗通常不携带数据信息,因为它与晶体管的导通/截止状态无关,而是由工艺参数和环境温度决定。然而,在某些特殊情况下,静态功耗也会泄露数据:例如,当电路采用MTCMOS(多阈值CMOS)技术时,休眠晶体管的漏电大小可能取决于其栅极所接的数据值。此外,静态功耗随温度变化会影响整体功耗轨迹的基线漂移,增加攻击难度。
4.2.3 功耗-数据相关性的量化指标
为了量化功耗与数据的相关性,我们引入信噪比(SNR)和泄露函数(Leakage Function)的概念。SNR定义为数据相关信号功率与噪声功率之比:
SNR = Var(信号部分) / Var(噪声部分)
= Var(E[P | data]) / Var(P - E[P | data])
其中E[P | data]表示给定数据值时的平均功耗,Var表示方差。SNR越高,攻击所需的测量次数越少。对于8位微控制器,典型SNR范围在0.1到10之间,取决于工艺、测量设置和操作类型。
4.3 功耗与数据相关性:从物理机制到攻击模型
功耗与数据的相关性是侧信道攻击的物理基础。这种相关性并非简单的线性关系,而是由电路结构、数据编码方式和操作序列共同决定的。
4.3.1 核心原理:为什么功耗会泄露数据
考虑一个8位数据寄存器,其输出连接到一组CMOS反相器(驱动总线)。当寄存器从状态A更新到状态B时,每个输出节点的翻转情况取决于A和B的对应位:
- 若A[i]=0且B[i]=1:节点从0→1,PMOS导通,对负载电容充电,产生正电流脉冲。
- 若A[i]=1且B[i]=0:节点从1→0,NMOS导通,负载电容放电,产生负电流脉冲(从GND抽取)。
- 若A[i]=B[i]:节点不翻转,无充放电电流。
因此,总功耗与翻转位数(汉明距离HD(A,B))成正比。这就是汉明距离模型的物理基础。对于预充电总线(如某些安全芯片的内部总线),每个时钟周期先预充到固定电平,再根据数据放电,此时功耗与数据中1的个数(汉明重量HW(B))成正比。
4.3.2 操作流程:如何验证功耗-数据相关性
在实际的侧信道分析中,验证功耗与数据相关性的标准流程如下:
- 选择目标操作:确定要分析的操作(如AES的S盒查表、乘法运算、内存读写)。
- 采集功耗轨迹:使用数字示波器(采样率≥1GS/s)和电流探头(带宽≥100MHz)采集芯片执行该操作时的电源电流波形。触发信号通常来自芯片的IO引脚或内部触发电路。
- 对齐轨迹:由于时钟抖动和触发延迟,多次采集的轨迹在时间轴上可能存在偏移。需要采用重采样、互相关或模式匹配等方法对齐。
- 计算假设功耗:对于每条轨迹,根据已知的输入数据(或猜测的密钥),计算假设功耗值(如汉明距离或汉明重量)。
- 计算相关系数:使用皮尔逊相关系数(Pearson Correlation Coefficient)计算假设功耗与实际功耗轨迹之间的相关性。相关系数值越接近1,说明该时间点的功耗与数据相关性越强。
- 定位泄露点:绘制相关系数随时间变化的曲线,峰值出现的位置即为数据泄露的时间点。
4.3.3 案例拆解:8位微控制器上的功耗泄露验证
背景与约束:某物联网安全芯片采用ARM Cortex-M0+内核,内置AES-128硬件加速器。安全评估团队需要验证该芯片在执行AES加密时是否存在可被利用的功耗泄露。芯片工作电压3.3V,时钟频率24MHz,功耗测量采用100mΩ采样电阻串联在VDD引脚,示波器采样率2GS/s,带宽500MHz。
初始现象:初步采集的功耗轨迹显示,AES加密的10轮操作清晰可见,每轮约持续1μs(24个时钟周期)。但肉眼观察轨迹,不同明文加密的波形差异不明显,需要统计方法提取泄露。
关键输入数据:选择AES第一轮的S盒查表操作作为分析目标。输入为128位明文与128位初始密钥异或后的结果,攻击者已知明文,猜测密钥字节(256种可能)。
分析判断过程:
- 采集5,000条加密轨迹,明文随机生成。
- 对每条轨迹,提取S盒查表时刻的功耗值(约在轨迹起始后0.5μs处)。
- 对于每个密钥字节猜测值(0-255),计算中间值
v = Sbox[plaintext[i] XOR key_guess],然后计算汉明重量HW(v)。 - 计算HW(v)与实际功耗值的皮尔逊相关系数。
实际操作步骤:使用Python的scipy.stats.pearsonr函数计算相关性。对于正确的密钥字节,相关系数在S盒查表时刻出现明显峰值(|r|≈0.45);对于错误猜测,相关系数接近0。
结果对比:正确密钥字节的相关系数峰值出现在S盒查表时刻,且显著高于其他时间点。错误猜测的最大相关系数不超过0.05。通过遍历所有16个密钥字节,成功恢复完整AES-128密钥。
风险与代价:该攻击仅需5,000条轨迹,耗时约10分钟(包括采集和分析)。如果芯片采用功耗随机化掩码(Masking)防护,相关系数会显著下降,需要增加轨迹数量或采用高阶攻击。
复盘经验:功耗泄露的强度与S盒输出值的汉明重量直接相关,说明该芯片的S盒实现未采用预充电逻辑。此外,测量设置中的采样率(2GS/s)远高于信号带宽(约100MHz),确保了功耗波形的完整捕获。
4.4 常见误区与设计启示
在功耗分析的学习和实践中,工程师和安全分析师常陷入以下误区:
| 误区 | 错误认知 | 正确理解 |
|---|---|---|
| 功耗越大泄露越多 | 总功耗高的芯片更容易被攻击 | 泄露取决于功耗的数据相关方差,而非值。高静态功耗反而会淹没信号 |
| 降低电压可以完全防泄露 | VDD²降低后功耗差异变小 | 降低电压确实降低SNR,但也会降低噪声容限,且需要更灵敏的测量设备 |
| 静态功耗不泄露数据 | 漏电与数据无关 | 在MTCMOS或某些特殊电路中,漏电路径可能受数据控制 |
| 汉明重量模型总是适用 | 所有芯片都可用HW模型 | 对于预充电总线适用HW,对于普通寄存器适用HD,需根据电路结构选择 |
| 相关性低就是安全 | 相关系数小于0.1即无泄露 | 可能是测量带宽不足、触发不准或数据未对齐,需排除测量问题后再下结论 |