【密码学】四、SM4分组密码算法

SM4分组密码算法

  • 1、概述
    • 1.1初始变量算法
    • 1.2密钥扩展算法
    • 1.3轮函数F
      • 1.3.1合成置换T
      • 1.3.2S盒
  • 2、算法设计原理
    • 2.1非平衡Feistel网络
    • 2.2T变换
      • 2.2.1非线性变换τ
      • 2.2.2线性变换L
      • 2.2.3基础置换
    • 2.3密钥扩展算法的设计

1、概述

SM4分组密码算法是一种迭代分组密码算法,采用非平衡Feistel结构,分组长度为128bit,
①Z2e表示e-比特的向量集,Z232中的元素称为字,Z28中的元素称为字节
②S盒为固定的8bit输入8bit输出的置换,记为Sbox()
③⊕表示2bit异或;<<<i表示32bit循环左移i位
④密钥及密钥参量
加密密钥长度位128bit,表示MK=(MK0,MK1,MK2,MK3),分别是字。
轮密钥rk是由加密密钥生成。
FK是系统参数,CK是固定参数,用于密钥扩展算法。

1.1初始变量算法

反序变换为R(A0,A1,A2,A3)=(A3,A2,A1,A0)
算法的加密变换为:Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1i⊕Xi+2i⊕Xi+3i⊕rki)
(Y0,Y1,Y2,Y3)=R(X32,X33,X34,X35)=(X35,X34,X33,X32)
其中,F是轮函数,T是合成置换
加解密的结构相同,但是轮密钥的使用顺序不一样,加密的时候是0-31,解密的时候是31-0
加密流程图如下:
加密流程图
轮函数如图:
轮函数

1.2密钥扩展算法

轮密钥生成方法:

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

rki=K(i+4) = Ki⊕T’(Ki+1)⊕Ki+2⊕Ki+3⊕CKi
T’变换与加密算法轮函数的T基本相同,只是将线性变换L变成L’,也就是:
 L’(B)=B⊕(B<<<13)⊕(B<<<23)

常数FK的值:
FK0=(A3B1BAC6)
FK1=(56AA3350)
FK2=(677D9197)
FK3=(B27022DC)
固定参数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)
下面是32个固定参数CK的十六进制表示形式的具体值:
CK

1.3轮函数F

算法采用非线性迭代结构,以字为单位进行加密运算,称一次迭代运算为一轮变换。
F(X0,X1,X2,X3)=X0⊕T(X1⊕X2⊕X3⊕rk0)

1.3.1合成置换T

T是一个可逆变换,由非线性变换τ和线性变换L复合而成,即T(·)=L(r(·))
非线性变换r由4个并行的S盒组成,输出bi,输入ai,则bi=Sbox(ai)
非线性变换r的输出是线性变换L的输入。输出C,输入B,则
C=L(B)=B⊕(B<<<2)⊕(B<<<10)⊕(B<<<18)⊕(B<<<24)

1.3.2S盒

其中数据均为十六进制表示,设其输入为EF,则输出结果是第E行第F列的值,也就是Sbox(EF)=0x84
S盒
SM4分组密码算法的ECB模式:
ECB模式的工作方式的运算实例用以验证密码算法的正确性。
ECB

2、算法设计原理

2.1非平衡Feistel网络

平衡网络可以保证可逆性,可以构造高复杂度的f函数,不用在意其可逆性,也不需要实现加密和解密两种不同的算法,Feistel网络可以自动实现。但是现在设计的分组密码要求至少是128Bit,那么分组长度的增加就会导致轮函数f规模的增加。
非平衡Feistel网络将明文分为n个运算字,进行n次迭代就能将明文全部覆盖一遍。

2.2T变换

T变换是由非线性变换τ和线性变换L复合而成的,在SM4中起到了混淆和扩散的作用。

2.2.1非线性变换τ

τ变换是一种以字为单位的非线性代替变换,由4个S盒并置构成,本质上是S盒的一种并行应用,即将32位的字分为4个8位的字节分别进行S盒置换,因此其混淆作用体现在S盒中。

2.2.2线性变换L

