-
-
[原创]芯片侧信道安全
-
发表于: 2024-4-13 17:35 3557
-
1、 SM4算法
SM4 密码算法的数据分组长度为128比特,密钥长度也是128比特,是分组算法当中的一种。SM4算法首先将加密信息进行分组,分组后通过异或、S盒变换、移位等操作进行分组明文的拓展,如图1所示。其中使用迭代方法实现明文拓展,每轮迭代所采用的密钥经过加密类似的流程进行迭代生成,也就是说加密迭代和生成密钥迭代是对应的。因此,解密过程也能够通过密钥进行密文的迭代解密。
1 | 图 1 SM4加密流程 |
以第一次迭代为例,加密流程可以简单概括为:
(1) X_1,X_2,X_3相互异或,然后与轮密钥〖rk〗0进行异或;
(2) 将32bit拆分为4个8bit的长度,放进S盒中进行变换,再组合为32bit的数据;
(3) 将32bit依次进行左移2、10、18、24
位,并异或;
(4) 异或得到的32bit数据再与X_0进行异或,得出X_4;
(5) 迭代32次上述操作,将得到的X_0~X_35进行反序变换,得出密文。
2、 SM4算法脆弱点分析
2.1 S-BOX输入
攻击点1位于明文与轮密钥异或运算时。SM4算法在每一轮迭代中都要先将每轮的明文输入与每轮的轮密钥进行异或操作即S-BOX输入,在执行完这一步操作后会产生一个中间值V如式(1)所示:
V=X(i+1)⊕X_(i+2)⊕X_(i+3)⊕rk_i (1)
由于V中含有明文和轮密钥的信息,故在进行 CPA 攻击时可将V作为攻击的中间数据,即攻击点为S-BOX输入。对软实现的SM4算法进行CPA攻击时,选用汉明重量模型。针对 SM4 加密算法 S-BOX输入CPA 攻击的基本思想:
(1) 在密码芯片系统中,将N组不同的明文数据和真实密钥进行加密运算,并获取密码设备的能耗即为能量迹,记为T。
(2) 通过猜测密钥,产生相应的中间值,根据中间值的汉明重量或者汉明距离泄露,计算得到假设能量消耗,记为H。
(3) 根据下式计算假设能量消耗与实测能量迹的线性相关系数。
ρ=((E(T∙H)-E(T)E(H)))/√(Var(T)Var(H)) (2)
当 ρ取绝对值的最大值时,此时H所对应的猜测的密钥即为正确的密钥。
重复步骤(1)-步骤(5),可以分别获得第一轮轮密钥的其他3个字节,从而得到第一轮正确轮密钥〖rk〗_0。依次获得(〖rk〗1,〖rk〗2,〖rk〗3)。最后根据密钥扩展算法可以推出K_3、K_2、K_1和K_0,从而得到SM4算法的加密密钥。
2.2 S-BOX输出
攻击点2位于4个并行的S盒的输出之后。由于S盒在把输入数据映射到输出数据的过程中具有扩散性,即使输入数据很小也会造成输出数据有很大的变化,从而消耗大量的功耗。所以,在功耗攻击中,S盒输出比较薄弱,攻击者也经常选择该点作为功耗分析攻击点。
以第一轮攻击过程为例:
在第一个S盒的输出字节中,该中间值是明文第一个字节和密钥第一个字节的函数,选择这个中间值后:
(1) 记录在第一轮执行期间,加密1000个不同明文时的能量消耗。
(2) 将会得到一个能量消耗值矩阵T。
(3) 基于1000个已知明文计算出假设中间值,计算出v(i,j)=S(d_i⊕k_j),其中,d_1,⋯,d_1000表示第一个明文的第一个字节,k_j=j-1(j=1,⋯,256),得到一个大小为1000×256的矩阵V。
(4) 将V 映射为假设能量消耗值矩阵H。在攻击中,仅考虑V中各个值得最低有效位(LSB),因此将h(i,j)=LSB(v(i,j))用作能量模型。
(5) 基于H执行攻击的最后一步,计算H中所有列与所记录能量消耗值矩阵T中所有列之间的相关系数,得到相关系数矩阵R。
当 R取绝对值的最大值时,可以恢复出密钥的第一个字节。对其他密钥字节进行如前所示的相同攻击,就可以恢复出最终密钥。
2.3 轮输出
攻击点3位于轮输出。由于线性变换 L 将轮子密钥的影响扩散到轮输出的较多位中,导致轮输出的任一比特都与轮输入和密钥相关联,所以可以直接将轮输出作为攻击的中间数据。
以第一轮攻击为例:
第一轮的轮输入为待加密的明文,轮输出为X_4=X_0⊕〖T(X〗_1⊕X_2⊕X_3⊕〖rk〗_0),令C=〖T(X〗_1⊕X_2⊕X_3⊕〖rk〗_0),将轮输出X_4作为中间值进行攻击,首先需要攻击C。
选择明文X_1 、X_2和X_3,使得X_1⊕X_2⊕X_3=D,其中D为固定值,那么C=T(D⊕〖rk〗_0),被攻击的轮输出表达式变为:
X_4=X_0⊕C (3)
其中X_0是已知的,X_4的汉明重量会通过功耗曲线被泄露,所以将轮输出作为功耗分析攻击的中间数据可以攻击出C。
由于C是线性变换L的输出,可以通过C反推出B,再根据B是S盒变换的输出,可以反推出A,从而推出轮密钥〖rk〗_0。以此类推,攻击出 〖rk〗_1,〖rk〗_2,〖rk〗_3。最后根据密钥扩展算法可以推出K_3、K_2、K_1和K_0,从而得到SM4算法的加密密钥。
3、 实验攻击
图3 实验环境
3.1 数据采集
首先通过测试脚本将 Inspector 和智能卡建 立连接。采集 10000 条左右的功耗曲线,采集到的智能卡IC卡的加密功耗曲线全局图如图4,从图中可以清楚地看出SM4的32轮运算。
1 | 图 4 采集到的SM4加密功耗曲线全局图 |
3.2 3、密钥恢复
确定SM4加密位置后就可以进行密钥恢复。攻击目标选择S盒,位置选择S盒输出的HW,选择 SM4的第一轮、第二轮、第三轮和第四轮进行攻击,可以获得最终密钥。本节以第一轮攻击为例进行说明。具体如图5所示。
图5 对S-BOX输出第一轮攻击结果
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课