SM4算法加密流程

分组长度

 

数据分组(明文,密文)长度=128位、密钥长度=128位
数据处理单位:字(32位)(32bit)

密码算法特点

对合运算:解密算法与加密算法相同 解密算法与加密算法相同
子密钥生成算法与加密算法结构类似 (加密算法与密钥扩展算法均采用32轮非线性迭代结构

密码结构

滑动窗口结构

SM4 密码算法结构

加密流程还是分为两部分:明文加密部分与密钥扩展部分(每次密钥的生成)

明文加密部分

  • 输入明文:(X0,X1,X2,X3),128位,四个字。
  • 输入轮密钥:rki ,i=0,1,…,31,共32个轮密钥。
  • 输出密文:(Y0,Y1,Y2,Y3),128位,四个字。

 Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)【F为轮函数】
= Xi ⊕T( Xi+1⊕ Xi+2⊕ Xi+3⊕rki), i = 0,1…31 
(Y0,Y1,Y2,Y3)=(X35,X34,X33,X32)【注意最后的反序】

 

F轮函数部分(经过32轮迭代)

1.S盒字节非线性替换(非线性变换τ)

  1. 把128bit明文分为4个32位字(X0,X1,X2,X3)
  2. X1,X2,X3,rK相互异或得到32位字
  3. 将这32位字并行输入5*4个S盒

输入的前半字节为行号,后半字节为列号,行列交叉点处的数据即为输出。(查S盒,与AES的字节替换类似

2.字线性部件L变换

  1. 输出的结果再进行循环左移;
  2. 最后与X0进行异或。

32位输入,32位输出。
设输入为B,输出为C,表为:
C=L(B)
运算规则:
C=L(B)
=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18) ⊕(B<<<24)

X4=C⊕X0

并将输出结果添加到明文的最后一个字后,进入第二次轮函数……直到第32轮函数执行完毕。最后四次经过轮函数得到的(X35 X34 X33 X32)4个32位字即为密文。

密钥扩展部分(密钥的生成)

常数FK
在密钥扩展中使用一些常数,4个常数
FK0=(A3B1BAC6) =(A3B1BAC6)
FK1=(56AA3350) =(56AA3350)
FK2=(677D9197 ) =(677D9197 )
FK3=(B27022DC) =(B27022DC)
三、SMS4密码算法20
⑹密钥扩展算法
32个固定参数Cki,i=0,1,2…31
00070e15, 1c232a31, 383f464d, 545b6269, 00070e15, 1c232a31, 383f464d, 545b6269,
70777e85, 8c939aa1, a8afb6bd, c4cbd2d9, 70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,
e0e7eef5, fc030a11, 181f262d, 343b4249, e0e7eef5, fc030a11, 181f262d, 343b4249,
50575e65, 6c737a81, 888f969d, a4abb2b9, 50575e65, 6c737a81, 888f969d, a4abb2b9,
c0c7ced5, dce3eaf1, f8ff060d, 141b2229, c0c7ced5, dce3eaf1, f8ff060d, 141b2229,
30373e45, 4c535a61, 686f767d, 848b9299, 30373e45, 4c535a61, 686f767d, 848b9299,
a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209, a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,
10171e25, 2c333a41, 484f565d, 646b7279 10171e25, 2c333a41, 484f565d, 646b7279

  • 输入加密密钥:MK=(MK0,MK1,MK2,MK3)
  • 输出轮密钥:rki ,i=0,1…,30,31
  • 中间数据:Ki,i=0,1, …, 34,35

输入加密密钥MK=(MK0,MK1,MK2,MK3)

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

  For  i=0,1…,30,31 Do

            rki=Ki+4=Ki⊕T’(Ki+1⊕Ki+2⊕Ki+3⊕CKi)

           说明:T’变换与加密算法轮函数中的T基本相同,只将其中的线性变换L修改为以下:L’(B)=B⊕(B<<<13)⊕(B<<<23)

rki就是我们每轮加密要的密钥

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值