SM4分组密码算法研究

SM4算法详解

  分组密码将明文数据按固定长度进行分组,并在同一密钥控制下逐组进行加密,从而将各个明文分组变换成一个个等长的密文分组。
  分组密码的设计一般基于混淆原则和扩散原则。
  混淆原则指的是将密文、明文、密钥三者之间的统计关系和代数关系变得尽可能复杂,使敌手即使获得了密文和明文,也无法求出密钥的任何信息,即使获得了密文和明文的统计规律,也无法求出明文的任何信息。
  扩散原则是将明文的统计规律和结构规律散射到相当长的一段统计中去。即,明文中的每一位会影响密文中的尽可能多的位,或者说让密文中的每一位都受到明文中的尽可能多位的影响。
分组密码主要的应用场景,包括无需进行密钥交换;防止明文传输过程被窃取;数据量大,加解密速度要求快等场景。

SM4算法流程

  SM4算法主要包括异或、移位以及盒变换操作。其中密钥拓展和加/解密为两个主要模块,其流程大同小异。
  其中,移位变换是指循环左移;盒变换将8bit输入映射到8bit输出的变换,是一个固定的变换。
  下图1给出了 SM4算法的加解密(左)和密钥拓展(右)的流程图。

图1. SM4算法实现流程
(1)加/解密模块
  加/解密算法由32次迭代运算和1次反序变换组成,具体步骤如下所述。
  设,明文输入为 ( X 0 , X 1 , X 2 , X 3 ) (X_0, X_1, X_2, X_3) X0,X1,X2,X3 X i X_i Xi为32 比特的数据,密文输出为 ( Y 0 , Y 1 , Y 2 , Y 3 ) (Y_0, Y_1, Y_2, Y_3) Y0,Y1,Y2,Y3,轮密钥为 r k i rk_i rki

  ① 当 i = 0 i=0 i=0 时为第一次轮变换,一直进行到 i = 31 i=31 i=31 结束。
  ②将 X i + 1 , X i + 2 , X i + 3 X_{i+1} , X_{i+2} , X_{i+3} Xi+1,Xi+2,Xi+3 和轮密钥 r k i rk_i rki 异或得到一个 32 32 32 比特的数据,作为盒变换的输入。即, s b o x i n p u t = X i + 1 ⊕ X i + 2 ⊕ X i + 3 ⊕ r k i sbox_{input} = X_{i+1} ⊕ X_{i+2} ⊕ X_{i+3}⊕rk_i sboxinput=Xi+1Xi+2Xi+3rki ⊕ ⊕ 符号代表异或运算。
  ③ 将 s b o x i n p u t sbox_{input} sboxinput 拆分成 4 4 4 8 8 8比特数据,分别进行盒变换,之后再将 4 4 4 8 8 8比特输出合并成一个 32 32 32 比特的 s b o x o u t p u t sbox_{output} sboxoutput
  ④ 将上一步获得的 s b o x o u

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

m0_74043383

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

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

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

打赏作者

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

抵扣说明:

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

余额充值