现代密码学-国密算法

news2025/3/12 22:13:35

商用密码算法种类

商用密码算法 

密码学概念、协议与算法之间的依赖关系

数字签名、证书-公钥密码、散列类算法

消息验证码-对称密码 ,散列类

安全目标与算法之间的关系

机密性--对称密码、公钥密码

完整性--散列类算法

可用性--散列类、公钥密码

真实性--公钥密码

不可否认--公钥密码

SM2椭圆曲线公钥加密

公钥密码体制

公钥体制加密

  1. 接收者B产生一对密钥:私钥--SK_{_{B}},公钥--PK_{_{B}}
  2. A想向B发消息m,则使用B的公钥加密m,表示为c=\varepsilon _{PK_{B}}[m], c是加密后的密文,\varepsilon是加密算法
  3. B收到密文c后,用自己的私钥SK_{_{B}}解密,表示为m=D_{SK_{B}}[c],D是解密算法

只能由B进行解密

公钥体制认证

用户A用自己的私钥对m进行加密,c=\varepsilon _{SK_{A}}[m],将c发给B,B用A的公钥解密m=D_{PK_{A}}[c]

 从m得到c的过程是经过A的私钥加密的,只能A才能做到,因此c可以当作A对m的数字签名。

双重加密、解密

为了同时具有保密功能和认证功能,可以使用双重加、解密

发送方先用自己的私钥对消息加密,用于提供数字签名。再用接收方的公钥加密,表示为

 c=\varepsilon _{PK_{B}}[\varepsilon _{SK_{A}}[m]]

接收者收到后,x先用自己的私钥,再用发送方的公钥进行两次解密,解密过程为

m=D_{PK_{A}}[D_{SK_{B}}[c]]

椭圆曲线密码体制

椭圆曲线密码 Elliptic CurveCryptography ECC:利用椭圆曲线实现密码技术

椭圆曲线上的离散对数问题

本质:已知xG求数x的问题

椭圆曲线密码中,先确定一条椭圆曲线,然后对椭圆曲线上的某一些点之间的“运算”进行定义,利用这些“运算”来进行密码技术相关的计算。

已知

        椭圆曲线E

        椭圆曲线E上的一点G(基点)

        椭圆曲线上的一点xG(G的x倍)

求解

        数x

椭圆曲线Diffie-Hellman密钥交换

AB需要共享一个对称密码的密钥,用椭圆曲线Diffie-Hellman密钥交换,生成共享密钥

  • A向B发送点G。G被窃听无影响
  • A生成随机数a,将a作为A的私钥
  • B生成随机数b,将b最为B的私钥
  • A向B发送点aG
  • B向A发送bG
  • A对收到的bG计算其在椭圆曲线上a倍的点,a(bG)=abG==共享密钥
  • B对收到的aG计算其在椭圆曲线上b倍的点,b(aG)=baG=abG==共享密钥

每次通信使用不同的随机数,共享密钥也会随之改变==保证了前向安全性forward secrecy

SM2

SM2是国家密码管理局颁布的中国商用公钥密码标准算法,是一组椭圆曲线密码算法,包含加解密算法、数字签名算法。

SM2与国际ECC比较

        ECC算法采用国际机构建议的曲线和参数,SM2算法的参数需要利用一定的算法产生,算法中加入了用户特异性的曲线参数、基点、用户的公钥点信息,安全性更高

        ECC中,用户可以选择MD5或SHA-1等国际通用的哈希算法,SM2使用SM3哈希算法,SM3哈希算法输出为256比特,与SHA-256算法安全性相当

SM2椭圆曲线公钥密码加密算法

基本参数

基于素数域F_{p}的SM2算法参数如下:

F_{p}的特征p为m比特长的素数,p要尽可能大;

长度不小于192比特的比特串SEED;

F_{p}上的2个元素a,b,满足4{a^{3}}+27{b^2}\neq 0,定义曲线E(F_{p}):y^2=x^2+ax+b

基点G=(x_G,y_G)\in E(F_p),G\neq 0;

