SM4
一、概述
SM4是一种分组密码算法,由我国国家密码管理局在2012年发布,常用于无线互联网加密等领域。
其分组长度为128位(即16字节,4字),密钥长度也为128位(即16字节,4字)。其加解密过程采用了32轮迭代机制(与DES、AES类似),每一轮需要一个轮密钥(与DES、AES类似)。
二、加密过程
1、加密过程概述
SM4的分组长度为4字,因此,其输入是4字的明文 \((X0,X1,X2,X3)\) (其中 Xi 表示一个32位的字),经过加密后,得到的输出是4字的密文 $(Y0,Y1,Y2,Y3) $(其中 Yi 表示一个32位的字)。
这个加密过程分为两步,由32次轮迭代和1次反序变换组成。
2、算法流程
SM4 算法主要包含异或、移位以及盒变换操作。它分为密钥拓展和加/解密两个模块,这两个模块的流程大同小异 其中,移位变换是指循环左移;盒变换是一个将8bit输入映射到8bit输出的变换,是一个固定的变换 下图是 SM4 的加解密(左)和密钥拓展(右)的流程图
(1) 加解密
- 输入的明文为 128bit 的数据,将其按位拆分成 4 个 32bit 的数据 \(x0,x1,x2,x3\) 当\(i=0\) 时为第一次轮变换,一直进行到$ i=31$ 结束
- \(xi\) 暂时不做处理,将 \(x_{i+1},x_{i+2},x_{i+3}\) 和轮密钥 \(rk_i\) 异或得到一个 32bit 的数据,作为盒变换的输入 即 \(sbox\_input=x_{i+1}⊕x_{i+2}⊕x_{i+3}⊕rk_i\),\(⊕\) 符号代表异或运算
- 将 \(sbox\_input\) 拆分成 4 个 8bit 数据,分别进行盒变换,之后再将 4 个 8bit 输出合并成一个 32bit 的 \(sbox\_output\)
- 将刚才获得的 \(sbox\_output\) 分别循环左移 2,10,18,24 位,得到 4 个 32bit 的结果,记移位结果为 \(y_2,y_{10},y_{18},y_{24}\)
- 将移位的结果 \(y_2,y_{10},y_{18},y_{24}\) 与盒变换输出 \(sbox\_output\) 和 \(x_i\)异或,得到 \(x_{i+4}\) 即 \(x_{i+4}=sbox\_output⊕y_2⊕y_{10}⊕y_{18}⊕y_{24}⊕x_i\)
- 至此完成了一轮的加解密运算 在实际加解密过程中,上述运算要执行 32 轮,同时使用 32 个不同的 \(rk_i\),\(rk_i\) 由密钥拓展生成
- 最后将生成的最后 4 个 32bit 数据 \(x_{35},x_{34},x_{33},x_{32}\) 合并成一个 128bit 的数据 \(output\),作为最后的输出结果
(2) 密钥拓展
- 密钥拓展的过程和加解密大同小异
- 输入的原始密钥 \(key\) 为 128bit 的数据,将其按位拆分成 4 个 32bit 的数据 \(K_0,K_1,K_2,K_3\)
- 将初始密钥 \(K_0,K_1,K_2,K_3\) 分别异或固定参数 \(FK_0,FK_1,FK_2,FK_3\) 得到用于循环的密钥 \(k_0,k_1,k_2,k_3\) 即 \(k_0=K_0⊕FK_0,k_1=K_1⊕FK_1,k_2=K_2⊕FK_2,k_3=K_3⊕FK_3\)
- 进入轮密钥 \(rk_i\) 的生成 当 \(i=0\) 时为第一次轮变换,一直进行到$ i=31$ 结束
- \(ki\) 暂时不做处理,将 \(k_{i+1},k_{i+2},k_{i+3}\) 和固定参数 \(CK_i\) 异或得到一个 32bit 的数据,作为盒变换的输入 即$ sbox_input=k_{i+1}⊕k_{i+2}⊕k_{i+3}⊕ck_i$
- 将 \(sbox\_input\) 拆分成 4 个 8bit 数据,分别进行盒变换,之后再将 4 个 8bit 输出合并成一个 32bit 的 \(sbox\_output\)
- 将刚才获得的 \(sbox\_output\) 分别循环左移 13,23 位,得到 2 个 32bit 的结果,记移位结果为$ y_{13},y_{23}$
- 将移位的结果 $ y_{13},y_{23}\(与盒变换输出\) sbox_output$ 和 \(k_i\) 异或,得到 \(k_{i+4}\) 即 \(rk_i=k_{i+4}=sbox\_output⊕y_{13}⊕y_{23}⊕k_i\)
- 至此完成了一轮的加解密运算 在实际加解密过程中,上述运算要执行 32 轮,同时使用 32 个不同的$ CK_i\(,\)CK_i$ 为固定参数
- 执行完 32 轮后,便可获得 32 个用于加解密的 \(rk_i\)
三、特征
1、S盒
和AES类似,SM4也有码表,不过AES有S盒和逆S盒。以下是SM4 的S盒:
1 |
|
多数时间可能会以数组形式存在。
2、固定参数\(CK,FK\)
1 |
|
感觉。。。。可能有脑残出题人改这两参数。。。。
3、加密形式
1 |
|
像这样子的