SM4 算法是我国商用分组密码算法,被广泛用于无线网络数据加密传输中。SM4 算法的密钥长度和分组长度均为 128 比特,解密算法是加密算法的逆运算,只需将轮密钥逆序输入即可得到明文。SM4 与 AES 算法的比较如表 1 所示。
表 1 SM4 与 AES 算法比较
算法 | 加密轮数 | 密钥长度(比特) | 分组长度(比特) |
---|---|---|---|
SM4 | 32 | 128 | 128 |
AES-128 | 10 | 128 | 128 |
AES-192 | 12 | 192 | 128 |
AES-256 | 14 | 256 | 128 |
SM4 加密算法
为了方便说明,本文定义
其中,
非线性变换
由 4 个并行的 8 进 8 出的 S 盒查表组成,设输入为 ,输出为 ,则:对于 S 盒的 8 位输入,将前 4 位作为行,后 4 位作为列,输出即为查找表中对应行列所对应的 值。S 盒如图 1 所示:
图 1 S 盒
线性变换
接收非线性变换 的输出作为输入,设线性变换 的输出为 ,则:其中,
表示循环左移,如 表示将 循环左移 2 位。
SM4 密钥扩展算法
SM4 算法使用密钥扩展算法对初始密钥进行扩展生成各轮子密钥。令初始密钥表示为
其中:
, 表示为: 是系统参数,取值为: 是固定参数,其构造方法为:设
的第 个字节为 ,即 ,那么有:根据此计算方法,可以计算出所有的
值,即:00070E15, 1C232A31, 383F464D, 545B6269,
70777E85, 8C939AA1, A8AFB6BD, C4CBD2D9,
E0E7EEF5, FC030A11, 181F262D, 343B4249,
50575E65, 6C737A81, 888F969D, A4ABB2B9,
C0C7CED5, DCE3EAF1, F8FF060D, 141B2229,
30373E45, 4C535A61, 686F767D, 848B9299,
A0A7AEB5, BCC3CAD1, D8DFE6ED, F4FB0209,
10171E25, 2C333A41, 484F565D, 646B7279
参考文献
[1] SM4 分组密码算法