首页 > 编程语言 >国密算法SM2介绍

国密算法SM2介绍

时间:2023-08-04 16:46:31浏览次数:40  
标签:椭圆 比特 SM2 密码 算法 国密 C1

国密算法是我国自主研发创新的一套数据加密处理系列算法。从SM1-SM4分别实现了对称、非对称、摘要等算法功能。特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能。当然,默认的前提条件是算法密钥必须保证安全性,因此要将国密算法嵌入到硬件加密芯片中结合使用。

01

使用国密算法的意义

随着金融安全上升到国家安全高度,近年来国家有关机关和监管机构站在国家安全和长远战略的高度提出了推动国密算法应用实施、加强行业安全可控的要求。摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统的“安全可控”能力显得尤为必要和迫切。

密码算法是保障信息安全的核心技术,尤其是最关键的银行业核心领域长期以来都是沿用3DES、SHA-1、RSA等国际通用的密码算法体系及相关标准。2010年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2算法)。为保障重要经济系统密码应用安全,国家密码管理局于2011年发布了《关于做好公钥密码算法升级工作的通知》,要求“自2011年3月1日起,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。自2011年7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2算法。”

02

国密算法介绍

国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。

SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。

SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。

SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

由于SM1、SM4加解密的分组大小为128bit,故对消息进行加解密时,若消息长度过长,需要进行分组,要消息长度不足,则要进行填充。

03

国密算法的安全性

SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高。

SM3算法:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性。SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。

SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

SM2 国密非对称加密算法,属于椭圆曲线密码体制(ECC)
Author:John
基于椭圆曲线的离散对数难题,目前 SM2 256 bit 加密算法是相当安全的,相当于 RSA 2048 bit 及以上的安全性
有公钥、私钥之分,公钥给别人,可以在一定范围内公开,私钥留给自己,必须保密。由私钥可以计算公钥;由公钥计算私钥,是相当困难的,现阶段是不可能
 
加密过程:
    设需要发送的消息为比特串 M ,klen 为 M 的比特长度。
    为了对明文 M 进行加密,作为加密者的用户 A 应实现以下运算步骤:
    A1:用随机数发生器产生随机数k∈[1,n-1];
    A2:计算椭圆曲线点 C1=[k]G=(x1,y1),([k]G 表示 k*G )将C1的数据类型转换为比特串;
    A3:计算椭圆曲线点 S=[h]PB,若S是无穷远点,则报错并退出;
    A4:计算椭圆曲线点 [k]PB=(x2,y2),将坐标 x2、y2 的数据类型转换为比特串;
    A5:计算t=KDF(x2 ∥ y2, klen),若 t 为全0比特串,则返回 A1;
    A6:计算C2 = M ⊕ t;
    A7:计算C3 = Hash(x2 ∥ M ∥ y2);
    A8:输出密文C = C1 ∥ C2 ∥ C3。
解密过程:
    设klen为密文中C2的比特长度。
    为了对密文C=C1 ∥ C2 ∥ C3 进行解密,作为解密者的用户 B 应实现以下运算步骤:
    B1:从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
    B2:计算椭圆曲线点 S=[h]C1,若S是无穷远点,则报错并退出;
    B3:计算[dB]C1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
    B4:计算t=KDF(x2 ∥ y2, klen),若t为全0比特串,则报错并退出;
    B5:从C中取出比特串C2,计算M′ = C2 ⊕ t;
    B6:计算u = Hash(x2 ∥ M′ ∥ y2),从C中取出比特串C3,若u != C3,则报错并退出;
    B7:输出明文M′。
原理:
     用户 A 持有公钥PB=[dB]G(仅有PB值),用户 B 持有私钥 dB
     加密:C1=k*G  C2=M⊕(k*PB)      解密:M′=C2 ⊕ (dB*C1)     # 这里只叙述基本原理,便于理解
     证明:dB*C1=dB*k*G=k*(dB*G)=k*PB  因此,M′=C2 ⊕ (dB*C1)=M⊕(k*PB)⊕(k*PB)=M  得证
 
注:此实现算法所研究的椭圆曲线是基于域 Fp 上的椭圆曲线
 
