国密SM4分组密码算法

news2024/11/25 23:03:02

前言

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

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

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

什么是商用密码?

商密,全称商用密码,是国家密码局认定的国产密码算法,又称国密算法,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括对称算法(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),其中 <<<i<<<i 表示32位循环左移 ii 位。

非线性变换 ττ: τ(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 输出。

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

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

相关文章

06 电力电子仿真 MATLAB/Simulink

文章目录01 单相半波整流电路02 单相全波整流电路&#xff08;子系统封装模块&#xff09;03 三相桥式整流电路&#xff08;三相模块与示波器使用&#xff09;04 相控与斩控交交调压&#xff08;THD计算&#xff09;05 Buck电路&#xff08;PWM实现与闭环反馈&#xff09;06 单…

【STL】Vector剖析及模拟实现

✍作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;C vector的常用接口 首先贴上&#xff1a;vector的文档介绍,以备查阅使用。 vector的基本框架&#xff1a; vector的成员变量分别是空间首部分的_start指针和最后一个元素的下一个位置的_finish指针&#xff0c;以…

Tomcat安装及启动

日升时奋斗&#xff0c;日落时自省 目录 1、Tomcat下载 2、JDK安装及配置环境 3、Tomcat配置环境 4、启动Tomcat 5、部署演示 1、Tomcat下载 直接入主题&#xff0c;下载Tomcat 首先就是别下错了&#xff0c;直接找官方如何看是不是广告&#xff0c;或者造假 搜索Tomc…

【强度混合和波段自适应细节融合:PAN-Sharpening】

Intensity mixture and band-adaptive detail fusion for pansharpening &#xff08;用于全色锐化的强度混合和波段自适应细节融合&#xff09; 全色锐化的目的是通过高分辨率单通道全色&#xff08;PAN&#xff09;图像锐化低分辨率多光谱&#xff08;MS&#xff09;图像&a…

ChatGPT、人工智能、人类和一些酒桌闲聊

© 2023 Conmajia Initiated 10th March, 2023 昨天跟某化学家喝酒&#xff0c;期间提到了 ChatGPT。他的评价是&#xff1a;这鬼东西大量输出毫无意义、错漏百出甚至是虚假的信息&#xff0c;“in a confident accent”。例如某次 GPT 针对“描述某某记者”这一问题&#…

C++的入门

C的关键字 C总计63个关键字&#xff0c;C语言32个关键字 命名空间 我们C的就是建立在C语言之上&#xff0c;但是是高于C语言的&#xff0c;将C语言的不足都弥补上了&#xff0c;而命名空间就是为了弥补C语言的不足。 看一下这个例子。在C语言中会报错 #include<stdio.h>…

【C++】C++11——左右值|右值引用|移动语义|完美转发

文章目录一、左值与右值1.概念2.引用3.注意二、右值引用的意义1.左值引用意义2.右值引用和移动语义3.容器新增三、万能引用四、完美转发一、左值与右值 1.概念 左值是什么&#xff1f;右值是什么&#xff1f; 左值是一个表示数据的表达式&#xff08;如变量名或解引用的指针&…

学校学生心理测评系统

青少年在线心理测评系统 这款系统&#xff0c;是和北大合作开发&#xff0c;并真实用于线上测评场景&#xff0c;该项目有完整后台&#xff0c;以及学生管理等模块。 我们欢迎以下形式合作&#xff1a; 单纯研究项目。合作对该测评平台进行升级。单纯使用。 请联系我们 silv…

MyBatis里面用了多少种设计模式?

在MyBatis的两万多行的框架源码中&#xff0c;使用了大量的设计模式对工程架构中的复杂场景进行解耦&#xff0c;这些设计模式的巧妙使用是整个框架的精华。经过整理&#xff0c;大概有以下设计模式&#xff0c;如图1所示。图101类型&#xff1a;创建型模式▊ 工厂模式SqlSessi…

英飞凌Tricore原理及应用介绍04_中断请求及仲裁过程

目录1.概述2. 中断请求及过程仲裁3. 中断传到CPU会被即时响应吗&#xff1f;1.概述 在Tricore架构中允许有多个中断源包括片上外设及外部中断世间产生的中断请求&#xff0c;以打断中断服务的提供者如CPU或DMA通道&#xff0c;那你知道在Tricore里中断请求在内核中的仲裁及处理…

【java基础】ArrayList源码解析

文章目录基本介绍构造器指定初始容量默认创建通过集合创建添加add扩容机制批量添加addAll添加指定位置add添加多个元素到指定位置addAll删除删除指定元素remove删除指定索引元素remove条件删除removeIf批量删除removeAll修改修改指定位置set替换所有满足要求元素replaceAll一些…

vscode环境配置(支持跳转,阅读linux kernel)

目录 1.卸载clangd插件 2.安装C插件 3. 搜索框内输入 “intell”&#xff0c;将 C_Cpp&#xff1a;Intelli Sense Engine 开关设置为 Default。 4.ubuntu安装global工具 5.vscode安装插件 6.验证是否生效 7.建立索引 1.卸载clangd插件 在插件管理中卸载clangd插件 2.安…

课设-机器学习课设-实现新闻分类

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a;课设-机器学习 &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;…

linux下安装SonarQube

目录1. 准备安装环境2. 安装postgres数据库3. 安装SonarQube4. 使用SonarQube1. 准备安装环境 这里安装SonarQube的系统环境是Red Hat Enterprise Linux release 8.7 &#xff0c;然后将jdk的压缩包&#xff08;jdk-17.0.2_linux-x64_bin.tar.gz&#xff09;和sonarQube的压缩…

Web Components学习(2)-语法

一、Web Components 对 Vue 的影响 尤雨溪在创建 Vue 的时候大量参考了 Web Components 的语法&#xff0c;下面写个简单示例。 首先写个 Vue 组件 my-span.vue&#xff1a; <!-- my-span.vue --> <template><span>my-span</span> </template>…

Spring——spring整合JUnit

JUnit定义: Junit测试是程序员测试&#xff0c;即所谓 白盒测试 &#xff0c;因为程序员知道被测试的软件如何&#xff08;How&#xff09;完成功能和完成什么样&#xff08;What&#xff09;的功能。 Junit是一套框架&#xff0c;继承TestCase类&#xff0c;就可以用Junit进行…

基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)

