SM4 简介

SM4

  我国国家密码管理局在20012年公布了无线局域网产品使用的SM4密码算法——商用密码算法。它是分组算法当中的一种,算法特点是设计简沽,结构有特点,安全高效。数据分组长度为128比特,密钥长度为128 比特。加密算法与密钥扩展算法都采用32轮迭代结构。SM4密码算法以字节(8位)和字(32位)作为单位进行数据处理。SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。

SM4基本算法

SM4密码算法使用的基本运算为异或和循环移位。

  • 异或:⊕,32位异或运算

  • 循环移位:<<<i,把32位字循环左移i位

  • 字:(32位)

SM4基本密码部件

  1. S盒

SM4的S盒是一种以字节为单位的非线性代替变换,它的密码学作用是可以起到混淆的作用。S盒的本质是8位的非线性置换,输入和输出都是8位的字节。设输入字节为a,输出字节为b, 则S盒的运算可表示为:

b=S_Box(a)                               													 (2-10)

在这里插入图片描述

  1. 非线性变换τ

SM4的非线性变换τ的本质是S盒的一种并行应用,它由4个S盒并置构成,是用字来作为单位的一种非线性代替变换。

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

B=τ(A)=(S_box(a0),S_box(al),S_box(a2),S_box(a3))                           				(2-20)
  1. 线性变换部件L

线性变换部件L的密码学作用为可以起到扩散。它是以字来作为处理单位的线性变换部件,输入输出的字都是32位。

设L的输入为字B,输出为字C,则

C=L(B)=B⊕(B<<<2)⊕ B<<<10)⊕(B<<<18)⊕(B<<<24)                 								(2-21)
  1. 合成变换T

合成变换T的数据处理单位为字,是由非线性变换τ和线性变换部件L两者复合而组成的。设输入的字为X,则需要先对X进行一个非线性τ变换,然后再进行线性L变换,可记为

T(X)=L(τ(X))                                												(2-22)

合成变换T由于是非线性变换τ和线性变换部件L两者的一个复合,因此它可以同时起到混淆以及扩散的作用,由此可以大大地加强了密码的安全性。

SM4的轮函数

SM4密码算法的结构采用了对基本轮函数进行迭代,它的一个轮函数可以由以上这些基本的密码部件来构成,这是一种用字来作为处理单位的密码函数。

设轮函数F的输入为(X0,X1,X2, X3),四个32位字,一共有128位。轮密钥为rk ,rk也是一个32位的字。轮函数F的输出也是一个32位的字。轮函数F的运算由式(2-23)给出:

F(X0,X1,X2,X3,rk)=X0⊕T(X1⊕X2⊕X3⊕rk)                        								(2-23)

根据式(2-22),

F(X0,X1,X2,X3,rk)=X0⊕L(τ(X1⊕X2⊕X3⊕rk))

简记B=(X1⊕X2⊕X3⊕rk),根据式(2-20)和(2-21),有

F(X0,X1,X2,X3,rk)=X0⊕[S_box(B)]⊕[S_box(B)<<<2]⊕[S_box(B)<<<10]⊕[S_box(B)<<<18]⊕[S_box(B)<<<24]

轮函数的结构可以用图2-14来表示,其中S为S盒变换。

SM4的轮函数

SM4的加密算法

SM4密码算法德的数据分组长度为128比特,密钥长度也是128比特,是分组算法当中的一种。它采用32轮迭代结构来作为它的加密算法,每轮使用一个轮密钥。设输入的明文为四个字(X0,X1,X2, X3),一共有128位。输入轮密钥为rki,i=O,1,…,31,一共32个字。输出密文为四个字(Y0,Y1,Y2, Y3),128位。则这个加密算法可描述如下。

加密算法:
加密算法

SM4加密算法的框图为图2-15所示

在这里插入图片描述

SM4的加密算法和DES、AES的结构一样,均采用了基本函数迭代,但SM4也有一些不同的加密迭代处理特点。由图2-15可以看出,SM4的加密法代处理方式具有密文反馈连接和流密码的某一些特点,前一轮加密的结果与前一轮的加密数据拼接起来供下一轮加密处理。一次加密处理四个字,然后产生一个字的中间密文,这个中间密文和前三个字拼接起来后再供下一次加密处理,一共会迭代加密处理32轮,产生出四个字的密文。这个加密处理的整个过程就像一个宽度为4个字的窗口在滑动,加密处理完一轮,窗口就滑动一个字,窗口一共滑动32次后加密迭代就结束了。

SM4的解密算法

由于SM4密码算法的运算是对合运算,所以它的解密算法结构是和加密算法的结构一样的,不同的是轮密钥的使用顺序,解密和加密的是相反的,也就是说解密的轮密钥是加密的轮密钥的逆序。

设输入的密文为(X0,X1,X2, X3),输入轮密钥为rki,i=31,30,…,1,0,输出的明文为(Y0,Y1,Y2, Y3)。则这个姐密算法可描述如下。

解密算法:

在这里插入图片描述

SM4的密钥扩展算法

