国密SM2数字签名算法

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 那么就表明没有通过。
然后通过 t s 计算曲线上的点 (x1,y1)=sG+tPA
再计算 R=x1+e ,然后验证 R r 是不是相等,如果相等则表明验证通过。

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 是否相符,相符就通过了。

你可能感兴趣的:(加密算法)