G的阶n为m比特长的素数,满足n> 2^191 and n> 4\sqrt{p};

h=\frac{\left | E(F_p) \right |}{n}余因子,其中 |E(F_p)|是曲线E(F_p)的点数。

SEED,a,b产生的算法:

  1. 任意选取长度不小于192比特的比特串SEED;
  2. 计算H=H_{256}(SEED),记H=(h_{255},h_{254},...,h_0),其中H_{256}表示256比特输出的SM3哈希算法
  3. R=\sum_{255}^{0}h_i2^i;
  4. r=R mod p
  5. F_{p}上任意选择2个元素a,b,满足 rb^2=a^3 mod p;
  6. 若 4{a^{3}}+27{b^2}= 0 mod p,则返回1;
  7. 所选择的F_{p}上的曲线是E(F_{p}):y^2=x^2+ax+b
  8. 输出(SEED,a,b)

密钥产生

假设接收方为B,B的秘密钥取{1,2,...,n-1}中的一个随机数d_B,记为d_B\leftarrow\left \{ 1,2,...,n-1 \right \}_R,其中G的阶n

B的公开钥取为椭圆曲线上的点:P_B=d_BG,其中,G=G(x,y)是基点

加密算法

假设发送方是A,A要发送的消息表示为M比特串,M的长度为klen.算法如下:

  1. 选择随机数k\leftarrow\left \{ 1,2,...,n-1 \right \}_R
  2. 计算椭圆曲线点C_1=kG=(x_1,y_1)),将x1,y1表示为比特串;
  3. 计算椭圆曲线点S=HP_B,若S为无穷远点,则报错退出;
  4. 计算椭圆曲线kP_B=(x_2,y_2),将x2,y2表示为比特串;
  5. 计算t=KDF(x_2 || y_2,klen),若t为全0的比特串,则返回1;
  6. 计算C_2=M\oplus t----(mod 2 加法)
  7. 计算C_3=Hash(x_2 || M || y_2)
  8. 输出密文C=(C1,C2,C3)

KDF(*)是密钥派生函数,本质为一个伪随机数产生函数,用来产生密钥,这里KDF为SM3,第(3)步的H也是SM3

解密算法

B收到密文C后,进行解密,过程如下:

  1. 从C中取出C1,将C1表示为椭圆曲线上的点,验证C1是否满足椭圆曲线方程。不满足就报错退出;
  2. 计算椭圆曲线点S=HC1,若S为无穷远点,则报错退出;
  3. 计算d_BC_1=(x_2,y_2),将x2,y2表示为比特串;
  4. 计算t=KDF(x_2 || y_2,klen),若t为全0的比特串,则报错退出;
  5. 从C中取出C2,计算{M}'=C_2\oplus t;
  6. 计算u=Hash(x_2 || {M}' || y_2),从C中取出C3,若u \neq C_3则报错退出;
  7. 输出明文{M}'

SM2椭圆曲线公钥密码签名算法

基本参数

与前面加密算法的参数设置相同

密钥产生

与与前面加密算法产生方法一样,记为d_A,P_A=(x_A,y_A)

ID_A是A的长度为entlen_A比特的标识,ENTL_Aentlen_A转换而成的两个字节,A计算Z_A=H_{256}(ENTL_A || ID_A || a||b||x_G||y_G||x_A||y_A),其中a,b是椭圆曲线方程的参数,x_G,y_G是基点G的坐标,x_A,y_AP_A的坐标。将这些值转换为比特串后,在进行H_{256}。验证方B验证签名时,也需要计算Z_A

签名算法

设待签名的消息为M,操作如下:

  1. \tilde{M}=Z_A || M
  2. 计算e=H_v(\tilde{M}),将e转换为整数,Hv是输出为v比特长的哈希函数
  3. 用随机数产生器生成随机数k\leftarrow\left \{ 1,2,...,n-1 \right \}_R
  4. 计算椭圆曲线点C_1=kG=(x_1,y_1))
  5. 计算r=(r+x_1) mod n,若r=0或者r+k=n,则返回3
  6. 计算s=((1+d_A)^{-1})\cdot (k-r\cdot d_A))mod n,若s=0,则返回3
  7. 消息M的签名为(r,s)

