一、汉明距离模型
-
原理:CMOS 电路中电流消耗与反转比特有关
-
假设:相同数据下同时间总线比特位相同(不考虑非同步效应)、反转比特(0 -> 1 和 1 -> 0)消耗能量相同、消耗能量与汉明距离间存在线性关系
-
汉明距离形式: \(H(D\oplus R)\) 其中 H() 表示汉明重量,R 和 D 表示总线前后状态
均值为 m / 2,方差为 m / 4,其中 m 为总线位数
-
总能量消耗公式
\(W=aH(D\oplus R)+b\) (1)
其中 a 为线性增益(斜率),b 为测量偏差、噪声等因素
二、线性相关系数
-
方差:由(1)式 \(σ_W^2=a^2σ_H^2+σ_b^2\)
-
汉明距离与消耗能量的相关系数
\(ρ_{WH}=\frac{cov(W,H)}{σ_Wσ_H}=\frac{aσ_H}{σ_W}=\frac{aσ_H}{\sqrt{a^2σ_H^2+σ_b^2}}=\frac{a\sqrt{m}}{\sqrt{ma^2+4σ_b^2}}\)(2)
由(2)式当噪声方差接近 0 时相关系数将趋于 1
-
将模型应用于总线 m 位中的 l 位时,相关系数修改为
\(ρ_{WH_{l/m}}=\frac{cov(W,H_{l/m})}{σ_Wσ_{H_{l/m}}}=\frac{aσ_H}{σ_W}\frac{cov(H,H_{l/m})}{σ_Hσ_{H_{l/m}}}=ρ_{WH}\frac{\frac{l}{m}σ_H}{σ_{H_{l/m}}}\)
将 \(σ(H)=\frac{\sqrt{m}}{2}\) 和 \(σ(H_{l/m})=\frac{\sqrt{l}}{2}\) 代入得
\(ρ_{WH_{l/m}}=ρ_{WH}\sqrt{\frac{l}{m}}\) (3)
三、基于 CPA 的推理
-
总线值预测错误时的相关系数计算
假设 R 为正确的参考状态,则 \(H(D\oplus R)\) 为对汉明距离的正确估计;R' 为对参考状态的假设,则 \(H’=H(D\oplus R')\)
假设 R 与 R' 有 k 位不同,则相关系数 \(ρ_{WH'}\) 计算如下
\(H=H_{m-k}+H_k\)
\(H'=H_{m-k}'+H'_k=H_{m-k}-H_k+k\)
\(cov(H,H')=<(H_{m-k}+H_k)(H_{m-k}-H_k)>-<H_{m-k}+H_k><H_{m-k}-H_k>=<H_{m-k}^2>-<H_k^2>-<H_{m-k}>^2+<H_k>^2\)
将 \(H_k=\frac{k}{2}\),\(H_{m-k}=\frac{m-k}{2}\),\(H_k^2=σ_{H_k}^2+<H_k>^2=\frac{k}{4}+\frac{k^2}{4}\) 和 \(H_{k-m}^2=σ_{H_{m-k}}^2+<H_{k-m}>^2=\frac{m-k}{4}+\frac{(m-k)^2}{4}\) 代入得
\(cov(H,H')=\frac{m-2k}{4}\)
故 \(ρ_{HH'}=\frac{cov(H,H')}{σ_Hσ_{H'}}\frac{m-2k}{m}\)
\(ρ_{WH'}=\frac{cov(W,H')}{σ_Wσ_{H'}}=\frac{aσ_H}{σ_W}\frac{cov(H,H')}{σ_Hσ_{H'}}=ρ_{WH}ρ_{HH'}=ρ_{WH}\frac{m-2k}{m}\)(4)
-
相关系数应用
判断预测总线值是否正确,由(4)式当 \(ρ_{WH'}\) 取最大值时表明 \(R=R'\),即对初始总线值(参考状态)的猜测正确
对于已知的 D 遍历所有的 R 并对每个 R 测出能量和汉明重量的相关系数,最大的即为正确 R 值
-
应用扩展:对于密码学中常用的其它操作,如算数、逻辑运算以及查找表可以将 H() 函数修改为 \(H(LUT(M*K)\oplus R)\),其中 * 表示 \(\oplus,+,-,OR,AND\) 或其它操作
四、对相关系数的估计
对 N 个任意明文 \(M_i\) 收集 N 个能量迹 \(W_i\),对于每个 R 的备选值,计算 \(H_{i,R}\) 并求得相关系数关于时间的曲线
\(\hat{\rho}_{WH}(R)=\frac{N\sum{W_i H_{i,R}}-\sum W_i\sum H_{i,R}}{\sqrt{N\sum W_i^2-(\sum W_i)^2}\sqrt{N\sum H_{i,R}^2-(\sum H_{i,R})^2}}\)(5)
五、实验结果
-
实验过程:在一个 8 位芯片上测试异或算法
- 加载一个字节 \(D_1\) 到累加器
- 对 \(D_1\) 和常量 \(D_2\) 进行异或
- 将结果从累加器存储到目标存储单元
对上述程序执行 256 次,每次选用不同的 \(D_1\) 值(0-255)作为明文 \(M_i\),测定消耗能量 W 并计算 H 值,画出相关系数关于时间的曲线
-
在相关性强的位置参考状态分别为 \(D_1\) 地址和 XOR 指令 OpCode
-
在 32 位芯片上预测 32 位参考状态和只预测 4 位参考状态的相关系数比接近 \(\sqrt8\),如(2)式所示