参考推荐:

国家密码管理局关于发布《SM2椭圆曲线公钥密码算法》公告(国密局公告第21号)_国家密码管理局

https://blog.csdn.net/u013137970/article/details/84573200

图片来源于:图解SM2算法流程(合)_网糸隹的博客-CSDN博客_sm2算法原理

SM2椭圆曲线公钥密码算法

SM2算法是国家密码据于2010年12月17日发布的国密标准椭圆曲线加密算法。对于一般椭圆曲线的离散对数问题,目前只存在指数级计算复杂度的求解方法。与大数分解问题及有限域上离散对数问题相比,椭圆曲线离散对数问题的求解难度要大得多。因此,在相同安全程度要求下,椭圆曲线密码较其他公钥密码所需的秘钥规模要小得多。

1、基础参数以及密钥对生成

基础参数:

密钥对生成:

2、加解密

设需要发送的消息为比特串M,klen为M的长度,对M加密流程

  1. 用随机数发生器产生随机数k∈[1,n-1];
  2. 计算椭圆曲线点C1=[k]G=(x1,y1),并将C1的数据类型转换为比特串;
  3. 计算椭圆曲线点S=[h]PB,若S为无穷远点,则报错并退出;
  4. 计算椭圆曲线点[k] PB =(x2,y2),将坐标x2、y2的数据类型转换为比特串;
  5. 计算t=KDF(x2∥y2,klen),若t为全0比特串,则返回1);
  6. 计算C2=M⊕t;
  7. 计算C3=Hash(x2∥M∥y2);
  8. 输出密文C=C1∥C2∥C3。

设klen为C2的比特长度,对密文C=C1∥C2∥C3解密流程

  1. 从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
  2. 计算椭圆曲线点S=[h]C1,若S为无穷远点,则报错并退出;
  3. 计算[dB]C1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
  4. 计算t=KDF(x2∥y2,klen),若t为全0比特串,则报错并退出;
  5. 从C中取出比特串C2,计算M’=C2⊕t;
  6. 计算u=Hash(x2∥M’∥y2),从C中取出比特串C3,若u≠C3,则报错并退出;
  7. 输出明文M’。

3、签名、验签

预处理1:

预处理2:

签名:

验签:

签名验证原理:

补:SM2、SM3协同工作:

注:

如有错误、侵权,请联系笔者更改删除!!!

12、SM2椭圆曲线公钥密码算法相关推荐

  1. 国密算法Go语言实现(详解)(九) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(九) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  2. SM2椭圆曲线公钥密码算法(Python实现)

    本文目录 一.实验目的(包括实验环境.实现目标等等) 1. 实验环境 2. 实现目标 3. 实验中需要导入的库 二.方案设计(包括背景.原理.必要的公式.图表.算法步骤等等) 1. 实验背景 2. 实 ...

  3. GMSSL :SM2椭圆曲线公钥密码算法——数字签名算法1

    2021SC@SDUSC 一.相关术语以及定义 二.数字签名算法 1.辅助函数 密码杂凑算法和随机数发生器 杂凑运算:这个输出串称为该消息的杂凑值. 就是一种可将一个 key 对应到一个索引的函数,一 ...

  4. 国密算法Go语言实现(详解)(十) ——SM2(椭圆曲线公钥密码算法)

    国密算法Go语言实现(详解)(十) --SM2(椭圆曲线公钥密码算法) 原创代码:https://github.com/ZZMarquis/gm 引用时,请导入原创代码库.本文仅以注释方式详解代码逻辑 ...

  5. SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库)

    SM2椭圆曲线公钥密码算法的C语言实现(基于Miracl大数运算库) 实验环境 预备知识 FpF_pFp​ 及椭圆曲线 素域 FpF_pFp​ FpF_pFp​ 上的椭圆曲线 FpF_pFp​ 上椭圆 ...

  6. GMSSL :SM2椭圆曲线公钥密码算法——数字签名算法4

    2021SC@SDUSC 目录 一.ECDSA介绍 二.代码分析 一.ECDSA介绍 ECDSA的全名是Elliptic Curve DSA,即椭圆曲线DSA.它是Digital Signature ...

  7. SM2椭圆曲线公钥密码算法的JAVA实现

    2019独角兽企业重金招聘Python工程师标准>>> package com.zpc.cryptography;import java.io.ByteArrayInputStrea ...

  8. GMSSL :SM2椭圆曲线公钥密码算法-密钥交换协议

    2021SC@SDUSC 目录 一.整体架构 二.具体分析 前一篇文章写了密钥交换协议的基本流程,这一篇文章看一下代码实现 一.整体架构 整体来看这一部分有6个函数,相对重要的是序号3,4代表的函数 ...

  9. SM2国密算法公钥解压缩

    SM2一般用到的或者第三方提供的公钥都是压缩过的,长度为66个长度,既33字节. 格式如下,保密期间秘钥内容用*代替了,从02到....3F3B共33字节.66个长度 06:028736002931F ...

最新文章

  1. xen虚拟机管理xm的用法
  2. 485转换器产品类型介绍
  3. Asterisk 学习进阶 2
  4. go 生成hash_go基础之map-写在前面(一)
  5. Netty 5用户指南
  6. Monad用简单的英语? (对于没有FP背景的OOP程序员)
  7. chown无效的用户mysql_mysql 从库设置read-only 对super权限的用户无效的问题
  8. 3dm游戏运行包_权势纵横捭阖,战场龙血玄黄!三国志14火爆来袭电脑游戏
  9. C# 客服端上传文件与服务器器端接收 (简单代码)
  10. js Shadow DOM
  11. Markdown中在线编辑公式LaTex
  12. 鸿蒙手机电脑无缝对接,万物互联?华为鸿蒙OS超级终端功能曝光可一键连接附近设备...
  13. 操作性条件作用和经典性条件作用中,刺激分化和泛化的区别是?|小白心理-312/347考研答疑
  14. Android智能硬件开发心得总结(二)
  15. 太实用了!Excel VBA常用代码!
  16. 社区英雄榜:谁是真正的技术英雄?
  17. vue3 watch 异步方法
  18. 草根创业,这三大坑千万别踩
  19. np.log1p()取对数符合正态分布
  20. 如何查看MySql的安装位置?

热门文章

  1. 裁员来临前有什么征兆,如何应对被裁员?
  2. 关于DNF多层血条的实现
  3. 点开QT时,出现找不到python27.dll的问题报错
  4. JAVA 抽象类、值交换、接口、多态
  5. 关于计算机图形学的3d数学
  6. 数学建模中的线性规划
  7. window定时计划任务-定时重启服务/软件
  8. 自学编程到底多难?能不能找到工作?阿里技术专家这样回答……
  9. 机器学习所需要的数学基础知识---矩阵(1)
  10. git可视化版本控制工具SourceTree的基本使用