国家商用密码算法——SM1、SM2、SM3

news2024/9/19 20:22:48

1、SM1

  • SM1 是中国国家密码管理局(SCA)发布的国密算法之一,属于对称加密算法,其分组长度、秘钥长度都是128bit
    • 【注】对称加密算法是一种使用相同密钥进行数据加密和解密的加密方式。在这种算法中,发送方和接收方共享同一个密钥,发送方使用该密钥对明文进行加密,生成密文;接收方则使用相同的密钥对密文进行解密,恢复出原始的明文。
  • 由于 SM1 是机密算法,其具体实现细节未公开,仅以IP核的形式存在于芯片中,需要通过加密芯片的接口进行调用。主要用于高安全性要求的场合,如金融和政务系统。
  • 不过,SM1 类似于其他对称加密算法(如 AES),可以进行高效的数据加密和解密操作,保证数据的机密性和完整性。
    • 【注】AES(高级加密标准)是目前全球广泛使用的一种对称加密算法。
      • AES 工作原理:AES 通过对数据进行多轮次的复杂数学变换来加密。每个轮次包括四个主要步骤:
        • 字节替代(SubBytes):通过 S 盒对数据块(128bit,16字节)中的每个字节进行替换,这是一个非线性替换过程。
        • 行移位(ShiftRows):将数据块中的字节按行循环左移不同的位数,增加混淆性。
        • 列混淆(MixColumns):将每列数据进行数学变换,使得字节之间的关系更加复杂。
        • 轮密钥加(AddRoundKey):将数据块与密钥进行异或操作,添加密钥的影响。
  • 具体来说,SM1算法将明文数据进行分组,把每个分组进行多次迭代进行加密。解密同理。

2、SM2

  • SM2 是中国国家密码管理局发布的一种基于椭圆曲线密码的公钥密码算法标准,其秘钥长度256bit,包含数字签名、密钥交换和公钥加密。SM2 常被用于替代国外的 RSA 算法。
    • 数字签名:SM2可以用于生成和验证数字签名,确保数据的完整性、真实性和不可否认性。
    • 加密解密:SM2支持公钥加密,允许发送方用接收方的公钥对信息加密,只有接收方可以用其私钥解密。
    • 密钥交换:SM2可以用于安全的密钥交换协议,确保通信双方能够在不泄露密钥的情况下协商出一个共享的加密密钥。
    • 【注】椭圆曲线在密码学中是指一种由特定数学方程定义的曲线,用于构建公钥加密算法。具体而言,椭圆曲线的方程形式通常为:y^2=x^3+ax+b
      • 其中,a 和 b 是常数,x 和 y 是曲线上的坐标点。椭圆曲线的关键特性在于:当我们在这条曲线上选取两个点并进行特定的数学操作(如“加法”或“点乘”),结果仍然会是曲线上的另一个点。这种特性为密码学算法提供了所需的代数结构。
  • SM2采用的是ECC 256位的一种。相比RSA,它在同等安全强度下需要更小的密钥长度,因此计算速度更快。

