一、对于 AES 算法的 DPA 攻击准则(无防护措施下的 AES 实现)
(1) 在第 3 轮列混淆前任意中间值可以用于一阶 DPA 攻击,该攻击将明文的 0, 3 或 15 比特固定
(2) 在第 7 轮轮密钥加后任意中间值可以用于一阶 DPA 攻击,该攻击将密文的 0, 3 或 15 比特固定
(3) 在第 3 轮字节替换前任意两个中间值可以用于二阶 DPA 攻击,该攻击将明文的0, 1, 2, 3, 4, 7 ,11 或 15 比特固定
(4) 在第 8 轮字节替换后任意两个中间值可以用于二阶 DPA 攻击,该攻击将密文的0, 2, 3, 4, 7 或 15 比特固定
(5) 在第 2 轮列混淆前及第 8 轮列混淆后任意两个中间值可以用于二阶 DPA 攻击,该攻击将明文的0, 3 或 4 比特固定并将密文的0, 4 或 3 比特固定
二、对五条准则的解释
1 解释准则 (1) 和 (2)
1.1 攻击第 8 轮轮密钥加操作
-
指定 v 为第 8 轮轮密钥加操作前的 1 个中间字节,则它的值取决于 9 个密钥字节(其中 1 个来自 \(K_8\),4 个来自 \(K_9\),其余 4 个来自 \(K_{10}\))
-
在第 8 轮轮密钥加和第 9 轮字节替换过程 \(v=k_0\oplus S^{-1}(u)\),其中 \(k_0\) 来自 \(K_8\),u 为第 9 轮 S 盒输出
-
在第 9 轮行移位不影响中间字节的值,而列混淆过程中 \(u=m_0'*u_0\oplus m_1'*u_1\oplus m_2'*u_3\oplus m_3'*u_3\),其中 \(m_i'\) 为 MC 逆矩阵的对应字节,\(u_i\) 为 u 所在列经过列混淆后的对应字节
-
在第 9 轮轮密钥加和第 10 轮过程
\(u_0=S^{-1}(c_0\oplus k_5)\oplus k_1\)
\(u_1=S^{-1}(c_1\oplus k_6)\oplus k_2\)
\(u_2=S^{-1}(c_2\oplus k_7)\oplus k_3\)
\(u_3=S^{-1}(c_3\oplus k_8)\oplus k_4\)
其中 \(k_i\)(i <= 4) 为第 9 轮轮密钥对应字节,\(k_j\)(j > 4) 为第 10 轮轮密钥对应字节
-
令 \(\theta=m_0'*k_1\oplus m_1'*u_1\oplus m_2'*u_2\oplus m_3'*u_3\)
则 \(v=k_0\oplus S^{-1}(m_0'*S^{-1}(c_0\oplus k_5)\oplus \theta)\)
注意到 \(\theta\) 只与三个密文字节即 \((c_1,c_2,c_3)\),当以上密文字节固定时,\(\theta\) 为定值
-
通过猜测 \(k_5\) 和 \(\theta\) 的值即可进行一阶 DPA 攻击(\(k_0\) 只影响尖峰的正负)
1.2 攻击第 3 轮字节替换操作
- 指定 v 为第 3 轮字节替换操作后的 1 个中间字节,则它的值取决于 9 个密钥字节(其中 1 个来自 \(K_8\),4 个来自 \(K_9\),其余 4 个来自 \(K_{10}\))
- \(v=S(m_0*S(m_1*S(p_0\oplus k_0)\oplus \theta)\oplus \delta)\),其中 \(\theta\) 是 3 个明文字节和 4 个密钥字节的函数, \(\delta\) 是 12 个明文字节和 13 个密钥字节的函数
- 固定 \(p_0\) 外的 15 个明文字节,则 \(\theta\) 和 \(\delta\) 都可以确定,通过猜测 \(k_0\), \(\theta\) 和 \(\delta\) 的值可以进行一阶 DPA 攻击
2 解释准则 (3) 和 (4)
2.1 攻击第 2 轮字节替换操作
-
指定 v 为第 2 轮某个 S 盒输出,u 为该 S 盒的输入,即 v = S(u)
-
第 1 轮列混淆和轮密钥加操作过程中 \(u=k_0\oplus m_0*u_0\oplus m_1*u_1\oplus m_2*u_3\oplus m_3*u_3\)
其中 \(k_0\) 为第 1 轮轮密钥对应字节,\(m_i\) 为 MC 矩阵的对应字节,\(u_i\) 为 u 所在列经过列混淆前的对应字节
-
\(u_0,u_1,u_2,u_3\) 是由 4 个明文字节和 \(K_0\) 中 4 个字节求出的,分别表示为 \((p_0,p_1,p_2,p_3)\) 和 \((k_1,k_2,k_3,k_4)\)
\(u_0=S(p_0\oplus k_1)\)
\(u_1=S(p_1\oplus k_2)\)
\(u_2=S(p_2\oplus k_3)\)
\(u_3=S(p_3\oplus k_4)\)
-
令 \(\theta=k_0\oplus m_1*u_1\oplus m_2*u_3\oplus m_3*u_3\),则 \(v=S(m_0*S(p_0\oplus k_1)\oplus \theta)\)
-
对于另一个中间值 \(\omega\)(\(\omega\) 也为第 2 轮 S 盒输出的其中一个字节),考虑两种情况
-
\(v\) 和 \(\omega\) 依赖于不同的 4 个明文字节
\(v\oplus\omega=S(m_0*S(p_0\oplus k_1)\oplus \theta)\oplus\omega\)
\(\theta\) 和 \(\omega\) 共涉及 7 个明文字节,当这些明文字节固定时,\(\theta\) 和 \(\omega\) 也被确定
通过猜测 \(k_1\) 和 \(\theta\) 的值可以进行二阶 DPA 攻击(\(\omega\) 只影响尖峰的正负)
-
\(v\) 和 \(\omega\) 依赖于相同的 4 个明文字节
\(\omega=S(m_4*S(p_0\oplus k_1)\oplus \theta')\),其中 \(\theta'\) 是 \((p_1,p_2,p_3)\) 和 4 个密钥字节的函数
\(v\oplus\omega=S(m_0*S(p_0\oplus k_1)\oplus \theta)\oplus S(m_4*S(p_0\oplus k_1)\oplus \theta')\)
当 \((p_1,p_2,p_3)\) 固定时,\(\theta\) 和 \(\theta'\) 也被确定
通过猜测 \(k_1\), \(\theta\) 和 \(\theta'\) 的值可以进行二阶 DPA 攻击
-
2.2 攻击第 2 轮轮密钥加操作
-
指定 \(v\) 和 \(\omega\) 为第 2 轮轮密钥加操作的输出
-
\(v=m_0*S(m_1*S(p_0\oplus k_0)\oplus \theta)\oplus\delta\)
\(\omega=m_2*S(m_3*S(p_0\oplus k_0)\oplus \theta')\oplus\delta'\)
其中 \(\theta\) 和 \(\theta'\) 是 3 个明文字节和 4 个密钥字节的函数, \(\delta\) 和 \(\delta'\) 是 12 个明文字节和 16 个密钥字节的函数
-
\(v\oplus\omega=m_0*S(m_1*S(p_0\oplus k_0)\oplus \theta)\oplus m_2*S(m_3*S(p_0\oplus k_0)\oplus \theta')\oplus\delta\oplus\delta'\)
除 \(p_0\) 外的 15 个明文字节固定时,\(\theta,\theta',\delta,\delta'\) 也被确定
通过猜测 \(k_0\), \(\theta\) 和 \(\theta'\) 的值可以进行二阶 DPA 攻击