SM4密码算法采用32轮的迭代加密结构,拥有128位加密密钥,一共使用32轮密钥,每一轮的加密使用32位的一个轮密钥。SM4算法的特点使得它需要使用一个密钥扩展算法,在加密密钥当中产生32个轮密钥。在这个密钥的扩展算法当中有常数FK、固定参数CK这两个数值,利用这两个数值便可完成它的这一个扩展算法。

  1. 常数FK

密钥扩展当中使用的常数为以下几个:

FK0=(A3B1BAC6),FK1=(56AA3350),FK2=(677D9197), FK3=(B27022DC)。
  1. 固定参数CK

一共使用有32个固定参数CKi,这个CKi,是一个字,它的产生规则是:

设cki,j为CKi的第j字节(i=0,1,…,31;j=0,1,2,3),即CKj=(cki,0,cki,1,cki,2,cki,3),

则	cki,j=(4i+j)×7(mod 256)                											(2-26)

这32个固定参数如下(十六进制) :

  00070e15, 1c232a31, 383f64d,  545b6269,70777e85, 8c939aa1, a8afb6bd, c4cbd2d9,e0e7eef5, fc030a11, 181f262d, 343b4249,50575e65, 6c737a81, 888f969d, a4abb2b9,c0c7ced5, dce3eafl, f8ff060d, 141b2229,30373e45, 4c535a61, 686f767d, 848b9299,a0a7aeb5, bcc3cad1, d8dfe6ed, f4fb0209,10171e25, 2c333a41, 484f565d, 646b7279。
  1. 密钥扩展算法

假设输入的加密密钥为MK= (MK0,MK1,MK2,MK3 ),输出的轮密钥为rki, i=0,1…,30,31,中间的数据为Ki=0,1,…,34,35。则密钥扩展算法可描述如下。

密钥扩展算法:

  ①(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,,MK2⊕FK2,MK3⊕FK3)②For i=0,1,…,30,31 Dorki=K(i+4)=Ki⊕T'(K(i+1)⊕K(i+2)⊕K(i+3)⊕CKi)

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

  L'(B)=B⊕(B<<<13)⊕(B<<<23)

从密钥扩展算法中我们分析后可以发现,密钥扩展算法与加密算法在算法结构方面类似,同样都是采用了32轮类似的迭代处理。

需要特别注意的是密钥扩展算法采用了非线性变换τ,这个措施将会使密钥扩展的安全性大大地加强了。在这方面上SM4和AES密码类似,而DES的子密钥生产算法并没有采用这种类似措施。

SM4 的安全性

SM4密码算法在我国,是用来做商用密码算法的,它由我国专业的密码机构设计,主要在无线局域网产品的安全保密这方面上使用。经过我国专业密码机构的充分分析测试,SM4密码算法可以抵抗差分攻击、线性攻击等现有攻击,因此它是安全的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九大内置对象

指在JSP的<%%> 和<% %>中可以直接使用的对象&#xff1a;没有特别说明可以开关的默认是开启的 一servlet理论上可以处理多种形式的请求响应形式http只是其中之一所以HttpServletRequest HttpServletResponse分别是ServletRequest和ServletResponse的之类 二 Http…

3)机器学习基石笔记 Lecture3:Types of Learning

目录 1&#xff09;Learning with Different Output Space Y 2&#xff09;Learning with Different Data Label 3&#xff09;Learning with Different Protocol 4&#xff09;Learning with Different Input Space X 在上一节课中&#xff0c;我们学到了第一个机器学习…

【BZOJ - 3436】小K的农场(差分约束)

题干&#xff1a; 背景 小K是个特么喜欢玩MC的孩纸。。。 描述 小K在MC里面建立很多很多的农场&#xff0c;总共n个&#xff0c;以至于他自己都忘记了每个农场中种植作物的具体数量了&#xff0c;他只记得 一些含糊的信息&#xff08;共m个&#xff09;&#xff0c;以下列…

分组密码简介和五大分组模式

分组密码 分组密码&#xff08;blockcipher&#xff09;是每次只能处理特定长度的一块数据的一类密码算法&#xff0c;这里的一块"就称为分组&#xff08;block&#xff09;。此外&#xff0c;一个分组的比特数就称为分组长度&#xff08;blocklength&#xff09;。例如&…

Java Web(五) JSP详解(四大作用域九大内置对象等)

前面讲解了Servlet&#xff0c;了解了Servlet的继承结构&#xff0c;生命周期等&#xff0c;并且在其中的ServletConfig和ServletContext对象有了一些比较详细的了解&#xff0c;但是我们会发现在Servlet中编写一些HTML代码&#xff0c;是很不方便的一件事情&#xff0c;每次都…

Apollo进阶课程 ⑤ | Apollo硬件开发平台介绍

目录 1&#xff09;Uber事故原因分析 2&#xff09;自动驾驶的第一天条-----安全 3&#xff09;自动驾驶汽车的硬件系统 4&#xff09;自动驾驶汽车感知类传感器介绍 5&#xff09;自动驾驶汽车的传感器 6&#xff09;自动驾驶的计算单元 7&#xff09;自动驾驶的线控系…

使用tcpdump,adb进行手机抓包