L是以字为处理单位的线性变换,输入输出都是32位的字,主要起扩散作用。在异或和循环左移的结合运算下,可以使S盒输出值打乱,增加了各个输出值的相关性,使S盒的输出得到了扩散,使得密码算法能够抵抗拆分分析和线性分析。

2.2.3基础置换

基础置换的密码学性质决定明密文变换的效率。
SM4分组密码算法的单轮变换构成正形置换,其密码特性可以由正形置换的性质推出。
①SM4算法在不同密钥作用下的轮变换必然不同
②单轮变换在不同的密钥作用下,输入明文相同而输出比如不同

2.3密钥扩展算法的设计

子密钥是由加密密钥派生的,理论上子密钥总是统计相关的。密钥扩展算法的目的就是使子密钥间的统计相关性不易被破解利用,或者说使子密钥看上去更像是统计独立的。
①子密钥间不存在明显的统计相关性。
②没有弱密钥
③密钥扩展的速度不低于加密算法的速度,且资源占用少。
④由加密密钥可以直接生成任何一个子密钥。

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

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

相关文章

SERDES关键技术

目录 一、SERDES介绍 二、SERDES关键技术 2.1 多重相位技术 2.2 线路编解码技术 2.2.1 8B/10B编解码 2.2.2 控制字符&#xff08;Control Characters&#xff09; 2.2.3 Comma检测 2.2.4 扰码&#xff08;Scrambling&#xff09; 2.2.5 4B/5B与64B/66B编解码技术 2.3 包传…

【C++】-二叉搜索树的详解(递归和非递归版本以及巧用引用)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

LAXCUS分布式操作系统引领科技潮流,进入百度首页

信息源自某家网络平台&#xff0c;以下原样摘抄贴出。 随着科技的飞速发展&#xff0c;分布式操作系统做为通用基础平台&#xff0c;为大数据、高性能计算、人工智能提供了强大的数据和算力支持&#xff0c;已经成为了当今计算机领域的研究热点。近日&#xff0c;一款名为LAXCU…

一起学算法(栈篇)

1.栈的概念 1.栈的定义 栈是仅限在表尾进行插入和删除的线性表&#xff0c;栈又被称为先进后出的线性表&#xff0c;简称“LIFO” 我们这次用数组作为我们栈的底层数据结构&#xff0c;代码会放到结尾供大家参考使用 2.栈顶的定义 栈是一个线性表&#xff0c;我们允许插入…

Coremail中睿天下|2023年第二季度企业邮箱安全态势观察

7月24日&#xff0c;Coremail邮件安全联合中睿天下发布《2023第二季度企业邮箱安全性研究报告》&#xff0c;对2023第二季度和2023上半年的企业邮箱的安全风险进行了分析。 一、垃圾邮件同比下降16.38% 根据Coremail邮件安全人工智能实验室&#xff08;以下简称AI实验室&#…

【云原生-制品管理】制品管理的优势

制品介绍制品管理-DevOps制品管理优势总结 制品介绍 制品管理指的是存储、版本控制和跟踪在软件开发过程中产生的二进制文件或“制品”的过程。这些制品可以包括编译后的源代码、库和文档&#xff0c;包括操作包、NPM 和 Maven 包&#xff08;或像 Docker 这样的容器镜像&…

机器学习(一)---概述

文章目录 1.人工智能、机器学习、深度学习2.机器学习的工作流程2.1 获取数据集2.2 数据基本处理2.3 特征工程2.3.1 特征提取2.3.2 特征预处理2.3.3 特征降维 2.4 机器学习2.5 模型评估 3.机器学习的算法分类3.1 监督学习3.1.1 回归问题3.1.2 分类问题 3.2 无监督学习 1.人工智能…

【高级数据结构】并查集

目录 修复公路&#xff08;带扩展域的并查集&#xff09; 食物链&#xff08;带边权的并查集&#xff09; 修复公路&#xff08;带扩展域的并查集&#xff09; 洛谷&#xff1a;修复公路https://www.luogu.com.cn/problem/P1111 题目背景 A 地区在地震过后&#xff0c;连接…

数控机床主轴品牌选择及选型,如何维护和保养?

