SM2是基于椭圆曲线的数字签名算法,关于椭圆曲线的解释可以常见前一篇关于椭圆曲线的微博,下面概要的介绍一下SM2签名的过程。
对于要签名的信息ee,这个是原始信息经过一定的处理通过散列函数得到的,散列算法用的是国密SM3算法,这个过程也略过,只介绍重点的签名和验证的过程。

1、签名的过程

设GG是椭圆曲线上的参考点,dAd_A是私钥,PAP_A是公钥,PA=dA∗GP_A=d_A*G
对ee进行数字签名得到签名结果(r,s)(r,s),计算过程是:
首先选取随机数kk,当然,这个数的选择是有约束条件的,现在暂时不管
计算r=e+x1r=e+x_1,其中(x1,y1)=k∗G(x_1,y_1)=k*G
计算s=(1+dA)−1∗(k−r∗dA)s=(1+d_A)^{-1}*(k-r*d_A)
可以看出前面是用私钥进行的。

2、签名验证的过程

验证签名就是利用得到的签名、公钥、椭圆曲线参数等对签名进行验证,验证主要步骤是:
首先计算t=r+st=r+s,如果t=0t=0那么就表明没有通过。
然后通过tt与ss计算曲线上的点(x1,y1)=s∗G+t∗PA(x_1,y_1)=s*G+t*P_A
再计算R=x1+eR=x_1+e,然后验证RR与rr是不是相等,如果相等则表明验证通过。

3、验证的原理

为什么这样能完成验证,我们不妨推导一下:
(x1,y1)=s∗G+t∗PA           =s∗G+(r+s)∗PA            =s∗G+(r+s)∗dA∗G=(1+dA)∗s∗G+r∗dA∗G=(1+dA)∗(1+dA)−1∗(k−r∗dA)∗G+r∗dA∗G=(k−r∗dA)∗G+r∗dA∗G=k∗G(x_1,y_1)=s*G+t*P_A\\\ \ \ \ \ \ \ \ \ \ \ \,\,=s*G+(r+s)*P_A\\ \ \ \ \ \ \ \ \ \ \ \ \ =s*G+(r+s)*d_A*G\\=(1+d_A)*s*G+r*d_A*G\\=(1+d_A)*(1+d_A)^{-1}*(k-r*d_A)*G+r*d_A*G\\=(k-r*d_A)*G+r*d_A*G\\=k*G
可以看出依据公钥得到的椭圆曲线上的这个点和签名时的点是一致的。
然后再由这个x1x_1和收到的信息相加,看是否与发送的签名r<script type="math/tex" id="MathJax-Element-22">r</script>是否相符,相符就通过了。

国密SM2数字签名算法相关推荐

  1. Spring Security-用户密码自定义国密SM2加密

    为什么80%的码农都做不了架构师?>>>    由于甲方要求需要把密码的加密方式改为国密SM2的方式,网上看了一些写的代码,结合了一下SpringSecurity用户自定义加密,直接 ...

  2. php gmssl,支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱GmSSL

    GmSSL概述 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码 ...

  3. 基于mbedTLS算法库实现国密SM2签名和验签算法

    网上有大量的基于OpenSSL实现的国密算法库,比如著名的GmSSL,可以直接拿来用.我自己常用的是mbedTLS的算法库,比较小巧简单,在mbedTLS的大数算法的基础上实现了国密SM2的签名和验签 ...

  4. 国密SM2,SM3,SM4的前后台(js和java)加解密写法

    目录 SM2加解密 js java SM3加密 js java sm3前后台(js/java)加密不一致原因 SM4加解密 js java 之前做一个项目的时候需要用到国密SM2,SM3,SM4的加解 ...

  5. php接入招行收款通支付国密sm2

    前段时间接了招行的国密sm2,帮大家避避坑 可以参考github sm2加密源码:https://github.com/lpilp/phpsm2sm3sm4 招商相关Issues:关于招行某些接口的数 ...

  6. 国密SM2算法(JS加密,C#、Java解密)

    常见的渗透测试会将网站登录时密码使用明文传输视为风险.推荐使用国密算法或者RSA算法对密码进行加密传输. RSA加密(JS加密,C#.Java解密)请参考<RSA对称加密(JS加密,C#.Jav ...

  7. 使用 Python 脚本执行国密 sm2 加解密

    一.场景 工作中的一个场景:Go 需要对信息加解密,但是研究了 GmSSL Go API 文档之后,发现是依赖于 CGO 的,同事配了半天环境没配成功.于是换了一个方法,选择 Go 调 Python ...

  8. 国密SM2算法的只求理解不求甚解 (4/5)SM2算法加解密协议

    国密SM2算法的只求理解不求甚解 (1/5)前置数学知识:模运算 国密SM2算法的只求理解不求甚解 (2/5)前置数学知识:平面几何 国密SM2算法的只求理解不求甚解 (3/5)SM2算法数学模型 国 ...

  9. 国密SM2前端加密,Java后台解密问题

    背景:要实现请求参数加密的功能,使用的是国密SM2算法,前端向后台发送请求获取公钥,将请求加密发送到后台,后台用对应的私钥进行解密 问题:前端进行加密的请求,后台无法进行解析 解决方案:(此处所用的类 ...

最新文章

  1. mysql基本命令总结_mysql 常用基本命令总结
  2. 手机调试打开控制台方法vconsole
  3. AsyncTask应用解析
  4. 世界围棋人机大战、顶峰对决第二战:围棋世界冠军Lee Sedol(李世石,围棋职业九段)对战Google DeepMind AlphaGo围棋程序,AlphaGo再次胜出!
  5. 深度探索C++ 对象模型(5)-Initialization list(1)
  6. 《Exploring in UE4》多线程机制详解[原理分析]
  7. CSS3之border
  8. MyBatis collection的两种形式——MyBatis学习笔记之九
  9. 自编fun函数求 N*N矩阵四周元素的平均值
  10. tp5可以请求到linux根目录么,TP5 获取项目根目录路径
  11. 常见并发工具的使用和原理解析——Condition(重点在第五节)
  12. Qt之QTableView的简单使用(含源码+注释)
  13. 【前端】vuecli项目引入ant-design-vue并用ant-design-vue配置阿里巴巴矢量图标库
  14. 谷歌浏览器利用开发者工具截取长图
  15. 产品设计必读书籍推荐
  16. 红帽RHCE考试上午-RHCSA(RH134)任务概览[2021最新版]
  17. 通过 I2C 驱动 LCD1602 液晶屏(51单片机)
  18. uploadFile+nginx实现上传图片(Windows/Linux均可用)
  19. Java中类、抽象类、接口的联系与区别
  20. Matlab 应用GPU加速

热门文章

  1. 计算机简单的装机维修,超详细!用装机员pe自己动手给电脑装win7系统
  2. AR 相机扫描效果实现
  3. iOS 7系统 真机调试出现上下黑边
  4. wzc提醒大家仔细读题真的非常重要!(思维+波峰波谷+细节)
  5. Spring+Dubbo+MyBatis+Linner分布式Web开发环境搭建
  6. PAT --- 1041.考试座位号 (15 分)
  7. 高等数学--最后两章知识点总结
  8. XML语法以及DTD的详解
  9. numba : python complier for cuda
  10. Debian操作系统定制版---国产凝思linux系统资料