准备 手机 root PC安装ADB 下载压缩包&#xff0c;解压即可 链接&#xff1a;https://pan.baidu.com/s/1Hv-IqpQutBVTHuriakQUTg 提取码&#xff1a;q57q 配置环境变量 在系统环境Path中添加 adb.exe 的地址 验证安装 adb version 出现版本&#xff0c;即为成功 开启adb服…

依赖注入和控制反转的理解,写的太好了。

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) 、DI(依赖注入)这两个概念&#xff0c;对于初学Spring的人来说&#xff0c;总觉得IoC 、DI这两个概念是模糊不清的&#xff0c;是很难理解的&#xff0c;今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及…

Apollo进阶课程 ⑥ | 高精地图与自动驾驶的关系

目录 1&#xff09;高精地图与自动驾驶 2&#xff09;什么是高精地图 3&#xff09;高精地图与导航地图 4&#xff09;高精地图---无人驾驶的核心基础模块 5&#xff09;高精地图与定位模块的关系 6&#xff09;高精地图与感知模块的关系 7&#xff09;高精地图与规划、…

【POJ - 1275】Cashier Employment(差分约束,建图)

题干&#xff1a; A supermarket in Tehran is open 24 hours a day every day and needs a number of cashiers to fit its need. The supermarket manager has hired you to help him, solve his problem. The problem is that the supermarket needs different number of c…

InfluxDB 简介、安装和简单使用

简介 InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go写成&#xff0c;着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据&#xff0c;IoT行业的实时数据等场景。可以理解为按时间记录一些数据&#xff08;常用的监控数据、埋点统计数据…

4)机器学习基石笔记 Lecture4:Feasibility of Learning

目录 1&#xff09;Learning is Impossible 2&#xff09;Probability to the Rescue 3&#xff09;Connection to Learning 4&#xff09;Connection to Real Learning 上节课我们主要介绍了机器学习问题的类型&#xff0c;主要是二元分类和回归问题。本节课&#xff0c;我…

Java注解全面解析

1.基本语法 注解定义看起来很像接口的定义。事实上&#xff0c;与其他任何接口一样&#xff0c;注解也将会编译成class文件。 Target(ElementType.Method)Retention(RetentionPolicy.RUNTIME)public interface Test {} 除了符号以外&#xff0c;Test的定义很像一个空的接口。…

ubuntu18.04下安装grafana6和简单使用

ubuntu18.04下安装grafana6 环境 ubuntu18.04 下载 sudo apt-get install -y adduser libfontconfig1 # 使用wget 下载会很慢 # 推荐百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1y2I4LwuslB5kHAZwV8RNxw 提取码&#xff1a;o19t # 或者csdn&#xff1a;[gr…

VMware虚拟机下安装Ubuntu16.04镜像完整教程

目录 1&#xff09;安装前准备 2&#xff09;安装Ubuntu 16.04镜像 3&#xff09;One More Thing 1&#xff09;安装前准备 PC电脑操作系统是WIN7&#xff0c;已正确安装虚拟机VMware 12。 2&#xff09;安装Ubuntu 16.04镜像 下载Ubuntu镜像文件&#xff0c;下载链接为…

JAVA 注解的基本原理

以前&#xff0c;『XML』是各大框架的青睐者&#xff0c;它以松耦合的方式完成了框架中几乎所有的配置&#xff0c;但是随着项目越来越庞大&#xff0c;『XML』的内容也越来越复杂&#xff0c;维护成本变高。 于是就有人提出来一种标记式高耦合的配置方式&#xff0c;『注解』…

查看ubuntu系统的版本信息

目录 1&#xff09;查看linux内核、gcc版本、ubuntu版本 2&#xff09;显示linux的内核版本和系统是多少位 1&#xff09;查看linux内核、gcc版本、ubuntu版本 显示如下 Linux version 4.15.0-29-generic (builddlcy01-amd64-024) linux内核版本号 gcc version 5.4…

框架基础——全面解析Java注解

阅读目录 一、概念二、Java中的常见注解三、注解的分类四、自定义注解五、注解的项目实战六、注解总结 为什么学习注解&#xff1f; 学习注解有什么好处&#xff1f; 学完能做什么&#xff1f; 答&#xff1a;1. 能够读懂别人写的代码&#xff0c;特别是框架相关的代码&…

CS231n Convolutional Neural Networks for Visual Recognition------Scipy and MatplotlibTutorial

源链接为&#xff1a;http://cs231n.github.io/python-numpy-tutorial/。 这篇指导书是由Justin Johnson编写的。 在这门课程中我们将使用Python语言完成所有变成任务&#xff01;Python本身就是一种很棒的通用编程语言&#xff0c;但是在一些流行的库帮助下&#xff08;numpy&…

Python之Numpy入门实战教程(1):基础篇

Numpy、Pandas、Matplotlib是Python的三个重要科学计算库&#xff0c;今天整理了Numpy的入门实战教程。NumPy是使用Python进行科学计算的基础库。 NumPy以强大的N维数组对象为中心&#xff0c;它还包含有用的线性代数&#xff0c;傅里叶变换和随机数函数。 强烈建议大家将本文中…