【学习记录】【密码学】SM4分组密码算法

0. 前言

SM4 算法是对称加密算法,国标 GB/T 32907 对 SM4 对称加密算法进行了详细描述。SM4 算法密钥长度固定为128bit,加密解密采用相同的密钥,加解密速度较快,优于AES算法。

1. 算法原理介绍

        SM4算法首先将加密信息进行分组,分组后通过异或、S盒变换、移位等操作进行分组明文的拓展。其中使用迭代方法实现铭文拓展,每轮迭代所采用的密钥经过加密类似的流程进行迭代生成,也就是说加密迭代和生成密钥迭代是对应的。因此,解密过程也能够通过密钥进行密文的迭代解密。

1.1 加密算法解析

  1.  SM4分组算法需要将信息分割为128bit的整数倍,不足128bit的补满,得到分组[U_{0},U_{1},...U_{n},]
  2. 将分组U_{n}分割为32bit的四部分,U_{n} = X_{0},X_{1},X_{2},X_{3},然后将这一组明文按照图1所示流程进行处理。其中密钥拓展生成流程放在下一小节解析。
【学习记录】【密码学】SM4分组密码算法_第1张图片 图1 明文加密流程

         以第一次迭代为例,加密流程可以简单概括为:(1)X_{1},X_{2},X_{3}相互异或,然后与密钥rk_{0}进行异或;(2)将32bit拆分为4个8bit的长度,放进S盒中进行变换,再组合为32bit的数据;(3)将32bit依次进行左移2、10、0、18、24位,并异或;(4)异或得到的32bit数据再与X_{0}进行异或,得出X_{4};(5)迭代32次上述操作,将得到的X_{0}~X_{35}进行反序变换,得出对明文U_{n}的密文。

        其中S盒变换是将8bit的数据拆分成4+4,前4bit换算为16进制对应S盒的行数,后4bit换算为16进制对应S盒的列数,从对应的行列中选出目标值替换掉8bit数据的值。S盒如图2.

【学习记录】【密码学】SM4分组密码算法_第2张图片 图2 S盒数据

1.2 密钥拓展算法解析

        密钥拓展的过程基本与加密过程类似,这里不展开进行介绍,直接给出运算流程图如图3.

【学习记录】【密码学】SM4分组密码算法_第3张图片 图3 密钥拓展流程

        国密局给出了上述流程中固定参数CK_{i}的取值,如图4所示。

【学习记录】【密码学】SM4分组密码算法_第4张图片 图4 固定参数取值


1.3 解密过程

        以第一组数据举例,明文x_{0},x_{1},x_{2},x_{3}经过加密生成x_{0}^{'},x_{1}^{'},x_{2}^{'},x_{3}^{'},逆序运算后得出x_{35}^{'},x_{34}^{'},x_{33}^{'},x_{32}^{'}.对应的密钥为rk_{31}.依此类推,解密过程只是将加密得出的密文重复进行“加密”操作,密钥的使用顺序更改为倒序。

        参考[1]中对加解密过程进行了推导,建议查看。

2. 参考

        [1] SM4加密算法原理和简单实现(java) - kentle - 博客园

        [2] http://www.gmbz.org.cn/main/viewfile/20180108015408199368.html

 



你可能感兴趣的:(密码学)