验证算法

B收到消息{M}'以及其签名({r}',{s}'),进行验证操作:

检验{r}'\in [1,n-1]是否成立,若不成立,验证失败;

检验{s}'\in [1,n-1]是否成立,若不成立,验证失败;

{\tilde{M}}'=Z_A || {M}'

计算{e}'=H_v({\tilde{M}}'),并将其转换为整数;

计算t=({r}'+{s}')mod n,若t=0,验证失败

计算椭圆曲线点({x}',{y}')={s}'G+tP_A

计算R=({e}'+{x_1}')mod n,检查R={r}'是否成立,若成立则验证通过,否则,验证失败

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

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

相关文章

C++设计模式-单例模式,反汇编

文章目录 25. 单例模式25.1. 饿汉式单例模式25.2. 懒汉式单例模式25.2.1. 解决方案125.2.2. 解决方案2 (推荐写法) 运行在VS2022,x86,Debug下。 25. 单例模式 单例即该类只能有一个实例。 应用:如在游戏开发中&#x…

网易有道QAnything使用CPU模式和openAI接口安装部署

网易有道QAnything可以使用本地部署大模型(官网例子为qwen)也可以使用大模型接口(OPENAI或者其他大模型AI接口 )的方式,使用在线大模型API接口好处就是不需要太高的硬件配置。 本机环境windows11 首先安装WSL环境, 安装方法参考https://zhuan…

如何在springboot项目中使用Mybatisplus

文章目录 1.mybatisplus的作用2.mybatisplus使用流程2.1pom.xml文件中增加依赖(点击右上角蓝色按钮下载依赖)2.2navicat新建数据库,增加application.properties数据库配置2.3 启动类添加注解,增加mapper包操作数据库2.5添加实体类…

外资企业使用卓豪Zoho CRM优势有哪些?

外资企业在中国市场的竞争愈发激烈,为了在众多本土与国际对手中脱颖而出,高效管理客户关系、提升销售业绩、并实现市场精准定位成为了企业不可或缺的竞争力。在这场数字化转型的浪潮中,卓豪Zoho CRM以其卓越的性能和全面的功能,成…

Nginx配置详细解释:(1)全局配置

自启动安装nginx:前面博客有解释 systemctl stop firewalld setenforce 0 [rootNode1 ~]#:mkdir /data [rootNode1 ~]#:cd /data [rootNode1 data]#:yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel [rootNode1 data]#:wget http://nginx.o…

【计算机网络】P3 计算机网络协议、接口、服务的概念、区别以及计算机网络提供的三种服务方式

目录 协议什么是协议协议是水平存活的协议的组成 接口服务服务是什么服务原语 协议与服务的区别计算机网络提供的服务的三种方式面向连接服务与无连接服务可靠服务与不可靠服务有应答服务与无应答服务 协议 什么是协议 协议,就是规则的集合。 在计算机网络中&…

反激变压器的漏感及其测量方式

绿色圈的是气隙,蓝色的弧线是那个线包,变压器的漏感,主要由磁力线向空气中散发,没有构成回路,线包自身的磁场,不参与能量传输,还有气隙等。 中间的气隙,由于此处磁力线穿过空气的导磁…

视频生成框架EasyAnimate正式开源!

近期,Sora模型的热度持续上涨,社区中涌现了一些类Sora的开源项目,这些项目均基于Diffusion Transformer结构,使用Transformer结构取代了UNet作为扩散模型的基线,旨在生成更长、更高分辨率、且效果更好的视频。EasyAnim…

Unity MiniCPM-V 让引擎拥有视觉

