当前位置: 首页 > article >正文

密码学基础——SM4算法

 博客主页:christine-rr-CSDN博客

 ​​​​专栏主页:密码学 

📌 【今日更新】📌

对称密码算法——SM4

目录

一、国密SM系列算法概述

二、SM4算法

2.1算法背景

2.2算法特点

2.3 基本部件

2.3.1 S盒

2.3.2  非线性变换  ​编辑 

2.3.3 线性变换部件L

2.3.4合成变换 T

2.3.5轮函数

2.3.6 加密算法

2.3.7 解密算法

2.3.8 密钥扩展算法

2.4算法流程

 2.4.1 密钥扩展:

 2.4.2 轮函数(F函数):

2.4.3 加密过程:

 2.4.4 解密过程:

2.5 算法模式

2.6 安全性分析

2.7 应用场景


一、国密SM系列算法概述

        国密算法(SM系列)是由中国国家密码管理局制定的一系列密码算法标准,旨在保障信息安全,推动密码技术的自主可控。涵盖对称加密、非对称加密、哈希算法及身份认证等领域,广泛应用于金融、政务、通信等关键领域。以下是主要SM算法的分类及简介:

  • SM1、SM4、SM5、SM6、SM7、SM8、ZUC祖冲之密码:对称密码,
  • SM2、SM9:公钥密码 (非对称加密)
  • SM3:属于单向散列函数。
  • SM9:基于身份基加密(IBE)或叫标识密码的算法

目前我国主要使用公开的SM2、SM3、SM4作为商用密码算法。

其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用

二、SM4算法

2.1算法背景

        SM4算法是用于WAPI的分组密码算法,是2006年我国国家密码管理局公布的国内第一个商用密码算法,原名SMS4,2012年正式成为国家标准(GB/T 32907-2016),2021年成为国际标准(ISO/IEC 18033-3:2021/AMD1:2021)。

        SM4算法的设计目标是替代国际通用的AES算法,适用于无线局域网、金融支付、物联网等场景的数据加密。

2.2算法特点

  • 分组长度和密钥长度:SM4算法的分组长度和密钥长度均为128位(16字节)
  • 迭代轮数加密算法与密钥扩展算法都采用32轮非线性迭代结构,每轮使用一个轮密钥。
  • 算法结构:基于Feistel网络结构,但采用了非平衡的Feistel变体,结合了S盒替换、线性变换和密钥混合等操作。
  • 单位:以字节(8位)和字(32位)为单位进行数据处理。
  • 安全性:SM4算法的安全性经过严格评估,能够抵御差分攻击、线性攻击等常见密码分析方法。

2.3 基本部件

SM4密码算法的基本运算有模2加和循环移位。
  ① 模2加:记为,为32位逐比特异或运算。
  ② 循环移位:i,把32位字循环左移i位。

2.3.1 S盒

        S盒是以字节为单位的非线性替换,其密码学作用是混淆,它的输入和输出都是8位的字节。设输入字节为  ,输出字节为, 则S盒的运算可表示为:        

        S盒的替换规则如下,例如输入为EF,则输出为第E行与第F列交叉处的值84,即 S(EF)=84   。

 SM4密码算法的S盒 

SM4密码算法的S盒

2.3.2  非线性变换   

        非线性变换   是以字为单位的非线性替换,它由4个S盒并置构成。设输入为    (4个32位的字),输出为   (4个32位的字),则

   (3-1)

2.3.3 线性变换部件L

        线性变换部件L是以字为处理单位的线性变换,其输入输出都是32位的字,它的密码学作用是扩散。 设 L的输入为字B,输出为字C,则

(3-2)

2.3.4合成变换 T

        合成变换T由非线性变换和线性变换L复合而成,数据处理的单位是字。设输入为字 X,则先对 X进行非线性变换,再进行线性L变换。记为

 (3-3)

        由于合成变换 是非线性变换 和线性变换 的复合,所以它综合起到混淆和扩散的作用,从而可提高密码的安全性。

2.3.5轮函数

轮函数由上述基本密码部件构成。设轮函数  的输入为4个32位字共128位,轮密钥为一个32位的字   。输出也是一个32位的字,由下式给出:

根据式(3-3),有

记 ,根据式(3-1)和式(3-2),有

 

轮函数的结构如图所示

 SM4算法的加密算法和轮函数结构图

2.3.6 加密算法

        加密算法采用32轮迭代结构,每轮使用一个轮密钥。
        设输入的明文为四个字(128比特长),输入的轮密钥为,共32个字。输出的密文为四个字(128比特长)。加密算法可描述如下:
   
       
    为了与解密算法需要的顺序一致,同时也与人们的习惯顺序一致,在加密算法之后还需要一个反序处理:

3-4)    

2.3.7 解密算法

    解密算法与加密算法相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
    算法的输入为密文 和轮密钥,输出为明文。根据式。为了便于与加密算法对照,解密算法中仍然用表示密文。于是可得到如下的解密算法。

解密算法:
   
      
    与加密算法之后需要一个反序处理同样的道理,在解密算法之后也需要一个反序处理   :

2.3.8 密钥扩展算法

        SM4算法加密时输入128位的密钥,采用32轮迭代结构,每一轮使用一个32位的轮密钥,共使用32个轮密钥。使用密钥扩展算法,从加密密钥产生出32个轮密钥。

(1)常数FK
     在密钥扩展中使用如下的常数:


