架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 128|回复: 0

[C] SM2数字签名验签的原理

[复制链接]
跳转到指定楼层
楼主
发表于 2019-6-26 10:09:45
zu
SM2是基于椭圆曲线的数字签名算法,关于椭圆曲线的解释可以常见前一篇关于椭圆曲线的微博,下面概要的介绍一下SM2签名的过程。
对于要签名的信息ee,这个是原始信息经过一定的处理通过散列函数得到的,散列算法用的是国密SM3算法,这个过程也略过,只介绍重点的签名和验证的过程。

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

2、签名验证的过程
验证签名就是利用得到的签名、公钥、椭圆曲线参数等对签名进行验证,验证主要步骤是:
首先计算t=r+st=r+s,如果t=0t=0那么就表明没有通过。
然后通过tt与ss计算曲线上的点(x1,y1)=s∗G+t∗PA(x1,y1)=s∗G+t∗PA
再计算R=x1+eR=x1+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(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
可以看出依据公钥得到的椭圆曲线上的这个点和签名时的点是一致的。
然后再由这个x1x1和收到的信息相加,看是否与发送的签名rr是否相符,相符就通过了。
---------------------
作者:leowang666
来源:CSDN
原文:https://blog.csdn.net/hugewaves/article/details/59205914
版权声明:本文为博主原创文章,转载请附上博文链接!





上一篇:【原创】Google AdSense 电汇收款教程
下一篇:angular 事件绑定/属性绑定 @HostListener ,@HostBinding
帖子永久地址: 

架构师_程序员 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与架构师_程序员享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和架构师_程序员的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、架构师_程序员管理员和版主有权不事先通知发贴者而删除本文

码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2019-7-22 05:08

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表