3、SM3

  • SM3 是中国国家密码管理局发布的一种密码杂凑算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成。
    • 【注】密码杂凑算法,也称为哈希函数,是一种将任意长度的输入数据通过特定算法转换为固定长度的输出数据(杂凑值或哈希值)的算法。哈希值具有固定的长度且看似随机,即便是输入数据的一点细微变化,输出的哈希值也会产生巨大的不同。这使得哈希算法在确保数据完整性和安全性方面扮演着重要角色。
  • SM3 是在SHA-256基础上改进实现的一种算法,采用Merkle-Damgard结构,消息分组长度为512bit,输出的摘要值长度为256bit。
    • 【注】SHA-256是SHA-2系列中最广泛使用的密码杂凑算法。工作原理:
      • 消息填充:首先将输入消息进行填充,使其长度达到512位的整数倍。填充方法是在消息末尾附加一个“1”位,接着添加若干“0”位,最后附加消息的原始长度。
      • 消息分块:填充后的消息被分成多个512位的块,逐块进行处理。
      • 初始化哈希值:算法使用固定的8个32位初始哈希值,作为处理每个数据块的基础。
      • 压缩函数:将每个消息块与这8个初始哈希值结合,经过64轮的迭代计算,将数据压缩成一个新的哈希值。
      • 最终哈希值:处理完所有的消息块后,生成最终的256位(32字节)哈希值。
  • SM3和SHA-256的差异:​​​​​​​
    • 消息扩展机制
      • SM3:采用了一种更复杂的消息扩展过程。每个消息块(512位)在处理时会被扩展为132个32位的字(相当于4224位),而这些扩展字是通过线性和非线性函数组合产生的。消息扩展的复杂性使得SM3在抗差分攻击和线性攻击方面具有较强的抵抗力。
      • SHA-256:消息扩展相对简单,将512位的消息块扩展为64个32位字(即2048位)。SHA-256使用简单的位操作和位移来完成扩展。
    • 压缩函数
      • SM3:采用了基于Merkle-Damgard结构的压缩函数,但与SHA-256不同的是,SM3的压缩函数包含了更多复杂的非线性操作,包括两种不同的消息混合函数。这些混合函数的设计使SM3在某些攻击下的抗性得到增强。
      • SHA-256:SHA-256也使用了基于Merkle-Damgard结构的压缩函数,但其压缩函数相对较简单,使用了更多的循环移位、与运算、异或等操作。
    • 非线性函数设计
      • SM3:在消息处理过程中使用了两个不同的非线性函数,称为布尔函数T1和T2。这些函数在不同的阶段被调用,分别用于增强消息扩展和压缩阶段的复杂性和随机性。
      • SHA-256:使用了少量的非线性布尔函数,这些函数在压缩过程中主要由按位与、异或、或非等逻辑运算组合而成,相对较为简单。

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

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

相关文章

将本地的 IntelliJ IDEA 项目导入到 GitLab 上——超详细图文教程

要将本地的 IntelliJ IDEA 项目导入到 GitLab 上,可以按照以下详细步骤进行操作: 1. 在 GitLab 上创建一个新的仓库 打开 GitLab 或公司内部的 GitLab 服务器。 登录你的 GitLab 账号。 点击右上角的 号按钮,然后选择 “New Project”。 …

清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 及 通过使用文件或者套节字来识别进程的fuser命令

一、清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 最近又接触了一些线性求解的问题,以前主要都是在高中数学里接触到,都是使用笔算,最后通过一些函数式得出最小或者最大值,最近的研究生学业上接触到了一个Excel s…

C++入门基础知识50——【关于C++数字】之C++ 数学运算

成长路上不孤单😊【14后,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊!!!!&#xff…

C++string类相关OJ练习(2)

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Cstring类相关OJ练习(2) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.反转字符串 …

录屏软件电脑,精选5款录屏神器推荐

嘿,朋友们!想象一下,你正在与好友分享你最新的游戏成就,或是与同事展示你的最新项目进展,但却发现文字描述无法完美呈现你的精彩瞬间。别担心,在这个数字化的时代,我们有着无数种方式记录和分享…

大型集团行业ITSM案例分析报告

一、项目背景 随着信息化建设的不断推进,大型集团的信息系统规模迅速扩大,业务系统对IT的依赖程度逐渐加深,IT网络应用系统的复杂度也随之增加。然而,相对滞后的运维服务体系却未能同步跟进,运维要求不断提高的同时&a…

SparkRA带你读论文 | 如何训练数据高效的 LLMs

简介 How to Train Data-Efficient LLMs 论文作者: Noveen Sachdeva, Benjamin Coleman, Wang-Cheng Kang, Jianmo Ni, Lichan Hong Ed H. Chi, James Caverlee, Julian McAuley, Derek Zhiyuan Cheng 论文链接: https://arxiv.org/pdf/2402.09668.pd…

Java CRM客户关系管理系统源码:基于Spring Cloud Alibaba与Spring Boot,专为成长型企业设计