(2)固定参数
   共使用32个固定参数,每个是一个字,其产生规则如下:
   设的第字节,即,则   

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

    设输入的加密密钥为  ,输出轮密钥为  ,密钥扩展算法可描述如下,其中为中间数据:

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


    密钥扩展算法的结构与加密算法的结构类似,也是采用了32轮的迭代处理。

2.4算法流程

SM4算法的加密过程主要包括以下几个步骤:

 2.4.1 密钥扩展

  • 将128位的初始密钥通过密钥扩展算法生成32个32位的轮密钥。
  • 密钥扩展过程中使用了固定参数(CK)和系统参数(FK),确保密钥与轮函数之间的强关联性。

 2.4.2 轮函数(F函数)

  • 每轮迭代使用一个轮密钥,通过非线性变换(S盒)和线性变换(L函数)对数据进行处理。
  • S盒替换:将8位输入通过复合域S盒进行非线性替换,增强抗差分攻击能力。 
  • 线性变换:包括循环左移和异或操作,实现数据的高分支数扩散

2.4.3 加密过程

  • 将128位的明文分组分为4个32位的字(X₀, X₁, X₂, X₃)。
  • 通过32轮迭代,每轮使用一个轮密钥,生成新的中间状态。
  • 最后一轮后,将4个字逆序拼接,得到128位的密文。

 2.4.4 解密过程

  • 解密过程与加密过程相同,只是轮密钥的使用顺序相反。

2.5 算法模式

SM4算法支持多种工作模式,常见的有:

  • ECB(电子密码本模式):每个分组独立加密,安全性较低,不推荐用于加密大量数据。
  • CBC(密码分组链接模式):使用初始化向量(IV),每个分组的加密依赖于前一个分组的密文,安全性较高。
  • CTR(计数器模式):将块加密算法转换为流加密算法,适合并行加密,安全性高。

2.6 安全性分析

  • 密钥空间:128位的密钥长度提供了足够大的密钥空间,理论上可抵御暴力破解。
  • 抗攻击能力:SM4算法的S盒设计和线性变换结构能够有效抵御差分攻击、线性攻击等常见密码分析方法。
  • 国际认可:SM4算法已成为国际标准,表明其设计通过了国际密码学界的审查。

2.7 应用场景

  • 无线局域网(WLAN):SM4算法是中国无线局域网标准(WAPI)中推荐的加密算法。
  • 金融支付:在移动支付、网上银行等场景中,SM4算法用于保护敏感数据。
  • 物联网(IoT):SM4算法适用于资源受限的物联网设备,提供高效的数据加密。
  • 政务和电信:在政府机密数据传输、电信通信加密等领域广泛应用。

相关文章:

密码学基础——SM4算法

博客主页:christine-rr-CSDN博客 ​​​​专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

车载诊断架构 --- ZEVonUDS(J1979-3)简介第一篇

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

机器学习的数学基础:线性模型

线性模型 线性模型的基本形式为: f ( x ) ω T x b f\left(\boldsymbol{x}\right)\boldsymbol{\omega}^\text{T}\boldsymbol{x}b f(x)ωTxb 回归问题 利用最小二乘法,得到 ω \boldsymbol{\omega} ω和 b b b的参数估计$ \boldsymbol{\hat{\omega}}…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...

前端调试HTTP状态码

1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...

[特殊字符] 手撸 Redis 互斥锁那些坑

📖 手撸 Redis 互斥锁那些坑 最近搞业务遇到高并发下同一个 key 的互斥操作,想实现分布式环境下的互斥锁。于是私下顺手手撸了个基于 Redis 的简单互斥锁,也顺便跟 Redisson 的 RLock 机制对比了下,记录一波,别踩我踩过…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...

flow_controllers

关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

TJCTF 2025

还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

C# winform教程(二)----checkbox

一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题: pgsql数据库通过备份数据库文件进行还原时,如果表中有自增序列,还原后可能会出现重复的序列,此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”,…...

【实施指南】Android客户端HTTPS双向认证实施指南

🔐 一、所需准备材料 证书文件(6类核心文件) 类型 格式 作用 Android端要求 CA根证书 .crt/.pem 验证服务器/客户端证书合法性 需预置到Android信任库 服务器证书 .crt 服务器身份证明 客户端需持有以验证服务器 客户端证书 .crt 客户端身份…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日,嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》,海云安高敏捷信创白盒(SCAP)成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天,网络安全已成为企业生存与发展的核心基石,为了解…...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

基于开源AI智能名片链动2 + 1模式S2B2C商城小程序的沉浸式体验营销研究

摘要:在消费市场竞争日益激烈的当下,传统体验营销方式存在诸多局限。本文聚焦开源AI智能名片链动2 1模式S2B2C商城小程序,探讨其在沉浸式体验营销中的应用。通过对比传统品鉴、工厂参观等初级体验方式,分析沉浸式体验的优势与价值…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前,首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例,用_OBJECT_TYPE这个结构来解析它,0x80处就是今天要介绍的回调链表,但是先不着急,先把目光…...

TCP/IP 网络编程 | 服务端 客户端的封装

设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...

数据库——redis

一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...

Java后端检查空条件查询

通过抛出运行异常&#xff1a;throw new RuntimeException("请输入查询条件&#xff01;");BranchWarehouseServiceImpl.java // 查询试剂交易&#xff08;入库/出库&#xff09;记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...