能耗分析攻击(二)----- 中间值的选取
\quad
本文章主要解决上一篇遗留的问题。我们在上一篇中讲到,可以用SubBytes的结果作为中间值来计算汉明重量进而计算相关度,进行DPA攻击。
\quad
这一篇中我们尝试使用AddRoundKey的结果即SubBytes的输入进行相同的操作,然后比较一下结果。
过程分析
\quad 首先列出参考网站给的部分代码(基于SubBytes的结果进行攻击):
for i=1:m
after_sbox(i,:) = SubBytes(bitxor(inputs(i),key)+1);
end
power_consumption = byte_Hamming_weight(after_sbox);
\quad
攻击选取了200条明文,放在数组
i
n
p
u
t
input
input中,
k
e
y
key
key为所有候选密钥,由于我们针对一个S盒进行攻击,所以
k
e
y
key
key有256种取值,所有可能取值放在数组key中。所以代码中
b
i
t
x
o
r
(
i
n
p
u
t
s
(
i
)
,
k
e
y
)
bitxor(inputs(i),key)
bitxor(inputs(i),key)表示第
i
,
i
∈
{
1
,
2
,
⋯
,
m
=
200
}
i,i\in\{1,2,\cdots,m=200\}
i,i∈{1,2,⋯,m=200}个明文异或所有可能的密钥,异或密钥后要穿越S盒,也就是代码中的
S
u
b
B
y
t
e
s
SubBytes
SubBytes函数,将结果存放在
a
f
t
e
r
_
s
b
o
x
after\_sbox
after_sbox中。后面就是计算汉明重量的代码了,这与我们这篇文章的目标无关,就不再介绍了。
\quad
接下来我们将中间值换成
S
u
b
B
y
t
e
s
SubBytes
SubBytes操作的输入,进行通过样的操作,也就是下面的代码:
for i=1:m
before_sbox(i,:) = bitxor(inputs(i),key);
end
power_consumption = byte_Hamming_weight(before_sbox);
其余代码保持不变,然后画出相关度的结果进行对比如下:
![](https://i-blog.csdnimg.cn/blog_migrate/fe301ed4f14ac5fb3f8595433dec3f13.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/830559610ddefdd2e7ea1a0775b600e5.jpeg)
\quad
在fig.1 与 fig.2 中, power_consumption 与正确密钥的相关度用黑色的线绘出,其他密钥使用灰色的线绘出。可以发现在使用这200条traces两种方法的正确密钥的曲线会比错误密钥的曲线尖峰更明显,也就说明攻击者都能很好的分析出正确密钥的值。
\quad
但注意到fig.2 中,不仅正确密钥会出现尖峰,有些错误密钥也会出现尖峰,显然使用after_sbox作为中间值是更好的选择!
总结
\quad
我们通过这次实验证明了S-Box结果作为中间值在攻击时效果是远优于S-Box输入作为中间值的。经过查阅资料,发现论文[Pro05]1提供了一个数学证明,简言之,就是S-box确实对DPA攻击者有帮助。
\quad
换句话说,如果针对S-Box之后的中间结果,DPA攻击效果会更好。
Prouff, E. (2005). DPA Attacks and S-Boxes. In: Gilbert, H., Handschuh, H. (eds) Fast Software Encryption. FSE 2005. Lecture Notes in Computer Science, vol 3557. Springer, Berlin, Heidelberg. https://doi.org/10.1007/11502760_29 ↩︎