国密SM2数字签名算法

来源:互联网 发布:ipad手绘软件 编辑:程序博客网 时间:2024/05/15 18:42

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

1、签名的过程

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

2、签名验证的过程

验证签名就是利用得到的签名、公钥、椭圆曲线参数等对签名进行验证,验证主要步骤是:
首先计算t=r+s,如果t=0那么就表明没有通过。
然后通过ts计算曲线上的点(x1,y1)=sG+tPA
再计算R=x1+e,然后验证Rr是不是相等,如果相等则表明验证通过。

3、验证的原理

为什么这样能完成验证,我们不妨推导一下:
(x1,y1)=sG+tPA           =sG+(r+s)PA            =sG+(r+s)dAG=(1+dA)sG+rdAG=(1+dA)(1+dA)1(krdA)G+rdAG=(krdA)G+rdAG=kG
可以看出依据公钥得到的椭圆曲线上的这个点和签名时的点是一致的。
然后再由这个x1和收到的信息相加,看是否与发送的签名r是否相符,相符就通过了。

0 0
原创粉丝点击