14、SM4算法

SM4算法

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

注:明文、密文、密钥128位

数据处理单位为:字节(8位)、字(32位)

SM4算法流程

密钥扩展算法

加密算法的轮密钥由加密密钥通过密钥扩展算法生成,从而生成32个32位的轮密钥。

加密密钥MK=(MK0 , MK1 , MK2 , MK3 ),MKi∈ ,i=0,1,2,3;

令Ki∈ ,i=0,1,…,35,轮密钥为rki∈  ,则轮密钥生成方法为:

(K0 ,K1 ,K2 ,K3 )=(MK0⊕FK0 ,MK1⊕FK1 ,MK2⊕FK2 ,MK3⊕FK3 )

然后,对i=0,1,…,31:

注意:

1)T’变换与加密算法轮函数中的T基本相同,只将其中的线性变换 L 修改为以下 :

L’ (B)=B⊕ (B<<< 13)⊕ (B<<< 23);

2)密钥扩展参数

FK:系统参数 FK 的取值,采用 16 进制表示为:

FK0=(A3B1BAC6),FK1=(56AA3350),

FK2=(677D9197),FK3=(B27022DC);

CK:固定参数CK的取值方法为:设cki,j 为CKi的第j字节(i=0,1,…,31;j=0,1,2,3),即CKi= (cki,0,cki,1,cki,2,cki,3) ∈ ,则cki,j = (4i+j)×7(mod 256)。32个固定参数CKi ,其16进制表示为(i:第i个参数;j:参数第j个字节):

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

密钥及密钥参量:SM4分组密码算法的加密密钥长度为128bit,表示为MK=(MK0,MK1,MK2,MK3),其中MKi(i=0,1,2,3)为32bit。

轮密钥:(rk0,rk1,···,rk31),其中rki(i=0,1,···,31)为32bit,轮密钥由加密密钥生成。

系统参数:FK=(FK1,FK2,FK3,FK4),其中FKi(i=0,1,···,3),

固定参数:CK=(CK0,CK1,···,CK31),用于密钥扩展算法,均为32bit。

轮函数F

本算法采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。

设输入为(X0,X1,X2,X3)∈ ,轮密钥为rki∈ ,则轮函数 F 为:

SM4算法进行32轮轮函数运算得到密文。

字合成变换T -- ,是一个可逆变换,进行32轮轮函数运算得到密文。字合成变换T 由非线性变换τ和线性变换L复合而成,即:T(*)=L(τ(*));先进行τ变换,再进行L变换。

轮函数部件分解如下:

S:S 盒中数据均采用 16 进制表示。高4位为行号,低4位为列号,交叉点为输出;S盒是非线性字节变换,起到混淆作用,8位输入,8位输出:

非线性变换τ:τ由4个并行S盒构成(4*8),起混淆作用;

设输入为A=(a0,a1,a2,a3)∈ , 输出为B=(b0,b1,b2,b3)∈ ,则B=τ(A)= (b0,b1,b2,b3)=( Sbox(a0), Sbox(a1), Sbox(a2), Sbox(a3))

字线性变换L变换:非线性变换 τ有32位输入,32位输出,起扩散作用;非线性变换 τ 的输出是线性变换 L 的输入。设输入为 ,输出为C∈ ,则C=L(B)=B⊕(B <<<2)⊕(B <<<10)⊕(B <<<24)。

加密与解密

定义反序变换R为:

R(A0,A1,A2,A3)=(A3,A2,A1,A0),Ai∈ ,i=0,1,2,3;

设明文输入(X0,X1,X2,X3)∈ ,密文输出(Y0,Y1,Y2,Y3)∈ ,轮密钥rki∈ ,i=0,1,2…31,则算法的加密变换为:

(Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)

SM4算法的加密与解密变换结构相同,不同的仅是轮密钥的使用顺序。

加密轮密钥:(rk0,rk1,…,rk31);

解密轮密钥:(rk31,rk30,…,rk0)。

SM4算法特点

SM4与DES算法都采用Feistel结构,但是SM4采用非对称Feistel结构,DES算法中参与交换的两个数据块的长度是相等的,SM4中参与交换的两个数据块的长度是不相等的。

注:

如有错误、侵权,请联系笔者更改、删除!!!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三九笔墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值