Unity MiniCPM-V 让引擎拥有视觉 前言项目Python环境布置Unity场景布置代码编写添加并设置脚本总结 鸣谢AI提示 前言 新发布的MiniCPM-V,忍不住玩一下,可以让之前制作的语音助手拥有一定的视觉能力(不是OpenCV不行,而是AI更加符合…

【数据分享】中国第三产业统计年鉴(1991-2022)

大家好!今天我要向大家介绍一份重要的中国第三产业统计数据资源——《中国第三产业统计年鉴》。这份年鉴涵盖了从1991年到2022年中国第三产业统计全面数据,并提供限时免费下载。(无需分享朋友圈即可获取) 数据介绍 每年的《中国…

数据结构的归并排序(c语言版)

一.归并排序的基本概念 1.基本概念 归并排序是一种高效的排序算法,它采用了分治的思想。它的基本过程如下: 将待排序的数组分割成两个子数组,直到子数组只有一个元素为止。然后将这些子数组两两归并,得到有序的子数组。不断重复第二步,直到最终得到有序的整个数组。 2.核心…

MES系统生产计划的实施流程

在工厂的生产运营中,首先需要制定生产计划,MES系统软件可以监控从原材料进入工厂到产品进入仓库的整个生产过程,记录生产过程中使用的材料,设备,产品检验数据和结果,以及生产时间,人员和其他信息…

项目-双人五子棋对战:匹配模块的实现(3)

完整代码见: 邹锦辉个人所有代码: 测试仓库 - Gitee.com 模块详细讲解 功能需求 匹配就类似于大家平常玩的王者荣耀这样的匹配功能, 当玩家点击匹配之后, 就会进入到一个匹配队列, 当匹配到足够数量的玩家后, 就会进入确认页. 在这里, 我们主要实现的是1 - 1匹配功能, 首先先…

PPP-B2b精密产品使用注意事项及分析

1、因为在使用PPP-B2b进行定轨的时候,发的精密轨道产品是B3频点的,需要改正的卫星质心(Com)与SP3精密星历对比。 2、PPP-B2b产品吸收了电离层误差,因此电离层提取方面与IGS电离层完全无法对其。 3、由于PPP-B2b产品精…

【微信小程序】初识小程序

项目结构 项目基本组成结构 页面基础组成结构 JSON 配置文件 App.json app.json是当前小程序的全局配置,包括了小程序的所有页面路径、窗口外观、界面表现、底部tab等。 在 pages 中加入路径,保存后,开发者工具可以自动帮我们创建对应的页…

SAS:什么时候用kcompress呀?

问题:如何截取ECGTPT变量中的后三个字符? 下图展示了以k开头的以及非k开头的substr函数和length函数,发现在UTF-8编码下,仅以k开头的函数能够截取成功。 释疑(以下内容来自SAS Help) SAS提供的字符函数…

微软云计算[2]之微软云关系数据库SQL Azure

微软云关系数据库SQL Azure SQL Azure概述SQL Azure关键技术SQL Azure数据库SQL Azure报表服务SQL Azure数据同步 SQL Azure和SQL Server对比 SQL Azure概述 SQL Azure是微软的云中关系型数据库。 SQL Azure数据库简化了多数据库的供应和部署。 SQL Azure还为用户提供内置的高…

FPGA新起点V1开发板(九)——流水灯

文章目录 一、模块框图二、代码编写三、注意点四、总结 一、模块框图 二、代码编写 endmodule下面需要敲出一个回车代码拼接是大括号 led < {led[2:0],led[3]}注意二进制和十进制 module flow_led(input sys_clk50,input rst_n,output reg [3:0] le…

探索 Adobe Illustrator 2023 (AI 2023) for Mac/Win——创意设计的强大工具

Adobe Illustrator 2023 (AI 2023) for Mac/Win 是一款在设计领域备受推崇的专业矢量图形编辑软件软件&#xff0c;为设计师们提供了无尽的创意可能性。 它具有强大而精确的绘图功能&#xff0c;让用户能够轻松绘制出各种复杂的图形、线条和形状。无论是简洁的图标设计还是精美…

STM32作业实现(八)触摸按键TPAD

目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…