国密SM4分组密码算法
创始人
2024-06-01 12:23:06
0

前言

密码,是指使用特定变换对数据等信息进行加密保护或安全认证的物项(承载算法、密钥、密文的介质)和技术,主要用于加密和安全认证(身份识别、完整性、抗抵赖性)。

密码按照保密等级,又分为核密、普密、商密三种,其中核密、普密用于涉及国家秘密领域,商密用于非涉及国家秘密领域。

接下来,我们重点讲一下这个商密。

什么是商用密码?

商密,全称商用密码,是国家密码局认定的国产密码算法,又称国密算法,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括对称算法(SM1、SM4等),非对称算法(SM2、SM9)以及哈希算法(SM3)等等。

这些密码标准可以有效保护信息安全所面临的威胁,例如:

  • 为防止信息被窃取、监听,避免秘密泄露,需要确保信息的机密性,可以使用对称加密与非对称加密对信息进行加密保护;

  • 为防止信息被篡改,导致接收者收到错误的信息,可以使用数字签名、消息认证码、单向散列函数的技术,保证信息的完整性;

  • 不少黑客会伪装成真正的发送者,给你发送虚假的信息,此时需要对发送者的身份进行认证,可使用消息认证码、数字签名的方式;

  • 不可否认性也称不可抵赖性,可以保证在信息交互过程中所有参与者都不可能否认或抵赖曾经完成的操作和承诺甚至是“内鬼”行为,通过数字签名就可以保证信息的不可否认性。

什么是对称加密?

对称加密算法给定一个明文和一个密钥,加密产生密文,其长度和明文大致相同,解密时,使用的解密密钥与加密密钥相同,因此被称为对称加密算法。

国密算法的对称加密算法包括:SM1、SM4、SM7、ZUC祖冲之算法等。

由于SM1与SM7主要用于芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,而SM4、ZUC祖冲之算法分别是运用于无线局域网产品与移动通信4G网络中的国际标准密码算法。这里我们重点介绍SM4和ZUC。

1. SM4算法定义

SM4密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。

  1. 该算法的分组长度为128比特,密钥长度为128比特。(十六进制表示则为32位,明文和密钥等长)

  1. 加密算法与密钥扩展算法都采用32轮非线性迭代结构。

  1. 密钥扩展算法:将加密密钥变换为轮密钥的运算单元。

  1. 数据解密和数据加密的算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。


2. SM4算法的优势

国密算法SM4有安全高效的特点,在设计与实现方面有以下优势:

  • 对合运算:解密算法与加密算法相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

  • 子密钥生成算法与加密算法结构类似,在设计上做到资源重用。

  • 加密算法与密钥扩展算法都采用32轮非线性迭代结构,将128位的明文、密钥通过32次循环的非线性迭代运算得到最终结果。


3. 加密算法流程

SM4加密的整体流程框架:

或者参考

北卡科技的博客中的流程图:

SM4算法结构:

轮密钥生成:

32次非线性迭代:

3.1. 密钥扩展算法

密钥扩展算法:将加密密钥变换为轮密钥的运算单元。

轮密钥 rkirki 生成方法:

rki=Ki+4=Ki⊕T′(Ki+1⊕Ki+2⊕Ki+3⊕CKi), i=0,1,⋯,31rki=Ki+4=Ki⊕T′(Ki+1⊕Ki+2⊕Ki+3⊕CKi), i=0,1,⋯,31。

合成置换 T′:Z322→Z322T′:Z232→Z232 是一个可逆变换,由非线性变换 ττ 和线性变换 L′L′复合而成,即 T′(⋅)=L′(τ(⋅))T′(⋅)=L′(τ(⋅))。

线性变换 L′L′: L′(B)=B⊕(B<<<13)⊕(B<<<23)L′(B)=B⊕(B<<<13)⊕(B<<<23),其中 <<

非线性变换 ττ: τ(B)τ(B),ττ 由4个并行的S盒构成。

S盒为固定的8比特输入8比特输出的置换,记为 Sbox(⋅)Sbox(⋅)。
轮密钥由加密密钥生成。
FK=(FK0,FK1,FK2,FK3)FK=(FK0,FK1,FK2,FK3) 为系统参数[^1],CK=(CK0,CK1,⋯,CK31)CK=(CK0,CK1,⋯,CK31) 为固定参数[^2],用于密钥扩展算法,其中 FKi (i=0,⋯,3)FKi (i=0,⋯,3) 、CKi (i=0,⋯,31)CKi (i=0,⋯,31) 为字。

[^1]:系统参数 FKFK 的取值为: FK0=(A3B1BAC6), FK1=(56AA3350), FK2=(677D9197), FK3=(B27022DC)FK0=(A3B1BAC6), FK1=(56AA3350), FK2=(677D9197), FK3=(B27022DC)。

[^2]:固定参数 CKCK 的取值方法为:设 cki,jcki,j 为 CKiCKi 的第 jj 字节(i=0,1,⋯,31; j=0,1,2,3i=0,1,⋯,31; j=0,1,2,3),即 CKi=(cki,0,cki,1,cki,2,cki,3)CKi=(cki,0,cki,1,cki,2,cki,3),则 cki,j=(4i+j)×7(mod256)cki,j=(4i+j)×7(mod256)。

固定参数 CKi(i=0,1,⋯,31)CKi(i=0,1,⋯,31) 具体值为:

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

非线性变换 ττ

例如输入为 01 23 45 6701 23 45 67,则该 ττ 变换应为:90 F4 73 A290 F4 73 A2。(01→第0行第1列→9001→第0行第1列→90)

3.2. 轮函数 FF · 32次迭代

轮函数 FF 生成方法:

Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki),i=0,1,⋯,31Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki),i=0,1,⋯,31

合成置换 T:Z322→Z322T:Z232→Z232 是一个可逆变换,由非线性变换 ττ 和线性变换 LL复合而成,即 T(⋅)=L(τ(⋅))T(⋅)=L(τ(⋅))。

线性变换 LL: L(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24)L(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24)。

非线性变换 ττ: τ(B)τ(B),ττ 由4个并行的S盒构成。

3.3. 反序变换 RR


4. 解密算法

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

解密时,使用轮密钥序 rk31,rk30,⋯,rk0rk31,rk30,⋯,rk0。


5. 小结

先将128比特密钥 MKMK 扩展为32个轮密钥 rkrk,再将该轮密钥与128比特明文 XX 经过轮函数进行32次迭代后,选取最后四次迭代生成的结果 X32,X33,X34,X35X32,X33,X34,X35 进行反序变换,该变换结果作为最终的密文 YY 输出。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...