好耶,不用介绍了,

文档连接

感觉和AES加密差不多

SM4/SMS4

性质

分组算法,分组长度位128位,密钥长度位128位

过程

加密

32次迭代

输入为X0到X4共十六字节,每个X有4字节,通过轮密钥运算生成X0对应的X5……以此类推,直到生成了X32,X33,X34,X35

具体来说
$$
X_{i+4}=F(X_i,X_{i+1},X_{i+2},X_{i+3},rk_i)
$$

其中F为轮函数:
$$
F(X_i,X_{i+1},X_{i+2},X_{i+3},rk_i) = X_0\oplus T(X_{i+1}\oplus X_{i+2}\oplus X_{i+3}\oplus rk_i)
$$

其中T为合成置换,$T(x) = L(\tau)$,其中L是线性变换,$\tau$是非线性变换

对于$\tau$,

把输入的四个值转为hex,查S盒,得到下一个值

image-20240605162119411

得到转化后的4个值记为B

结果C=
$$
L(B)=B\oplus(B<<<2)\oplus(B<<<10)\oplus(B<<<18)\oplus(B<<<24)
$$
<<<是32位循环左移

1次反序变换

将结果变为X35,X34,X33,X32

密钥扩展

FK系统参数 CK固定参数 MK输入密钥一共4个

轮密钥由加密密钥生成

加密密钥K0到K3由$MK_i$和$FK_i$异或得到

后面的则是$rK_i$=
$$
K_{I+4}=K_i \oplus T’(K_{i+1} \oplus K_{i+2} \oplus K_{i+3}\oplus CK_i)
$$
T’是将T的线性变换L换成下面的L‘:
$$
L’(B)=B\oplus(B<<<13)\oplus(B<<<23)
$$

1
2
3
4
FK0 = A3B1BAC6
FK1 = 56AA3350
FK2 = 677D9197
FK3 = B27022DC
1
CK = [00070E15,1C232A31,383F464D,545B626970777E85,8C939AA1,A8AFB6BD,C4CBD2D9E0E7EEF5FC030A11,181F262D,343B424950575E65,6C737A81,888F969D,A4ABB2B9,C0C7CED5,DCE3EAF1,F8FF060D,141B222930373E45,4C535A61,686F767D.848B9299.A0A7AEB5,IBCC3CAD1,D8DFE6ED,F4FB0209.10171E25,2C333A41,484F565D,646B7279]