项目名称:CRM客户关系管理系统 功能模块及描述: 一、待办事项 今日需联系客户:显示当日需跟进的客户列表,支持查询和筛选。分配给我的线索:管理分配给用户的线索,包括线索列表和查询功能。分配给我的客户…

Hive数据库与表操作全指南

目录 Hive数据库操作详解 创建数据库 1)语法 2)案例 查询数据库 1)展示所有数据库 (1)语法 (2)案例 2)查看数据库信息 (1)语法 (2&#…

【免费分享】嵌入式Linux开发板【入门+项目,应用+底层】资料包一网打尽,附教程/视频/源码...

想要深入学习嵌入式Linux开发吗?现在机会来了!我们为初学者们准备了一份全面的资料包,包括原理图、教程、课件、视频、项目、源码等,所有资料全部免费领取,课程视频可试看(购买后看完整版)&…

U盘提示需要格式化才能使用怎么办?教你轻松应对

U盘作为一种便捷的数据存储设备,广泛应用于日常工作和生活中。然而,有时我们会遇到U盘插入电脑后提示需要格式化才能使用的情况,这让人倍感焦虑,因为格式化往往意味着数据丢失。不过,在采取极端措施之前,我…

如何验证mos管好坏

用万用表的二极管档位测试,只有D()S(-)之间电压低于0.7v,其他任意两脚之间电压都是大于1.5V。这是正常的。

不限专业和工作经验,这个含金量巨高的IT证书,90%的大学生都不知道!

软考现在正在报名阶段,大学生们千万不要错过!这个IT证书的含金量巨高,对你的大学生涯乃至毕业后的职业规划都有帮助! 下面就来为大家详细讲解一番,速速码住! 1、软考报名条件 软考报名没有学历、资历、年龄…

【Python常用库_1】网络安全清洁专家——Bleach

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要分享常用的一些Python库,让工作学习事半功倍,适用于平时学习、工作快速查询等…

CPP多态

目录 前言 多态的概念 多态的定义及实现 多态的构成条件 虚函数 虚函数的重写 虚函数重写的两个例外 C11 override 和 final 重载、覆盖(重写)、隐藏(重定义)的对比 抽象类 接口继承和实现继承 多态的原理 虚函数表 多态的原理 动态绑定与静态绑定 单继承和多继…

Aspose.PDF功能演示:在 C# 中将 JPG 图像合并为 PDF

Aspose.PDF 是一款高级PDF处理API,可以在跨平台应用程序中轻松生成,修改,转换,呈现,保护和打印文档。无需使用Adobe Acrobat。此外,API提供压缩选项,表创建和处理,图形和图像功能&am…

网安新声 | 智能家居时代,用户隐私谁来守护

网安加社区【网安新声】栏目,汇聚网络安全领域的权威专家与资深学者,紧跟当下热点安全事件、剖析前沿技术动态及政策导向,以专业视野和前瞻洞察,引领行业共同探讨并应对新挑战的策略与可行路径。 近日,某知名品牌旗下的…

【初领妙道】一眼学会Redis之重点大纲

重点大纲 1. Redis基础2. Redis核心功能3. 高级特性4. 性能优化5. 高可用性6. 安全性7. 实战应用8. 监控与运维总结 Redis(Remote Dictionary Server)是一款开源的、高性能的键值存储系统,它支持多种数据结构,如字符串、列表、集合…

STL算法详细解剖——单纯数据处理函数

STL算法详细解剖——单纯数据处理函数 前言1.replace 替代函数值2.replace_copy 替代函数值3.replace_if 替代函数值4.replace_copy_if 替代函数值5.reverse 颠倒排序6.reverse_copy 颠倒排序7.rotate 将元素按某个中间值进行互换7.1.rotate 将元素按某个中间值进行互换8.roate…

hex文件转bin文件

一、简介 在进行MCU开发时,经常需要使用到hex和bin文件,这里总结几种hex转bin的方法。 二、MDK转换 很多的MCU开发,都会用到MDK,而MDK自身是可以执行批处理,来完成hex到bin文件的直接转化的。 见如下指令: fromelf --bin -o ..\..\output\@L.bin #L 这里解释一下上面指令…