安全参数设置:
     随机数 k 和私钥 dB 最好大点,2**50 以上比较安全
 
     successfully!!!  和官方例子加密结果测试一样

 

标签:椭圆,比特,SM2,密码,算法,国密,C1
From: https://www.cnblogs.com/xingxing15/p/17606356.html

相关文章

  • dijkstra算法
    【USACO】热浪#include<bits/stdc++.h>usingnamespacestd;structnode{ intu,dist; node(int_u,int_dist) { u=_u; dist=_dist; }};structnode2{ intv,w; node2(int_v,int_w) { v=_v; w=_w; }};structcmp{ booloperator()(nodea,nod......
  • 图论强联通分量(tarjan)算法
    图论强联通分量(tarjan)算法#include<bits/stdc++.h>usingnamespacestd;intn,m,cnt,cntb,ans;vector<int>edge[101];vector<int>belong[101];boolinstack[101];intdfn[101];intlow[101];stack<int>s;voidTarjan(intu){ ++cnt; dfn[u]=......
  • 家长直呼太暴力!这些算法可能会被删除
    近日,洛谷网络科技有限公司多位用户家长向@kkksc03反映,部分算法存在血腥、暴力等不利于青少年儿童的因素出现,要求对相关算法进行整改或被删除。洛谷网络科技有限公司题目组管理员在接受采访时说道,在最近几天内,洛谷收到了数十条家长来信,声称网站教授的部分算法存在“血腥”、“暴......
  • 【数据结构 | 入门】线性表与链表 (问题引入&实现&算法优化)
    ......
  • 往年 | 大疆雷达算法校招笔试题目解析
    2023年度会员内容更新公告(04.16)序号类别内容文件路径1无无无【正文】编辑|小助理 审核|调皮哥本文图片中的答案仅仅是为了说明题目,并不是正确答案,额外注意!文中的解析仅作为学习参考。1、FFT主要利用旋转因子  的什么性质,减少运算量?答:对称性和周期性2、采样率fs,采样M个实数,进行N......
  • 大模型时代来临----算法工程师与相关职业如何发展与提升
    前言:7月28日,合合信息举办了一场关于大模型时代下算法工程师发展和转型的直播。作为一家持续站在技术前沿的企业,合合信息探讨了算法工程师在不同阶段的发展、差异点和共性,以及他们转型为算法周边工作所需的能力。同时,分享了提升大模型时代下算法工程师能力的方法和需要学习的内容......
  • 如何在 CentOS 7 安装 TCP BBR 拥塞算法
    TCPBBR介绍首先对TCPBBR做个介绍。TCPBBR(全称BottleneckBandwidthandRound-trippropagationtime)是由Google设计,于2016年发布的拥塞算法。之前大部分拥塞算法是基于丢包作为判断降低传输速率的信号,而BBR则基于模型主动探测。该算法使用网络最近出站数据分组当时的最......
  • 创新赛制,顶尖赛题!| 2023第二届粤港澳大湾区(黄埔)国际算法算例大赛十赛道虚位以待
    2023第二届“粤港澳大湾区(黄埔)国际算法算例大赛”(以下简称“大赛”)于 2023年7月15 日正式开赛。大赛面向全球,诚邀有创新精神,并有较好的AI算法算例基础的高校学生、AI领域相关企业和研究院所的从业人员和创客等报名参赛!创新赛制!顶尖赛题!2023战火重燃!点击链接:https://www.hey......
  • c++算法之离散化
    什么是离散化?离散化,故离散数学,其中的“离散”就是不连续的意思。离散化可以保持原数值之间相对大小关系不变的情况下将其映射成正整数。也就是给可能用到的数值按大小关系分配一个编号,来代替原数值进行各种操作。离散化步骤:1.排序2.去重3.归位举一个例子:将{4000,201,11......
  • AI-11. 优化算法
    优化算法对于深度学习非常重要。一方面,训练复杂的深度学习模型可能需要数小时、几天甚至数周。优化算法的性能直接影响模型的训练效率。另一方面,了解不同优化算法的原则及其超参数的作用将使我们能够以有针对性的方式调整超参数,以提高深度学习模型的性能。11.1. 优化和深度学习......