SM4 算法有多个位置存在泄漏点,如下图所示:
在位置1和2,可以逐个字节攻击密钥,因为密钥和中间结果之间没有扩散,这时通常取Sbox的输出作为攻击点,因为在位置2处的功耗是大于位置1的,但是在FPGA硬件电路中,Sbox产生的功耗相对于状态寄存器来说小得多,有文章中的数据显示,如果攻击点在Sbox处,至少需要采集270000条功率曲线才可以破解出密钥。在实际密码电路中,产生功耗的寄存器出现在位置3,因为SM4算法的移位操作,密钥和明文高度混淆,直接攻击需要 2 32 2^{32} 232次穷举尝试,如果选择随机明文,则在位置3中不可能进行攻击。因为选择位置3作为攻击点时,应该使用选择特定的明文方法来获得密钥。这与破解AES密钥是不同的,因为在AES的每轮的状态寄存器中,最后一步是轮密钥加操作,状态寄存器的每个字节的数据只与其对应的密钥字节有相关性,可以使用正常的随机明文作为输入来攻击。
对于SM4算法而言,使用选择特定的明文方法如下:
(1)以第一轮攻击为例,第一轮密钥为 r k 0 rk_0 rk0,记 r k 0 = ( r k 0 , 0 , r k 0 , 1 , r k 0 , 2 , r k 0 , 3 ) rk_0 = (rk_{0,0}, rk_{0,1},rk_{0,2},rk_{0,3}) rk0=(rk0,0,rk0,1,rk0,2,rk0,3)。
(2)选择明文 ( X 0 , X 1 , X 2 , X 3 ) = ( 00000000 h , 00000000 h , 00000000 h , X X 000000 h ) (X_0,X_1,X_2,X_3)=(00000000h, 00000000h, 00000000h,XX000000h) (X
SM4加密算法的侧信道攻击实现
最新推荐文章于 2024-07-10 17:13:21 发布