目录 一、什么是Selenium&#xff1f; 二、自动化测试框架 三、自动化框架的设计和实现 四、需要改进的模块 五、总结 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 一、什么是Selenium&#xff1f; …

SpringBoot bean 加载顺序如何查看(源码解读)

背景 SpringBoot bean 加载顺序如何查看&#xff0c;想看加载了哪些bean&#xff0c; 这些bean的加载顺序是什么&#xff1f; 实际加载顺序不受控制&#xff0c;但会有一些大的原则&#xff1a; 1、按照字母顺序加载&#xff08;同一文件夹下按照字母数序&#xff1b;不同文件…

界面开发(4)--- PyQt5实现打开图像及视频播放功能

PyQt5创建打开图像及播放视频页面 上篇文章主要介绍了如何实现登录界面的账号密码注册及登录功能&#xff0c;还简单介绍了有关数据库的连接方法。这篇文章我们介绍一下如何在设计的页面中打开本地的图像&#xff0c;以及实现视频播放功能。 实现打开图像功能 为了便于记录实…

CobaltStrike攻击payload(有效载荷)介绍

HTA文档Office宏payload生成器有效载荷生成器windows可执行程序windows可执行程序windows stageless生成所有有效载荷HTA文档该模块为HTML Application attack&#xff08;HTML应用攻击&#xff09;。简单来说&#xff0c;就是这个包生成一个运行有效负载的HTML应用程序该模块下…