加密04-SM4
好耶,不用介绍了,
感觉和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盒,得到下一个值
得到转化后的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 | FK0 = A3B1BAC6 |
1 | CK = [00070E15,1C232A31,383F464D,545B6269,70777E85,8C939AA1,A8AFB6BD,C4CBD2D9E0E7EEF5FC030A11,181F262D,343B4249,50575E65,6C737A81,888F969D,A4ABB2B9,C0C7CED5,DCE3EAF1,F8FF060D,141B2229,30373E45,4C535A61,686F767D.848B9299.A0A7AEB5,IBCC3CAD1,D8DFE6ED,F4FB0209.10171E25,2C333A41,484F565D,646B7279] |
评论