跳转至
密码分析学 Part 15 of 16

侧信道分析概述

传统分析通常只观察明文、密文与规定的接口输出。真实设备还会产生执行时间、电流、电磁辐射和缓存访问等额外信息,这些信息可能依赖秘密中间状态。

发布于 2,239 字 · 约 6 分钟

侧信道分析原理

侧信道分析利用实现过程中的泄露恢复信息。它不要求证明底层数学算法存在差分或代数弱点。

设第 \(i\) 次运算的公开输入为 \(P_i\),某个中间值为

\[ V_i=g(P_i,K), \]

观测轨迹为 \(L_i(t)\)。常用的简化模型是

\[ L_i(t)=\alpha_t h(V_i)+\beta_t+N_i(t), \]

其中 \(h\) 为泄露模型,\(N_i\) 包含测量噪声与其他活动。分析的任务是找出哪些密钥猜测产生的 \(h(g(P_i,k))\) 与轨迹最一致。

模型只是近似,不是所有芯片都泄露相同的中间值。本文的采集与验证讨论以自有或获授权的实验设备为前提。

时间攻击

若程序的执行路径或访存行为依赖秘密值,不同输入的运行时间就可能泄露秘密信息。

例如平方—乘法计算 \(x^d\bmod N\),每个指数比特都执行一次平方,而比特为 1 时额外执行一次乘法。若能分别识别这些操作,就能获得指数模式;若只能观察总时间,则通常需要结合大量输入、模乘与约减的细节建立统计关系。

因此,“执行时间与指数有关”不等于“一次测量就能恢复每一位”。总时间、单次操作轨迹和缓存事件提供的信息粒度不同。

另一个简单例子是标签比较:若遇到首个不同字节就返回,比较时间可能依赖共同前缀长度。网络噪声不会自动消除此类泄露,只可能提高采样成本。

常数时间实现要求秘密不影响可观察的控制流与内存访问等行为,不只是让源代码循环次数相同。编译器优化、缓存和大整数库内部路径也要纳入检查。

功耗分析

数字电路切换状态时消耗能量,功耗与寄存器或总线上的数据可能相关。两个常用模型为:

Hamming 重量模型:

\[ h(V)=\operatorname{HW}(V)=\sum_j V_j. \]

Hamming 距离模型:

\[ h(V_{\mathrm{old}},V_{\mathrm{new}}) =\operatorname{HW}(V_{\mathrm{old}}\oplus V_{\mathrm{new}}). \]

后者描述翻转比特数。如果实际泄露主要来自寄存器更新,却仅用新值的重量建模,相关性可能很弱。

以 AES 第一轮某个字节为例,常选择

\[ V_i(k)=S(P_i[j]\oplus k) \]

作为预测中间值,只需枚举一个字节的 256 个候选。最后还要把各字节候选组合,并验证完整密钥。

功耗泄露采集方法

典型实验需要保存每次运算的公开输入、输出和对应轨迹,保证三者一一对应。常见采集方式是观察供电路径的电压变化,或使用电磁探头测量局部泄露。

实际步骤包括:

1) 明确设备、固件版本、时钟和采样率,选择稳定触发点。

2) 采集不同公开输入下的多条轨迹,排查饱和、丢样、数据错配。

3) 对齐相关操作区间,必要时去基线或滤波。

4) 划分建模、参数选择和最终评估数据,避免在测试轨迹上调参。

对齐不良会把同一操作分散到不同时间点,显著降低统计量。过度滤波也可能删除真正的泄露,因此预处理应在独立数据上验证。

数据复杂度通常以轨迹条数计;存储还与每条轨迹的采样点数、采样精度有关。不能只报告“用了几千条”而不说明每条多长。

简单功耗攻击

简单功耗分析(SPA)直接观察一条或少量轨迹的操作模式,例如区分平方与乘法、查表与非查表路径。

其成立条件是不同操作在轨迹上可区分,而且操作顺序依赖秘密。若泄露主要与数据值相关,而操作序列固定,SPA 可能失效,但这不代表差分或相关分析也失效。

反过来,若一条轨迹已清楚暴露秘密相关分支,也没有必要先建立复杂的统计模型。

差分功耗分析

