一、 SM4算法简介
SM4算法是中国国家密码管理局于2012
发布的一种分组密码算法,其官方名称为SMS4(SMS4.0),相关标准为GM/T 0002-2012《SM4分组密码算法》。SM4算法的分组长度
和密钥长度
均为128
比特,采用非平衡Feistel结构
。采用32轮非线性迭代
结构,加密和解密过程结构相同,但使用的轮密钥顺序相反。
二、SM算法流程
加密算法由32次迭代
和1次反序列变化
R组成。
解密变换
和加密变换
结构相同
,不同的仅是轮密钥的使用顺序。
-
密钥扩展(Key Schedule):将128位的输入密钥通过一个固定的密钥扩展算法扩展为32轮的轮密钥。
-
初始置换(Initial Permutation, IP):将128位的明文块进行初始置换。
-
轮函数(Round Function):明文块通过32轮非线性迭代处理。每一轮中,轮函数F会对数据进行处理,生成中间结果。
- 非线性变换(Non-linear Transformation) :非线性变换τ由
4
个并行的S盒构成,S盒为固定的8
比特输入8比特输出的置换。 - 线性变换(Linear Transformation): 线性变换L'是32位循环左移操作,具体为L'(B) = B ⊕ (B <<< 13) ⊕ (B <<< 23)。
- 轮密钥加(Round Key Addition):在每一轮中,将数据与轮密钥进行异或操作。
- 最终置换(Final Permutation, FP) :在所有轮次完成后,对数据进行最终置换,得到密文。
这个流程确保了SM4算法的安全性和效率,适用于需要高安全性的数据加密场景。
特征 | 描述 |
---|---|
分组长度 | 128位(16字节) |
密钥长度 | 128位(16字节) |
加密轮数 | 32轮非线性迭代结构 |
Feistel结构 | 采用非平衡Feistel结构 |
S盒非线性 | 非线性变换τ由4个并行的S盒构成,S盒是非线性的 |
线性变换 | 线性变换L'是32位循环左移操作 |