SM4算法过程

SM4算法过程

一、SM4算法介绍

​ 2012年3月,国家密码管理局正式公布了包含SM4分组密码算法在内的《祖冲之序列密码算法》等6项密码行业标准。与DES和AES算法类似,SM4算法是一种分组密码算法。其分组长度为128bit,密钥长度也为128bit。加密算法与密钥扩展算法均采用32轮非线性迭代结构,以字(32位)为单位进行加密运算,每一次迭代运算均为一轮变换函数F。SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。

​ SM4有很高的灵活性,所采用的S盒可以灵活地被替换,以应对突发性的安全威胁。算法的32轮迭代采用串行处理,这与AES中每轮使用代换和混淆并行地处理整个分组有很大不同。

二、SM4算法的完整过程

SM4算法过程_第1张图片

三、密钥处理

1、术法说明

加密密钥,SM4算法的加密密钥长度为128比特,将其分为四项,其中每一项都为为32位的字。表示为:
在这里插入图片描述
系统参数。其中每一项都为32位的字。表示为:
在这里插入图片描述
固定参数,用于密钥扩展算法。其中每一项都为32位的字。表示为:
在这里插入图片描述

轮密钥,其中每一项都为32位的字。轮密钥由加密密钥通过密钥扩展算法生成。表示为:
在这里插入图片描述

2、密钥扩展算法

将密钥的每个字分别与系统参数的每个字做异或运算得到(K0,K1,K2,K3),再将得到的后3个字与固定参数CK0做异或运算后进行函数T运算得到值C,最后将函数T运算得到的C与K0做异或运算就得到了第一轮的子密钥,也是下一轮密钥运算的K4。

所以密钥扩展算法可以有下面两个函数表示:

第一步:密钥与系统参数的异或:
在这里插入图片描述

第二步:获取子密钥:
在这里插入图片描述

SM4算法过程_第2张图片
SM4算法过程_第3张图片

2.1、函数T

如上图,可以大致分解为4步

1)、经过后3个字与固定参数异或后,得到的值A也为32位的字。

2)、将A拆分为4个8bit的字节进行S盒变换。该S盒是一个固定的8比特输入8比特输出的置换。

注:S盒变换与DES的类似,如下图,输入的8bit字节的前2位与后2位组合形成的值转换成16进制为S盒的行,也就是下标的x轴,中间的4位形成的值转换成的16进制为S盒的列,也就是下标的y轴。x,y轴确定的那一个值转换成的2进制为该S盒的输出。

例:输入01100101,取前4位0110转换成16进制为6,也就是对应的x轴为6。后4位的0101转换成16进制为5,对应的y轴也就为5。综合x,y找到S盒输出的值为58,即01011000
SM4算法过程_第4张图片

3)、将中间4个S盒的输出组成32位的值B。

4)、将B与左移13位及左移23位的B进行异或处理作为函数T的输出C。

四、明文处理

SM4算法过程_第5张图片

如上图,明文处理大致分解为3步:

1)、将128bit的明文分成4个32bit的字X1,X2,X3,X4。

2)、将上述得到的字进行32轮的轮操作。

3)、最后将进行过32轮操作的4个字进行反序变换后组成128bit的密文。

1、轮操作

SM4算法过程_第6张图片

该轮操作与密钥扩展算法类似,将明文拆分后的4个字的后3个字与该轮的子密钥进行异或处理,之后再经过一个函数T(函数T与密钥扩展中的函数T相同,只是后面的L处理变为B与左移2位及左移10位及左移18位及左移24位的B进行异或处理)得到C,之后再将明文拆分后的第一个字与C进行异或。

该轮操作的函数可简化成下面的函数:
在这里插入图片描述

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