0. 前言
SM4 算法是对称加密算法,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述。SM4 算法密钥长度固定为128bit,加密解密采用相同的密钥,加解密速度较快,优于AES算法。
1. 算法原理介绍
SM4算法首先将加密信息进行分组,分组后通过异或、S盒变换、移位等操作进行分组明文的拓展。其中使用迭代方法实现铭文拓展,每轮迭代所采用的密钥经过加密类似的流程进行迭代生成,也就是说加密迭代和生成密钥迭代是对应的。因此,解密过程也能够通过密钥进行密文的迭代解密。
1.1 加密算法解析
- SM4分组算法需要将信息分割为128bit的整数倍,不足128bit的补满,得到分组;
- 将分组分割为32bit的四部分,,然后将这一组明文按照图1所示流程进行处理。其中密钥拓展生成流程放在下一小节解析。
以第一次迭代为例,加密流程可以简单概括为:(1)相互异或,然后与密钥进行异或;(2)将32bit拆分为4个8bit的长度,放进S盒中进行变换,再组合为32bit的数据;(3)将32bit依次进行左移2、10、0、18、24位,并异或;(4)异或得到的32bit数据再与进行异或,得出;(5)迭代32次上述操作,将得到的~进行反序变换,得出对明文的密文。
其中S盒变换是将8bit的数据拆分成4+4,前4bit换算为16进制对应S盒的行数,后4bit换算为16进制对应S盒的列数,从对应的行列中选出目标值替换掉8bit数据的值。S盒如图2.
1.2 密钥拓展算法解析
密钥拓展的过程基本与加密过程类似,这里不展开进行介绍,直接给出运算流程图如图3.
国密局给出了上述流程中固定参数的取值,如图4所示。
1.3 解密过程
以第一组数据举例,明文经过加密生成,逆序运算后得出.对应的密钥为.依此类推,解密过程只是将加密得出的密文重复进行“加密”操作,密钥的使用顺序更改为倒序。
参考[1]中对加解密过程进行了推导,建议查看。
2. 参考
[1] SM4加密算法原理和简单实现(java) - kentle - 博客园
[2] http://www.gmbz.org.cn/main/viewfile/20180108015408199368.html