高效模板攻击:方法与评估
1. 引言
侧信道攻击是推断防篡改硬件内处理的秘密算法或数据(如密码、加密密钥等)的强大工具。攻击者可通过监测设备的侧信道信息,如电源电流和无意的电磁辐射来实施攻击。模板攻击是评估侧信道信息的强大技术之一,它基于侧信道迹线的多元模型。虽然基本算法相对简单,但在实际高效实现中会遇到一些问题。本文将探讨这些问题,并提出解决方案,同时通过实验评估不同方法的效率,为选择模板攻击算法提供实用指导。
2. 模板攻击
要实施模板攻击,需要物理访问一对相同的设备,分别称为分析设备和被攻击设备。目标是推断被攻击设备在某一时刻处理的秘密值 (k_{\sigma})。对于 8 位微控制器,(S = {0, \ldots, 255}) 可能是特定机器指令操作的可能字节值集合。
在分析阶段,为每个可能的值 (k \in S) 从分析设备记录 (n_p) 个泄漏向量 (x_{r_{ki}} \in \mathbb{R}^{m_r}),并将它们组合成泄漏矩阵 (X_{r_{k}} \in \mathbb{R}^{n_p \times m_r})。由于数据采集设备提供的原始泄漏向量通常包含大量样本,因此在进一步处理之前可能需要进行压缩。压缩后的泄漏向量记为 (x_{ki} \in \mathbb{R}^{m}),并组合成压缩泄漏矩阵 (X_{k} \in \mathbb{R}^{n_p \times m})。
使用 (X_{k}) 可以计算每个可能值 (k) 的模板参数 (\overline{x} {k} \in \mathbb{R}^{m}) 和 (S {k} \in \mathbb{R}^{m \times m}):
(\overline{x} {k} = \frac{1}{n_p} \sum {i = 1}^{n_p} x_{ki})
(S_{k} = \frac{1}{n_p - 1} \sum_{i = 1}^{n_p} (x_{ki} - \overline{x} {k})(x {ki} - \overline{x}_{k})^T)
侧信道泄漏迹线通常可以用多元正态分布很好地建模。在这种情况下,样本均值 (\overline{x} {k}) 和样本协方差 (S {k}) 是充分统计量,完全定义了基础分布。给定 (\overline{x} {k}) 和 (S {k}),泄漏向量 (x) 的概率密度函数为:
(f(x | \overline{x} {k}, S {k}) = \frac{1}{\sqrt{(2\pi)^{m}|S_{k}|}} \exp\left(-\frac{1}{2}(x - \overline{x} {k})^T S {k}^{-1} (x - \overline{x}_{k})\right))
在攻击阶段,从被攻击设备获取 (n_a) 个泄漏向量 (x_{i} \in \mathbb{R}^{m}),形成泄漏矩阵 (X_{k^{\star}} \in \mathbb{R}^{n_a \times m})。对于每个 (k \in S),计算判别分数 (d(k | X_{k^{\star}})),然后按分数降序尝试所有 (k),直到找到正确的 (k_{\sigma})。常用的判别式为:
(d(k | x_{i}) = f(x_{i} | \overline{x} {k}, S {k})P(k))
假设先验概率均匀 (P(k) = |S|^{-1}),应用贝叶斯规则相当于计算似然:
(l(k | x_{i}) = d(k | x_{i}) = l(\overline{x} {k}, S {k} | x_{i}) = f(x_{i} | \overline{x} {k}, S {k}))
3. 高效实现模板攻击
为了高效实现模板攻击,需要解决一些问题,下面介绍几种方法。
3.1 使用多元正态分布的对数
Mangard 等人建议计算 (3) 的对数:
(\log f(x | \overline{x} {k}, S {k}) = -\frac{1}{2} \left[\log [(2\pi)^{m}|S_{k}|] + (x - \overline{x} {k})^T S {k}^{-1} (x - \overline{x}_{k})\right])
但该方法存在问题,它没有避免计算 (|S_{k}|)。因此,建议计算多元正态概率密度函数的对数为:
(\log f(x | \overline{x} {k}, S {k}) = -\frac{m}{2} \log 2\pi - \frac{1}{2} \log |S_{k}| - \frac{1}{2}(x - \overline{x} {k})^T S {k}^{-1} (x - \overline{x}_{k}))
其中,使用对称矩阵 (S_{k}) 的 Cholesky 分解 (S_{k} = C^T C) 计算行列式的对数:
(\log |S_{k}| = 2 \sum_{c_{ii} \in \text{diag}(C)} \log c_{ii})
选择导致 (17, 18) “最小绝对值” 的候选 (k) 是不正确的,因为对数是单调函数,最大值对应正确的 (k)。可以使用 (18, 19),去掉第一项(对所有 (k) 为常数),计算基于对数似然的判别分数:
(d_{\text{LOG}}(k | x_{i}) = -\frac{1}{2} \log |S_{k}| - \frac{1}{2}(x_{i} - \overline{x} {k})^T S {k}^{-1} (x_{i} - \overline{x}_{k}))
3.2 使用合并协方差矩阵
当不同候选 (k) 的泄漏具有不同均值但相同协方差 (\Sigma = \Sigma_{1} = \Sigma_{2} = \cdots = \Sigma_{k}) 时,可以将协方差估计 (S_{k}) 合并为合并协方差矩阵:
(S_{\text{pooled}} = \frac{1}{|S|(n_p - 1)} \sum_{k \in S} \sum_{i = 1}^{n_p} (x_{ki} - \overline{x} {k})(x {ki} - \overline{x}_{k})^T)
(S_{\text{pooled}}) 比 (S_{k}) 是更好的真实协方差 (\Sigma) 的估计器,因为它使用 (n_p|S|) 条迹线估计协方差,而 (S_{k}) 仅使用 (n_p) 条。这意味着非奇异矩阵的条件放宽为 (n_p|S| > m) 或 (n_p > \frac{m}{|S|}),减少了每个候选 (k) 所需的迹线数量。
使用 (S_{\text{pooled}}),可以丢弃 (18) 中的前两项,使用广义统计距离(Mahalanobis 距离)比较候选 (k):
(d_{M}^{2}(x | \overline{x} {k}, S {\text{pooled}}) = (x - \overline{x} {k})^T S {\text{pooled}}^{-1} (x - \overline{x}_{k}) \geq 0)
从 (18, 22) 可以导出判别分数:
(d_{\text{MD}}(k | x_{i}) = -\frac{1}{2}d_{M}^{2}(x_{i} | \overline{x} {k}, S {\text{pooled}}) = d_{\text{LOG}}(k | x_{i}) + \text{const.})
3.3 线性判别分数
使用合并协方差矩阵 (S_{\text{pooled}}) 时,可以将 (22) 重写为:
(d_{M}^{2}(x | \overline{x} {k}, S {\text{pooled}}) = x^T S_{\text{pooled}}^{-1} x - 2\overline{x} {k}^T S {\text{pooled}}^{-1} x + \overline{x} {k}^T S {\text{pooled}}^{-1} \overline{x}_{k})
第一项对所有组 (k) 是常数,可以丢弃。因此,可以使用以下线性判别分数:
(d_{\text{LINEAR}}(k | x_{i}) = \overline{x} {k}^T S {\text{pooled}}^{-1} x_{i} - \frac{1}{2} \overline{x} {k}^T S {\text{pooled}}^{-1} \overline{x} {k} = d {\text{MD}}(k | x_{i}) + \text{const.})
线性判别 (d_{\text{LINEAR}}) 比二次判别 (d_{\text{MD}}) 计算效率更高。
3.4 组合多个攻击迹线
需要将 (X_{k^{\star}}) 中的 (n_a) 个单独泄漏迹线 (x_{i}) 组合成最终判别分数 (d(k | X_{k^{\star}})),有两种选择:
- 选项 1 :平均 (X_{k^{\star}}) 中的所有迹线以去除尽可能多的噪声,然后使用这个单一平均迹线 (\overline{x} {k^{\star}}) 计算:
(d {\text{avg}}(k | X_{k^{\star}}) = d(k | \overline{x} {k^{\star}}))
该选项计算速度快,但没有使用所有可用攻击迹线的信息。
- 选项 2 :计算联合似然 (l(k | X {k^{\star}}) = \prod_{x_{i} \in X_{k^{\star}}} l(k | x_{i}))。对两边取对数得到:
(\log l(k | X_{k^{\star}}) = \sum_{x_{i} \in X_{k^{\star}}} \log l(k | x_{i}))
并得到派生分数:
(d_{\text{joint}}^{\text{LOG}}(k | X_{k^{\star}}) = -\frac{n_a}{2} \log |S_{k}| - \frac{1}{2} \sum_{x_{i} \in X_{k^{\star}}} (x_{i} - \overline{x} {k})^T S {k}^{-1} (x_{i} - \overline{x} {k}))
(d {\text{joint}}^{\text{MD}} (k | X_{k^{\star}}) = -\frac{1}{2} \sum_{x_{i} \in X_{k^{\star}}} (x_{i} - \overline{x} {k})^T S {k}^{-1} (x_{i} - \overline{x} {k}))
(d {\text{joint}}^{\text{LINEAR}}(k | X_{k^{\star}}) = \overline{x} {k}^T S {\text{pooled}}^{-1} \left(\sum_{x_{i} \in X_{k^{\star}}} x_{i}\right) - \frac{n_a}{2} \overline{x} {k}^T S {\text{pooled}}^{-1} \overline{x}_{k})
给定 (n_a) 个泄漏迹线 (x_{i} \in X_{k^{\star}}),(d_{\text{LOG}}) 和 (d_{\text{MD}}) 需要 (O(n_a m^2)) 时间,而 (d_{\text{LINEAR}}) 只需要 (O(n_a + m^2)) 时间。
3.5 不等先验概率
在前面的描述中假设候选 (k) 之间的先验概率相等。当不相等时,只需在判别分数 (d_{\text{avg}}^{\text{LOG}}),(d_{\text{avg}}^{\text{MD}}),(d_{\text{avg}}^{\text{LINEAR}}) 中添加项 (\log P(k)),或在判别分数 (d_{\text{joint}}^{\text{LOG}}),(d_{\text{joint}}^{\text{MD}}),(d_{\text{joint}}^{\text{LINEAR}}) 中添加项 (n_a \log P(k))。
4. 压缩方法
为了减少处理的样本数量,使用了多种压缩方法,如下表所示:
| 名称 | 描述 | (m) |
| — | — | — |
| DOM 1ppc | DOM,每个时钟最多 1 个样本 | 6 - 10 |
| DOM 3ppc | DOM,每个时钟最多 3 个样本 | 18 - 30 |
| DOM 20ppc | DOM,每个时钟最多 20 个样本 | 75 - 79 |
| DOM allap | DOM,所有高于 (F(t)) 第 95 百分位的样本 | 125 |
| PCA | 固定选择主成分数量 | 4 |
| LDA | 固定选择系数数量 | 4 |
5. 实验设置
实验目标是 8 位 CPU Atmel XMEGA 256 A3U 微控制器,通过 10 Ω 电阻监测所有 CPU 接地引脚的总电流。使用电池通过 3.3 V 稳压器供电,并提供 1 MHz 正弦时钟。使用 Tektronix TDS 7054 8 位示波器和 P6243 有源探头,采样率为 250 MS/s,带宽为 500 MHz。
对于每个候选值 (k \in {0, \ldots, 255}) 记录 3072 条迹线,分为训练集和评估集。每条迹线包含 (m_r = 2500) 个样本,目标是确定模板攻击恢复第二条 LOAD 指令处理的字节 (k) 的成功率。
6. 猜测熵
使用猜测熵作为比较所有方法的唯一衡量标准。它估计在模板攻击后进行优化搜索以找到具有最高判别分数的正确 (k_{\sigma}) 的(对数)成本,给出目标值 (k_{\sigma}) 剩余的预期不确定位数。猜测熵越低,攻击越成功。
计算猜测熵的步骤如下:
1. 为每个候选值 (k) 和目标值 (k_{\sigma}) 的组合计算分数 (d(k | X_{k^{\star}})),得到分数矩阵 (M \in \mathbb{R}^{|S| \times |S|}),其中 (M(k_{\sigma}, k) = d(k | X_{k^{\star}}))。
2. 对 (M) 的每一行按降序排序,得到深度矩阵 (D \in \mathbb{N}^{|S| \times |S|}),其中 (D(k_{\sigma}, k)) 是 (d(k | X_{k^{\star}})) 在 (M(k_{\sigma}, \cdot)) 排序行中的位置。
3. 使用矩阵 (D) 定义猜测熵:
(g = \log_2 \frac{1}{|S|} \sum_{k \in S} D(k, k))
7. 实验结果和实用指导
每个攻击对 (n_a),(k) 和 (k_{\sigma}) 的每个组合进行 10 次,使用不同的随机选择的 (X_{k^{\star}})。绘制平均猜测熵,结果高度可重复,所有实验的标准差约为 0.1 位。
根据实验结果,提供以下选择算法的实用指导:
1. 当 (n_a > 1) 时,优先使用选项 2((d_{\text{joint}}))组合攻击迹线的判别分数。对于 (n_a = 1) 或使用 (S_{\text{pooled}}) 时,两个选项等效。随着攻击迹线数量 (n_a) 增加和协方差矩阵估计更好,(d_{\text{joint}}) 在所有压缩方法上都优于 (d_{\text{avg}})。
2. 尝试使用合并协方差矩阵 (S_{\text{pooled}}) 和 (d_{\text{LINEAR}})(除非个体估计 (S_{k}) 之间的差异非常明显)。未能通过同方差性统计检验(如 Box 检验)并不意味着使用个体估计 (S_{k}) 会改善模板攻击。使用个体估计 (S_{k}) 会阻止使用更快更稳健的判别式 (d_{\text{LINEAR}})。
- 如果目标允许获取大量迹线((n_a > 100)):尝试 PCA、LDA 和大样本选择的压缩方法。
综上所述,PCA 和 LDA 总体上提供了最佳结果,并且之前每个时钟周期最多选择一个点的准则通常不是最优的。通过这些实验和理论背景,可以为模板攻击算法的选择提供实用指导。
graph TD
A[开始] --> B[分析阶段]
B --> C[记录泄漏向量]
C --> D[压缩泄漏向量]
D --> E[计算模板参数]
E --> F[攻击阶段]
F --> G[获取攻击泄漏向量]
G --> H[计算判别分数]
H --> I[按分数排序尝试候选值]
I --> J[找到正确kσ]
J --> K[结束]
高效模板攻击:方法与评估
8. 不同压缩方法与实现选项的综合对比
为了更清晰地了解各种压缩方法和实现选项在模板攻击中的表现,下面将从多个维度进行综合对比。
| 压缩方法 | 样本数量 (m) | 实现选项 | 计算复杂度 | 信息提取能力 | 适用场景 |
|---|---|---|---|---|---|
| DOM 1ppc | 6 - 10 | (d_{\text{avg}}) | 低 | 弱 | 资源受限,对信息精度要求不高 |
| DOM 1ppc | 6 - 10 | (d_{\text{joint}}) | 相对低 | 一般 | 资源有限,需一定信息提取 |
| DOM 3ppc | 18 - 30 | (d_{\text{avg}}) | 适中 | 一般 | 资源适中,对信息有一定要求 |
| DOM 3ppc | 18 - 30 | (d_{\text{joint}}) | 适中 | 较好 | 资源适中,追求较好信息提取 |
| DOM 20ppc | 75 - 79 | (d_{\text{avg}}) | 较高 | 较好 | 资源较充足,需较多信息 |
| DOM 20ppc | 75 - 79 | (d_{\text{joint}}) | 较高 | 好 | 资源较充足,追求高信息提取 |
| DOM allap | 125 | (d_{\text{avg}}) | 高 | 好 | 资源充足,需大量信息 |
| DOM allap | 125 | (d_{\text{joint}}) | 高 | 优 | 资源充足,追求最优信息提取 |
| PCA | 4 | (d_{\text{avg}}) | 低 | 一般 | 资源受限,需快速处理 |
| PCA | 4 | (d_{\text{joint}}) | 低 | 较好 | 资源有限,追求一定信息提取 |
| LDA | 4 | (d_{\text{avg}}) | 低 | 一般 | 资源受限,需快速处理 |
| LDA | 4 | (d_{\text{joint}}) | 低 | 较好 | 资源有限,追求一定信息提取 |
从表格中可以看出,不同的压缩方法和实现选项组合在计算复杂度、信息提取能力和适用场景上有明显差异。例如,DOM allap 结合 (d_{\text{joint}}) 虽然计算复杂度高,但信息提取能力最优,适用于资源充足且对信息精度要求极高的场景;而 PCA 和 LDA 结合 (d_{\text{avg}}) 计算复杂度低,但信息提取能力一般,适合资源受限且对处理速度要求较高的情况。
9. 模板攻击流程优化建议
为了进一步提高模板攻击的效率和成功率,可以按照以下流程进行优化:
graph LR
A[确定目标设备和攻击场景] --> B[选择合适的压缩方法]
B --> C{是否可获取大量迹线}
C -- 是 --> D[尝试PCA、LDA和大样本选择]
C -- 否 --> E[根据资源和信息需求选择其他方法]
D --> F[使用合并协方差矩阵 \(S_{\text{pooled}}\) 和 \(d_{\text{LINEAR}}\)]
E --> G{ \(n_a\) 是否大于1}
G -- 是 --> H[使用 \(d_{\text{joint}}\) 组合判别分数]
G -- 否 --> I[使用 \(d_{\text{avg}}\) 组合判别分数]
F --> J[进行攻击并计算猜测熵]
H --> J
I --> J
J --> K{猜测熵是否满足要求}
K -- 是 --> L[结束攻击]
K -- 否 --> B[重新选择压缩方法或调整参数]
具体操作步骤如下:
1. 确定目标设备和攻击场景 :明确攻击的目标设备类型、是否有侧信道防护措施以及可获取的资源等信息。
2. 选择合适的压缩方法 :根据目标设备的特性和可获取的样本数量,从 DOM 系列、PCA 和 LDA 等方法中选择合适的压缩方法。
3. 判断是否可获取大量迹线 :如果可以获取大量迹线((n_a > 100)),优先尝试 PCA、LDA 和大样本选择的压缩方法,并使用合并协方差矩阵 (S_{\text{pooled}}) 和 (d_{\text{LINEAR}}) 进行计算。
4. 判断 (n_a) 的大小 :如果 (n_a > 1),使用 (d_{\text{joint}}) 组合判别分数;如果 (n_a = 1),使用 (d_{\text{avg}}) 组合判别分数。
5. 进行攻击并计算猜测熵 :按照选定的方法进行攻击,并计算猜测熵来评估攻击效果。
6. 判断猜测熵是否满足要求 :如果猜测熵满足要求,结束攻击;如果不满足要求,重新选择压缩方法或调整参数,重复上述步骤。
10. 总结与展望
通过对多种模板攻击方法的研究和实验评估,我们发现 PCA 和 LDA 在大多数情况下能够提供较好的攻击效果,同时合并协方差矩阵和线性判别分数的使用可以显著提高计算效率。在实际应用中,应根据具体的攻击场景和资源限制,选择合适的压缩方法和实现选项。
未来,随着硬件技术的不断发展和侧信道防护措施的不断加强,模板攻击面临着新的挑战。一方面,需要进一步研究更高效的压缩方法和判别分数计算方式,以应对更高维度和更复杂的数据;另一方面,需要探索新的攻击策略,结合机器学习和深度学习等技术,提高攻击的成功率和效率。同时,对于侧信道防护技术的研究也至关重要,只有不断加强防护,才能保障硬件设备的安全性。
总之,模板攻击是一个充满挑战和机遇的研究领域,通过不断的探索和创新,我们有望在侧信道安全领域取得更大的突破。
超级会员免费看

873

被折叠的 条评论
为什么被折叠?



