基于泄露模型的相关功耗分析(CPA)
基于泄漏模型的相关功耗分析
埃里克·布里耶、克里斯托夫·克拉维耶、弗朗西斯·奥利维耶 法国金普斯智能卡国际公司 安全技术部
摘要
本文采用一种经典模型描述密码设备的功耗特性,该模型基于被处理数据相对某个未知但固定的参考状态的汉明距离。在通过实验验证后,该模型可推导出一种最优攻击方法,称为相关功耗分析(CPA)。本文同时解释了差分功耗分析(DPA)等传统方法存在的缺陷。
关键词:相关系数;CPA;DPA;汉明距离;功耗分析;DES;AES;安全密码设备;侧信道
1 引言
在针对密码设备的统计功耗分析领域,存在两条经典技术路线: 第一条是由保罗·科彻提出、托马斯·梅瑟格斯等人形式化的著名差分功耗分析(DPA); 第二条则在多篇文献中被提出,主张使用功耗采样值与被处理数据的汉明重量之间的相关系数进行分析。 这两种方法都因假设不够合理、模型存在缺陷而具有局限性,本文将对此进行更深入的分析。本研究延续了此前两类工作:一类旨在改进汉明重量模型,另一类则通过多种方式增强DPA本身。 本文提出的方法基于汉明距离模型,可看作是汉明重量模型的推广。其基本假设早在2000年前后的多篇文献中就已被提及,但这些假设仅被用于解释DPA的缺陷,并未形成完整、实用的攻击方案。我们通过实验工作对这些方法进行整合,以全面揭示数据泄漏规律。 沿用相关思路,本文提出使用相关功耗分析(CPA)来确定泄漏模型的参数,并证明该方法可以对DES、AES等多种算法的未防护实现实施可靠且高效的攻击。本研究严格限定在对称密码范畴,相关思想亦可向外扩展。 本文组织结构如下:
第2节介绍汉明距离模型;
第3节论证相关系数的合理性;
第4节描述基于模型的相关功耗攻击,并分析模型误差带来的影响;
第5节讨论估计问题;
第6节给出验证模型的实验结果;
第7节与DPA进行对比研究,并专门分析在对DES第一轮S盒实施传统DPA时易出现误判的所谓“伪峰(ghost peaks)”问题,说明本文模型如何解释DPA的诸多缺陷,以及相关功耗分析如何在最优条件下实现稳健攻击。 最后在结论中总结CPA相对DPA的优缺点,并指出防护措施对两类方法同样有效。
2 汉明距离功耗模型(Hamming Distance Consumption Model)
在传统功耗分析文献中,大多数方法基于汉明重量模型(Hamming Weight Model),即一个数据字中比特为 1 的个数。
在一个 m 位微处理器中,二进制数据可表示为:
其汉明重量定义为数据中为 1 的比特数量:
其取值范围为 0 到 m。
如果 D 包含 m 个相互独立且均匀分布的比特,则整个数据字的:
平均汉明重量为
方差为
功耗泄漏与比特翻转
通常认为,通过功耗侧信道泄漏的信息与某一时刻发生状态切换的比特数量有关。
微处理器可以被建模为一个状态机(state machine),其状态之间的转换由诸如时钟信号边沿等事件触发。
从 CMOS 技术实现的逻辑门角度看:
电流消耗与比特从一个状态翻转到下一个状态所需的能量有关,主要由两部分构成:
- 电容充放电能量
- 门电路切换引起的短路电流
知识补充:(数电相关知识,学期开始再回来补)在 CMOS 逻辑门中:
- 当输出不变时,几乎不耗电
- 当输出发生改变时,会消耗电能
这就是关键:
CMOS 的功耗主要来自“状态切换”
虽然这种物理行为被广泛接受,但并没有形成一个被普遍适用的完整理论模型。通常只有硬件设计人员借助电路仿真工具来预测微电子设备的功耗。
参考状态问题
如果采用“状态转换模型”,一个关键问题是:
比特是从哪个“参考状态”翻转的?
本文假设存在一个固定的参考机器字 R,它:
- 是未知的
- 不一定为 0
- 在同样的数据操作发生在同一时间时保持恒定
- 不考虑不同步(desynchronization)效应
此外还做出如下假设:
- 从 0 → 1 和 1 → 0 所需能量相同
- 同一时刻被处理的所有比特负载均衡、消耗一致
虽然这些假设看似严格,但在不深入微电子细节的前提下是合理且可接受的。
R 就是:
在 D 写入之前,总线/寄存器里原来存的值
汉明距离模型
在这种假设下,从参考状态 R 变为数据 D 所需要翻转的比特数量为:
这被称为 D 与 R 之间的汉明距离(Hamming Distance)。
可以看出:
若 ( R = 0 ),则该模型退化为汉明重量模型。
若 D 是均匀随机变量,则 (
) 也是均匀随机变量。 因此:
线性功耗假设
进一步假设:
功耗与汉明距离之间存在线性关系。
虽然这是一个简化假设,但考虑到芯片由大量基本电气元件组成,这种线性近似在实际中相当有效。
需要强调:
- 该模型只刻画数据相关的功耗部分
- 芯片的总功耗不完全由数据切换决定
- 总功耗中与数据无关的部分记为常数项 b
常数项 b 包含:
- 偏置(offset)
- 时间相关成分
- 噪声
并假设 b 与数据无关。
最终功耗模型
因此,数据相关功耗的基本模型可表示为:
其中:
- ( W ):功耗
- ( a ):比例系数(增益)
- (
):汉明距离 - ( b ):数据无关的功耗项
3 线性相关因子(The Linear Correlation Factor)
在线性功耗模型中:
把它当成随机变量:
计算协方差:
展开:
代入相关系数:
我们已经知道:
所以:
如果 D 是均匀随机:,代入得到:
如果只影响 l 位?
假设:
- 总共 m 位
- 只有 l 位真正参与翻转
- 其他位恒定
那么:
于是相关性变成:
整理成论文里的形式:
思考与总结
相关性与参与位数平方根成正比
- 单比特攻击更难
- 字节攻击更容易
- 多比特泄漏效果更强
CPA 本质
CPA 实际在做:
找那个使相关系数最大的密钥猜测。
正确密钥:
- H 与 W 真正线性相关
- 相关性会收敛到理论值
错误密钥:
- H 独立
- 相关性 → 0
一个极重要的结论
相关系数:
这实际上是:
信噪比 (SNR) 的函数
更精确:
4 基于相关功耗分析(CPA)的秘密推断
前面我们已经得到:
可以看到:
当噪声方差最小时,相关系数最大。
因此:
最大相关性可以用来确定参考状态 R。
一、攻击前提
假设我们有:
- 一组已知且随机变化的数据 (D)
- 一组对应的功耗测量 (W)
就像 DPA 一样。
二、枚举 R
理论上:
- R 是 m 位机器字
- 共有 (2^m) 种可能
攻击方法:
- 枚举所有可能的 R
- 计算预测汉明距离:
- 计算相关系数:
- 排序
正确的 R 会产生最大相关性。
在 8 位微控制器上
非常便宜。
在 32 位上
不可行。
但可以:
- 使用部分相关
- 使用先验信息
三、错误候选 R 会怎样?
设:
- 真正参考状态:R
- 候选参考状态:R̂
如果 R̂ 与 R 有 k 位不同:
论文给出关键公式:
这说明:
解是唯一的。
四、引入密钥
假设:
- K:秘密密钥
- M:已知明文
我们枚举 R 并做相关性测试。
会得到:
五、AES 示例
考虑 AES 第一个 AddRoundKey:
在 8 位处理器上:
- 每个字节独立
- 得到 K ⊕ R2
如果 R2 对所有字节相同:
只剩 256 种可能。
暴力一下就可以恢复整个密钥。
六、推广到其他运算
该方法不仅适用于 XOR。
也适用于:
- 加法
- 减法
- AND
- OR
- LUT
- 任何运算 f
模型:
七、攻击成功的关键
论文最后强调:
必须正确建模“完整机器字”和它相对于 R 的转换。
如果模型错误:
- 相关会减弱
- 攻击样本数暴增
八、把整个逻辑压缩成一句话
CPA 实际在做:
其中 R 也可以作为未知量。
5 估计
在实际情况下,给定一组 ( N ) 条功耗曲线 (
相关系数 ( ρ_{WH} ) 的一个估计值 ( \hat{ρ}_{WH} ) 由下式给出:
其中求和是对 ( N ) 个样本在功耗曲线 (
从理论上讲,很难计算估计量 的方差与可用样本数量 ( N ) 之间的关系。在实践中,几百次实验通常就足以得到一个可用的相关系数估计值。显然,当模型方差为 ( m/4 )(在 32 位体系结构上更高)以及存在测量噪声时,所需的样本数量 ( N ) 需要相应增加。后续结果将表明,这样的样本数量甚至已经超过进行可靠测试所需的数量。关于实验数据估计及最优性问题的进一步讨论。研究表明,当通过遍历所有可能的 ( R ) 并使 (
6 实验结果
本节旨在将泄漏模型与真实实验结果进行对比。以下给出的行为规律来源于过去几年中对多种安全芯片所进行的分析总结。
我们的第一次实验是在一个已知存在信息泄漏的 8 位芯片上实现一个简单的 XOR 算法(更适合教学演示)。指令序列如下:
- 将一个字节 D1 加载到累加器
- 用常数 D2 对 D1 进行异或运算
- 将结果从累加器存储到目标内存单元
程序执行 256 次,其中 D1 从 0 变化到 255。
如图 1 所示,观察到了两个显著的相关峰值,对应两个不同的参考状态:第一个参考状态是 D1 的地址,第二个参考状态是 XOR 指令的操作码(opcode)。
我的分析:这边翻译的很神秘,实际上就是看到功耗曲线有峰值的地方,对应进行了操作(即状态变换,存储的内容变化了,进而产生大功耗(与前文的假设和使用的技术相符)
这些曲线为泄漏机理提供了实验依据,而以往的研究只是暗示了这些现象,却未做详细分析。这些结果展示了在公共总线上发生的数据传输序列的最一般情况。
一个数据字的地址在其数值传输之前被发送,而该数值之后紧接着是下一条指令的操作码(被取指)。这种行为可以在多种芯片上观察到,即使是在 16 位或 32 位架构中也是如此。相关系数通常可以达到 60% 到 90% 以上。
图 2 给出了 32 位架构上的部分相关示例:当仅预测 32 位中的 4 位时,相关系数下降大约为 √8 的比例,这与图中显示的结果一致。
这种现象可以在多种工艺技术和实现方式中观察到。不过需要说明以下限制条件:
- 有时参考状态始终为 0。这可能源于所谓的“预充电逻辑”(pre-charged logic),即在每次数据传输之间总线被清零。另一种可能原因是复杂架构中数据总线和地址总线分离,从而阻止某些转换发生。在这些情况下,汉明重量模型可以看作更一般汉明距离模型的一个特例。
- 在存在流水线(pipeline)结构时,相关峰序列有时会变得模糊或在时间上扩散。
- 一些较新的技术实现了硬件安全机制,专门用于阻止统计功耗分析。这些对策具有不同程度的防护效果,从最简单、容易绕过的,到最有效的(几乎完全消除数据相关性)。
存在多种对策,其思想与针对 DPA 的对策完全类似:
- 一类对策通过在执行过程中引入去同步(desynchronization),使功耗曲线在同一采集集合中不再对齐。实现方式包括插入虚假周期、不稳定时钟或随机延迟等。在某些情况下,可以通过适当的信号处理对其影响进行校正。
- 另一类对策通过增加额外噪声或滤波电路来模糊功耗曲线 [19]。有时可以通过曲线选择和/或平均,或者利用其他侧信道(如电磁辐射)来绕过这些防护 。
- 数据也可以在处理过程中通过硬件(例如总线加密)或软件方式(例如使用随机掩码进行数据掩蔽 [11,7,20,10])动态加密,使处理中变量变得不可预测。在这种情况下将无法观察到相关性。理论上,更复杂的攻击(例如高阶分析 [15])可以突破数据掩蔽方法;但在实践中,通过引入去同步等措施可以较容易地防止这类攻击。
实际上,如果单独使用,这些对策都不能被认为在统计分析面前是绝对安全的。它们只是提高了攻击所需的工作量和专业水平。然而,当至少组合使用两种以上的对策时,防护效果就会非常显著,并在实践中具有威慑力。
近年来,在抗篡改设备设计中的防护技术已取得了巨大进展。如今普遍认为,安全要求不仅包括健壮的密码算法,也同样包括可靠的实现方式。
7 与 DPA 的对比
本节对本文提出的 CPA 方法与差分功耗分析(DPA)进行对比,并参考了 Messerges 等人对 Kocher 早期思想进行形式化的前人工作。
7.1 DPA 的实际问题:“幽灵峰”(Ghost Peaks)
我们现在只考虑针对 DES 第一轮 SBox 的 DPA 实际实现问题。事实上,这种著名攻击方法只有在以下假设成立时才能很好地工作:
字空间假设(Word space assumption)
在包含目标预测比特的机器字(word)中:
- 其他非目标比特对功耗的贡献与目标比特的取值无关
也就是说:
- 在预测值为 0 的曲线集合中,其他比特的平均影响与预测值为 1 的曲线集合中相同
因此攻击者无需关心这些非目标比特。
猜测空间假设(Guess space assumption)
对于任意错误的子密钥猜测:
- 预测比特的值与正确子密钥对应的预测值不相关
时间空间假设(Time space assumption)
功耗 W:除非目标比特被明确处理否则不依赖于该比特的值
我的理解:意思就是这个假设表示功耗只在这个bit被处理的时候会受到影响,实际上这个bit在后续一直会对整个进程的功耗有一定影响
但实验结果表明:
🔹 事实 A
对于正确猜测:
- 即使目标比特没有被明确处理
- 也会出现 DPA 峰值
虽然这并不完全令人尴尬,但它明显违反了第三个假设。(矛盾点见上述我的理解)
🔹 事实 B
某些错误猜测也会产生 DPA 峰值—— 这类峰被称为“幽灵峰”(ghost peaks)
这会严重干扰判断,违反第二个假设。
🔹 事实 C
真正正确猜测对应的 DPA 峰:
- 可能比某些幽灵峰更小
- 甚至可能为 0 或负值!
这对攻击者来说非常令人困惑。
原因来自第一个假设过于粗糙乐观。
7.2 “幽灵峰”的解释
通过对 SBox 结构与汉明距离模型的深入分析,可以解释这些现象,并说明 DPA 的基本假设是错误的。
🔹 对事实 A 的解释
在算法执行过程中:
- 某些被处理的数据
- 可能与目标比特部分相关
在 DES 中:
- 一个 SBox 输出的某一比特
- 至少会存活到本轮结束
- 甚至更久
当该比特和它的 3 个同组比特经历 P 置换时:
- 它们都属于同一个机器字
- 每次都会引发功耗峰值
因此即使不是“明确处理”目标比特,也会产生峰。
🔹 对事实 B 的解释(幽灵峰)
错误猜测产生峰值的原因:
- 不同子密钥猜测下
- SBox 输出比特的分布是确定性的(不是随机均匀分布)
- 因此可能部分相关
论文举例说明:
考虑 DES 第 5 个 SBox 的最左边比特:
- 输入 D 从 0 到 63
- 分别与两个不同子密钥组合:
- 0x00
- 0x36
对比:
MSB(SBox5(D ⊕ 0x00))
MSB(SBox5(D ⊕ 0x36))
两组比特流做 XOR:
结果只有 8 个不同位(共 64 位)
也就是说:
错误猜测 0x00
预测正确率 = 56/64 ≈ 87.5%
这已经非常接近正确子密钥 0x36!
因此:
- 错误猜测会产生明显 DPA 峰
- 且出现在与正确猜测相同的位置
- 形成竞争
- 尤其在高信噪比情况下更严重
🔹 对事实 C 的解释
DPA 假设:
- 机器字中其他比特
- 均匀分布
- 与目标比特独立
这是错误的。
实际实现中:
- 存在确定性的依赖关系
- 非目标比特贡献可能不对称
影响:
- 压低正确峰
- 或增强无意义峰
已知的规避技巧
一种技巧是在第一轮结束后进行预测:
- 当右半部分 32 位与 IP 输出左半部分 XOR 时
因为攻击者可选择明文:
- 可以重新引入随机性
- 缓解随机性不足
但这仍然不能解决事实 B(幽灵峰)。
模型化 CPA 的思想
为消除歧义:
必须考虑完整信息
引入“算法实现模型”概念
而 DPA 完全忽略了这一点。
SBox 压缩实现问题
在 DES 中:
- 每个 SBox 输出 4 位
- 在 8 位微处理器中
通常使用“压缩 SBox”技巧:
将两个 SBox 存在一个字节中
例如:
LUT12(k) = SBox1(k) || SBox2(k)
查表时:
一个字节包含两个 SBox 的输出
在汉明距离模型下:
功耗近似为:
由于两个 SBox 输出绑定在同一字节中:
它们的比特不再独立!
这直接推翻 DPA 的独立性假设。
实验验证
实验在真实 8 位设备上进行:
- 无 DPA 防护
- 白盒模式
- 模型参数已校准
- 参考状态 R = 0xB7
模型拟合度:
相关系数达到 97%
说明:
功耗模拟非常准确。
我的理解:白盒情况下,用已知的R和输入计算汉明距离后,将这组值和功耗计算相关系数,发现是97%
进行单比特 DPA:
- 同时在真实和模拟数据上测试
- 每组 200 条曲线
结果:
两者 DPA 偏差高度一致。
观察:
- 4 个输出比特并不等价
- 峰值正负极性取决于参考状态
- 某些比特特别“幸运”
- 偏差分布混乱
即使增加曲线数量:
排序不变。
这说明:
问题不在样本数不足
而在 DPA 假设本身错误。
7.3 基于模型的 CPA 结果
对比表明:
只需 40 条曲线
正确子密钥在相关系数排序中始终第一
且对比度明显。
这里论文是攻击子密钥,即遍历子密钥后,计算其与已知明文块的汉明距离,然后算相关系数
8 位实现结果
正确猜测相关系数约 87%~92%
错误猜测显著低。
决策无歧义。
32 位实现结果
100 条曲线
正确猜测与错误猜测之间:
前 4 个 SBox 对比度约 40%
后 4 个 SBox 较低(模型不完美)
但仍可利用。
有区分度
结论
DPA 的问题不在:
- 采样不足
- 统计估计不准
而在于:
- 基本假设错误
- 忽略实现细节
- 忽略比特间相关性
CPA:
- 基于完整泄漏模型
- 直接使用相关系数
- 结果稳定
- 排名清晰
- 无幽灵峰问题
8 总结
过去数年里,我们在大量智能卡芯片上的实验使我们确信:汉明距离模型是有效的,并且在效率、鲁棒性和所需实验次数方面,CPA 方法相比 DPA 具有明显优势。
一个重要且可靠的结论是:所有针对 DPA 设计的防护措施,对基于模型的 CPA 攻击同样具备同等防御效果。
这并不令人意外,因为这些防护措施的目标,都是破坏两类方法所共同依赖的前提条件:侧信道可观测性与中间变量可预测性。 CPA 的主要缺点在于需要对泄漏模型参数进行标定。由于比 DPA 的要求更高,该方法在实现上看似更为复杂。然而可以从以下几点予以反驳:
任何形式的统计功耗分析都不可能在完全盲目的情况下进行,都需要预先做逆向工程(流程识别、比特追踪),而这正是利用已知数据通过 CPA 量化泄漏程度的好时机。
DPA 实际上需要更多的采样曲线,因为所有未被建模的数据比特都会恶化信噪比(见文献[5])。 - 如果 DPA 因缺乏实现细节知识而失败(单纯增加曲线数量往往无济于事),我们已经证明可以在不过度增加开销的情况下推断出部分信息:例如,参考状态通常只需通过穷举搜索一次即可确定。
在很多场景下,受限于工程约束,实现方式的变体并不多(例如 DES 中的 S 盒实现)。
即使模型的一部分无法推断(如 DES 的 S 盒实现、硬件协处理器),对剩余部分做部分相关分析,通常仍能得到可利用的线索。
最后,在某些模型完全无法建立的特殊架构(例如某些硬接线协处理器)中,**DPA 仍然是适用的**。