标量乘的简单功耗分析
简单功耗分析时对正在加解密硬件的电路进行功耗消耗采集,通过直接分析功耗波形特征,进而获得与密钥相关的信息。例如:对于标量乘40P,它对应的二进制表示为:
40
P
=
(
10100
0
2
)
P
=
(
d
5
d
4
d
3
d
2
d
1
d
0
)
2
P
40P = (101000_2)P=(d_5d_4d_3d_2d_1d_0)_2P
40P=(1010002)P=(d5d4d3d2d1d0)2P,此算法从左至右扫描各个标量位。
#0
P
=
1
P
P=1P
P=1P
#1a
P
+
P
=
2
P
=
1
0
2
P
P+P=2P=10_2P
P+P=2P=102P
#1b
#2a
2
P
+
2
P
=
2
P
=
10
0
2
P
2P+2P=2P=100_2P
2P+2P=2P=1002P
#2b
4
P
+
P
=
2
P
=
10
1
2
P
4P+P=2P=101_2P
4P+P=2P=1012P
#3a
5
P
+
5
P
=
10
P
=
101
0
2
P
5P+5P=10P=1010_2P
5P+5P=10P=10102P
#3b
#4a
10
P
+
10
P
=
20
P
=
1010
0
2
P
10P+10P=20P=10100_2P
10P+10P=20P=101002P
#4b
#5a
20
P
+
20
P
=
40
P
=
10100
0
2
P
20P+20P=40P=101000_2P
20P+20P=40P=1010002P
#5b
因为在SM2算法中,点乘运算中的点加操作和倍点运算的功耗波形特征有着显著的不同,利用简单功耗分析就能区分出点加操作和倍点操作。如下图所示的功耗曲线图,可恢复标量K=0001000。
标量乘的差分功耗分析
在SM2算法中,可以对标量乘与乘法器实行差分功耗攻击。以标量乘KP来说,DPA攻击按以下几个步骤进行:首先选取算法中与密钥有关系的中间值。第二步是收集密码设备运行时消耗的能量。第三步计算假定的中间值,对不同的K值,计算出对应的假设中间值。第四步将数据中间值映射成对应的能量消耗值。第五步比较假设的能量消耗值域实际能量值,计算相关系数。