12、SM2椭圆曲线公钥密码算法
参考推荐:
国家密码管理局关于发布《SM2椭圆曲线公钥密码算法》公告(国密局公告第21号)_国家密码管理局
https://blog.csdn.net/u013137970/article/details/84573200
图片来源于:图解SM2算法流程(合)_网糸隹的博客-CSDN博客_sm2算法原理
SM2椭圆曲线公钥密码算法
SM2算法是国家密码据于2010年12月17日发布的国密标准椭圆曲线加密算法。对于一般椭圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的秘钥规模要小得多。
1、基础参数以及密钥对生成
基础参数:
密钥对生成:
2、加解密
设需要发送的消息为比特串M,klen为M的长度,对M加密流程:
- 用随机数发生器产生随机数k∈[1,n-1];
- 计算椭圆曲线点C1=[k]G=(x1,y1),并将C1的数据类型转换为比特串;
- 计算椭圆曲线点S=[h]PB,若S为无穷远点,则报错并退出;
- 计算椭圆曲线点[k] PB =(x2,y2),将坐标x2、y2的数据类型转换为比特串;
- 计算t=KDF(x2∥y2,klen),若t为全0比特串,则返回1);
- 计算C2=M⊕t;
- 计算C3=Hash(x2∥M∥y2);
- 输出密文C=C1∥C2∥C3。
设klen为C2的比特长度,对密文C=C1∥C2∥C3解密流程:
- 从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
- 计算椭圆曲线点S=[h]C1,若S为无穷远点,则报错并退出;
- 计算[dB]C1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
- 计算t=KDF(x2∥y2,klen),若t为全0比特串,则报错并退出;
- 从C中取出比特串C2,计算M’=C2⊕t;
- 计算u=Hash(x2∥M’∥y2),从C中取出比特串C3,若u≠C3,则报错并退出;
- 输出明文M’。
3、签名、验签
预处理1:
预处理2:
签名:
验签:
签名验证原理:
补:SM2、SM3协同工作:
注:
如有错误、侵权,请联系笔者更改删除!!!
12、SM2椭圆曲线公钥密码算法相关推荐
- 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)
国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...
- SM2椭圆曲线公钥密码算法(Python实现)
本文目录 一.实验目的(包括实验环境.实现目标等等) 1. 实验环境 2. 实现目标 3. 实验中需要导入的库 二.方案设计(包括背景.原理.必要的公式.图表.算法步骤等等) 1. 实验背景 2. 实 ...
- GMSSL :SM2椭圆曲线公钥密码算法——数字签名算法1
2021SC@SDUSC 一.相关术语以及定义 二.数字签名算法 1.辅助函数 密码杂凑算法和随机数发生器 杂凑运算:这个输出串称为该消息的杂凑值. 就是一种可将一个 key 对应到一个索引的函数,一 ...
- 国密算法Go语言实现(详解)(十) ——SM2(椭圆曲线公钥密码算法)
国密算法Go语言实现(详解)(十) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...
- SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库)
SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库) 实验环境 预备知识 FpF_pFp 及椭圆曲线 素域 FpF_pFp FpF_pFp 上的椭圆曲线 FpF_pFp 上椭圆 ...
- GMSSL :SM2椭圆曲线公钥密码算法——数字签名算法4
2021SC@SDUSC 目录 一.ECDSA介绍 二.代码分析 一.ECDSA介绍 ECDSA的全名是Elliptic Curve DSA,即椭圆曲线DSA.它是Digital Signature ...
- SM2椭圆曲线公钥密码算法的JAVA实现
2019独角兽企业重金招聘Python工程师标准>>> package com.zpc.cryptography;import java.io.ByteArrayInputStrea ...
- GMSSL :SM2椭圆曲线公钥密码算法-密钥交换协议
2021SC@SDUSC 目录 一.整体架构 二.具体分析 前一篇文章写了密钥交换协议的基本流程,这一篇文章看一下代码实现 一.整体架构 整体来看这一部分有6个函数,相对重要的是序号3,4代表的函数 ...
- SM2国密算法公钥解压缩
SM2一般用到的或者第三方提供的公钥都是压缩过的,长度为66个长度,既33字节. 格式如下,保密期间秘钥内容用*代替了,从02到....3F3B共33字节.66个长度 06:028736002931F ...
最新文章
- xen虚拟机管理xm的用法
- 485转换器产品类型介绍
- Asterisk 学习进阶 2
- go 生成hash_go基础之map-写在前面(一)
- Netty 5用户指南
- Monad用简单的英语? (对于没有FP背景的OOP程序员)
- chown无效的用户mysql_mysql 从库设置read-only 对super权限的用户无效的问题
- 3dm游戏运行包_权势纵横捭阖,战场龙血玄黄!三国志14火爆来袭电脑游戏
- C# 客服端上传文件与服务器器端接收 (简单代码)
- js Shadow DOM
- Markdown中在线编辑公式LaTex
- 鸿蒙手机电脑无缝对接,万物互联?华为鸿蒙OS超级终端功能曝光可一键连接附近设备...
- 操作性条件作用和经典性条件作用中,刺激分化和泛化的区别是?|小白心理-312/347考研答疑
- Android智能硬件开发心得总结(二)
- 太实用了!Excel VBA常用代码!
- 社区英雄榜:谁是真正的技术英雄?
- vue3 watch 异步方法
- 草根创业,这三大坑千万别踩
- np.log1p()取对数符合正态分布
- 如何查看MySql的安装位置?