数控机床主轴品牌选择及选型&#xff0c;如何维护和保养&#xff1f; 数控机床是一种高精度、高效率、高自动化的机床。其中&#xff0c;主轴是数控机床的核心部件&#xff0c;承担着转动工件、切削加工的任务&#xff0c;决定了加工的转速、切削力度和加工效率。因此&#xff…

深空物联网通信中视频流的智能多路TCP拥塞控制|文献阅读|文献分析和学习|拥塞控制|MPTCP|SVC

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总https://blog.csdn.net/yu_cblog/categ…

前端构建(打包)工具发展史

大多同学的前端学习路线&#xff1a;三件套框架慢慢延伸到其他&#xff0c;在这个过程中&#xff0c;有一个词出现的频率很高&#xff1a;webpack 。 作为一个很出名的前端构建工具我们在网上随便一搜&#xff0c;就会有各种教程&#xff1a;loader plugin entry吧啦吧啦。 但…

企业可以申请DV https证书吗

DV https证书是有基础认证的数字证书&#xff0c;所以DV https证书也可以叫DV基础型https证书。DV基础型https证书是众多https证书中既支持个人&#xff0c;也支持企事业单位申请的https证书&#xff0c;所以企事业单位都可以申请DV基础型https证书&#xff0c;不论是企业门户网…

边写代码边学习之卷积神经网络CNN

1. 卷积神经网络CNN 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习神经网络的架构&#xff0c;主要用于图像识别、图像分类和计算机视觉等任务。它是由多层神经元组成的神经网络&#xff0c;其中包含卷积层、池化层和全连接…

【数据结构】实验十:哈夫曼编码

实验十 哈夫曼编码 一、实验目的与要求 1&#xff09;掌握树、森林与二叉树的转换&#xff1b; 2&#xff09;掌握哈夫曼树和哈夫曼编码算法的实现&#xff1b; 二、 实验内容 1. 请编程实现如图所示的树转化为二叉树。 2. 编程实现一个哈夫曼编码系统&#xff0c;系统功能…

C语言预备

安装Visual studio 官方网址 https://visualstudio.microsoft.com/zh-hans/ 选择第一个社区版本&#xff08;免费&#xff09; 下载完成后打开安装包 安装完成后会自动打开程序选择c项目然后安装即可&#xff08;c兼容c&#xff09; 安装完成后启动程序注意这里需要注册也可…

scrapy框架简单实现豆瓣评分爬取案例

豆瓣网址&#xff1a;https://movie.douban.com/top250 1.创建scrapy框架 scrapy startproject 项目名(scrapy_test_one)创建好以后的目录是这样的 2.创建spider文件 在spiders目录下创建一个spider_one.py文件&#xff0c;可以随意命名&#xff0c;该文件主要是让我们进行数…

树、二叉树(C语言版)详解

&#x1f355;博客主页&#xff1a;️自信不孤单 &#x1f36c;文章专栏&#xff1a;数据结构与算法 &#x1f35a;代码仓库&#xff1a;破浪晓梦 &#x1f36d;欢迎关注&#xff1a;欢迎大家点赞收藏关注 文章目录 &#x1f34a;树的概念及结构1. 树的概念2. 树的相关概念3.树…

解决sonar的单元测试的覆盖率会为0问题

今天做项目遇到一个问题&#xff0c;明明做单元测试时覆盖率已经百分百了&#xff0c;然后传到Jenkin上&#xff0c;构建也成功了&#xff0c;但偏偏覆盖率就是为零&#xff0c;非常确定代码没有问题&#xff0c;所以唯一的问题就是出现在配置上了。 一开始的结果如下&#xf…

css 利用模糊属性 制作水滴

<style>.box {background-color: #111;height: 100vh;display: flex;justify-content: center;align-items: center;/* 对比度*/filter: contrast(20);}.drop {width: 150px;height: 159px;border-radius: 50%;background-color: #fff;position: absolute;/* 模糊 */filt…

Flowable-服务-微服务任务

目录 定义图形标记XML内容界面操作 定义 Sc 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Sc 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用springcloud的微服务使用。 图形标记 由于 Sc 任务不是 BPMN 2.0 规范的“官方”任务…