差分功耗分析(DPA)根据候选密钥预测某个中间比特

\[ b_i(k)=\operatorname{bit}_j(g(P_i,k)), \]

把轨迹分成两组,计算均值差

\[ \Delta_k(t) =\frac1{N_1}\sum_{i:b_i(k)=1}L_i(t) -\frac1{N_0}\sum_{i:b_i(k)=0}L_i(t). \]

若猜测正确且该比特影响功耗,在对应操作时间附近可能出现明显差异;错误猜测通常不能正确分组,差异被平均掉。

应检查两组样本量是否足够,避免极小分组制造不稳定峰值。不同候选的预测还可能相关,形成“幽灵峰”,所以单个最大峰值不是充分证据。

这里的“差分”是两组轨迹统计量之差,与分组密码差分分析中的输入输出异或差分不是同一个概念。

相关功耗分析

相关功耗分析(CPA)利用整个预测泄露值,而不是只分一个比特。设

\[ H_i(k)=\operatorname{HW}(g(P_i,k)). \]

对每个候选及采样点计算 Pearson 相关系数

\[ \rho_k(t)= \frac{\sum_i(H_i(k)-\overline H_k)(L_i(t)-\overline L(t))} {\sqrt{\sum_i(H_i(k)-\overline H_k)^2} \sqrt{\sum_i(L_i(t)-\overline L(t))^2}}. \]

常用 \(\max_t|\rho_k(t)|\) 给候选排序。绝对值允许泄露与模型负相关;如果某一列方差为零,相关系数没有定义,不能直接除以零。

怎样判断结果可信

  • 观察真实密钥的排名是否随轨迹数增加而稳定改善。
  • 在独立轨迹上复现,而非只在调参集上看峰值。
  • 报告猜测熵或成功率,而不只报告一张漂亮的相关曲线。
  • 最后用完整加解密测试验证密钥。

枚举大量候选与采样点会产生多重比较效应,即使纯噪声也会出现较大的偶然峰。采样点越多,并不一定意味着证据越强。

模板攻击

模板攻击分为建模与目标分析两个阶段。攻击者先在可控制密钥、与目标泄露特性相近的设备上学习条件分布,再用于未知密钥设备。

设选出的 \(d\) 个兴趣点组成向量 \(\ell\),对中间值类别 \(v\) 近似建模为

\[ \ell\mid v\sim\mathcal N(\mu_v,\Sigma_v). \]

对目标轨迹,候选密钥的对数似然评分为

\[ \operatorname{Score}(k) =\sum_i\log p(\ell_i\mid g(P_i,k)). \]

高斯模型下,忽略与候选无关的常数,每项为

\[ -\frac12\log\det\Sigma_v -\frac12(\ell_i-\mu_v)^{\mathsf T} \Sigma_v^{-1}(\ell_i-\mu_v). \]

它利用了多个点的均值与协方差,比单点重量模型更灵活,但并不保证一定优于 CPA。训练数据不足、设备差异或环境漂移都可能使模板失效。

若兴趣点太多,协方差矩阵可能奇异或估计不稳定,需要降维、共享协方差或正则化。类别先验、训练集规模和兴趣点选择方法都应记录。

防护的边界

掩码把敏感值拆成随机份额。例如 \(V=V_0\oplus V_1\),单独观察任一均匀份额不直接得到 \(V\);但联合泄露、毛刺、随机数复用可能破坏这一性质,需要考虑高阶攻击。

隐藏通过噪声、随机延时、打乱操作等降低可观察性,通常增加分析成本,而不是证明泄露消失。常数时间、掩码、硬件设计与泄露评估往往需要组合使用。

统计泄露检测发现显著差异,不一定已经给出密钥恢复攻击;没有检测到显著差异,也不等于实现已被证明无泄露。

本章总结

侧信道把攻击对象从数学算法扩展到物理实现。SPA 利用操作模式,DPA 比较分组均值,CPA 比较预测泄露的相关性,模板攻击学习条件分布。

完整结论需要同时说明设备、观测能力、泄露模型、轨迹数量、密钥排名与独立验证。算法安全与实现安全必须分别讨论。

参考:王美琴主编,《密码分析学》,第 15 章。

完

评论

查看图表
本文目录