密码学基础——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算法适用于资源受限的物联网设备,提供高效的数据加密。
  • 政务和电信:在政府机密数据传输、电信通信加密等领域广泛应用。

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

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

相关文章

练习:对象数组 4

定义数组存储 4 个女朋友的对象。女朋友的属性:姓名、年龄、性别、爱好;要求1:计算出四个女朋友的平均年龄;要求2:统计年龄比平均值低的女朋友有几个?并把他们的所有信息打印出来。 代码: //对…

React Hooks 基础指南

React Hooks 是 React 16.8 引入的重要特性,它允许开发者在函数组件中使用状态和其他 React 特性。本文将详细介绍 6 个最常用的 React Hooks。 1. useState useState 是最常用的 Hook,用于在函数组件中添加 state。 import React, { useState } from…

【Python 算法零基础 4.排序 ⑥ 快速排序】

既有锦绣前程可奔赴,亦有往日岁月可回首 —— 25.5.25 选择排序回顾 ① 遍历数组:从索引 0 到 n-1(n 为数组长度)。 ② 每轮确定最小值:假设当前索引 i 为最小值索引 min_index。从 i1 到 n-1 遍历,若找到…

处理git没做修改,但是文件显示变更的情况

使用 TortoiseGit(小乌龟 Git) 时遇到 “文件内容没改,但显示为变更,提示有 n 行删除、n 行添加”,你可以按照以下步骤操作来排查并解决问题: ✅ 一、定位问题根源(是否为行尾差异)…

智慧货运飞船多维度可视化管控系统

图扑搭建智慧货运飞船可视化系统,借数字孪生技术,高精度复刻货运飞船外观、结构与运行场景。整合多维度数据,实时呈现飞行状态、设备参数等信息,助力直观洞察货运飞船运行逻辑,为航天运维、任务推演及决策提供数字化支…

maven微服务${revision}依赖打包无法识别

1、场景描述 我现在又一个微服务项目&#xff0c;父pom的版本&#xff0c;使用<properties>定义好&#xff0c;如下所示&#xff1a; <name>ypsx-finance-center</name> <artifactId>ypsx-finance</artifactId> <packaging>pom</pack…

详解代理型RAG与MCP服务器集成

检索增强型生成(RAG)将语言模型与外部知识检索相结合,让模型的回答基于最新的事实,而不仅仅是其训练数据呢。 RAG(高级别) 在 RAG 流程中,用户查询用于搜索知识库(通常通过向量数据库中的嵌入来实现),并将检索到的最相关文档“增强”到模型的提示中,以帮助生成事实…

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…

如何防止服务器被用于僵尸网络(Botnet)攻击 ?

防止服务器被用于僵尸网络&#xff08;Botnet&#xff09;攻击是关键的网络安全措施之一。僵尸网络是黑客利用大量被感染的计算机、服务器或物联网设备来发起攻击的网络。以下是关于如何防止服务器被用于僵尸网络攻击的技术文章&#xff1a; 防止服务器被用于僵尸网络&#xff…

贪心算法应用:硬币找零问题详解

贪心算法与硬币找零问题详解 贪心算法&#xff08;Greedy Algorithm&#xff09;在解决优化问题时表现出简洁高效的特点&#xff0c;尤其适用于特定结构的组合优化问题。本文将用2万字篇幅&#xff0c;深入探讨贪心算法在硬币找零问题中的应用&#xff0c;覆盖算法原理、正确性…

Java高级 | 【实验一】Springboot安装及测试 |最新

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 目录 一、SpringBoot的特点 二、Spring Boot安装及测试 &#xff08;一&#xff09;安装Intellij IDEA &#xff08;二&#xff09;安装MySQL &#xff08;三&#xff09;安装postma…

C# WPF 左右布局实现学习笔记(1)

开发流程视频&#xff1a; https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码&#xff1a; GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用&#xff08;.NET Framework) 2.…

从零开始,学会上传,更新,维护github仓库

以下是一份从头到尾、覆盖安装、配置、创建仓库、上传项目到 GitHub 的完整教程。全程使用通用示例&#xff0c;不包含任何具体的仓库链接&#xff0c;仅供参考。 一、准备工作 1. 注册 GitHub 账号 打开浏览器&#xff0c;访问 GitHub 官网&#xff08;输入 “GitHub” 即可找…

使用 Docker Compose 从零部署 TeamCity + PostgreSQL(详细新手教程)

JetBrains TeamCity 是一款专业的持续集成&#xff08;CI&#xff09;服务器工具&#xff0c;支持各种编程语言和构建流程。本文将一步一步带你用 Docker 和 Docker Compose 快速部署 TeamCity&#xff0c;搭配 PostgreSQL 数据库&#xff0c;并确保 所有操作新手可跟着做。 一…

微软推出SQL Server 2025技术预览版,深化人工智能应用集成

在Build 2025 大会上&#xff0c;微软向开发者社区开放了SQL Server 2025的测试版本。该版本的技术改进主要涵盖人工智能功能集成、系统性能优化与开发工具链升级三个维度&#xff0c;展示了数据库管理系统在智能化演进方向上的重要进展。 智能数据处理功能更新 新版本的技术亮…

企业管理中,商业智能BI主要做哪些事情?

开门见山的告诉大家&#xff0c;在企业管理中商业智能BI 主要就做三件事&#xff1a;拉通数据、整合数据、数据可视化展现。 技术角度的商业智能BI 从技术的角度来讲&#xff0c;商业智能BI是一套完整的由数据仓库、查询报表、数据分析等组成的数据类技术解决方案。它有一个非…

openharmony5.0.0中kernel子系统编译构建流程概览(rk3568)

概述 在梳理openharmony对linux内核做了哪些更改时&#xff0c;简单梳理了下kernel部分的编译构建流程&#xff0c;并根据源码做了简单论证。分享出来&#xff0c;希望对大家有所帮助。 系统版本:openharmony5.0.0 开发板:dayu200 编译环境:ubuntu22 执行流程 在kernel\l…

考研系列—操作系统:冲刺笔记(4-5章)

目录 第四章 文件管理 1.真题总结文件管理方式 (1)目录文件的FCB就是“目录名-目录地址” (2)普通文件的FCB (3)区分索引文件、顺序文件、索引分配 (4)文件的物理结构 ①连续分配方式 ②链接分配 ③索引分配-使用索引表(一个文件对应一张索引表!!!) 计算考点:超级…

配置URDF模型,调整模型中部件的形状/尺寸,以及在ROS2的Rviz2中进行可视化。

配置URDF模型&#xff0c;调整模型中部件的形状/尺寸&#xff0c;以及在ROS2的Rviz2中进行可视化。 提问 在 ROS2 的rviz2 里面&#xff0c;urdf模型哪些部分选择可视化&#xff0c;哪些部分暂时不呈现在界面上&#xff0c;怎么在rviz2中操作&#xff1f; 回答 在 ROS2 的 …

基于SpringBoot+Vue2的租房售房二手房小程序

角色&#xff1a; 管理员、房东、租客/买家 技术&#xff1a; springbootvue2mysqlmybatispagehelper 核心功能&#xff1a; 租房售房小程序是一个专注于房屋租赁和销售的综合性平台&#xff0c;基于SpringBootVue2MySQLMyBatisPageHelper技术栈开发&#xff0c;为用户提供…