1、SM2算法简介
SM2密码算法是我国2010年发布的商用密码算法,属于公钥密码算法,也成为非对称密钥机制密码算法。SM2基于椭圆曲线离散对数问题,相对于RSA基于大整数因数分解更具优越性。
SM2算法于2012年成为我国密码行业标准,并于2017年被ISO采纳,成为国际标准的一部分。SM2算法行业标准包括如下构成:
GMT 0003.1-2012-SM2 椭圆曲线公钥密码算法第1部分:总则
GMT 0003.2-2012-SM2 椭圆曲线公钥密码算法第2部分:数字签名算法
GMT 0003.3-2012-SM2 椭圆曲线公钥密码算法第3部分:密钥交换协议
GMT 0003.4-2012-SM2 椭圆曲线公钥密码算法第4部分:公钥加密算法
GMT 0003.5-2012 SM2 椭圆曲线公钥密码算法第5部分:参数定义
简要说,SM2是一种椭圆曲线密码学(Elliptic Curve Cryptograghy,ECC)的实现,具体推荐参数是定义在256bit素域上。
SM2算法私钥长度为256bit,公钥长度为512bit。数字签名算法的输出签名长度为512bit,公钥加密算法的输出密文长度为文明长度+96byte。
2、数字签名算法
数字签名算法由一个签名者对数据产生数字签名,并由一个验签者验证签名的可靠性。每个签名者由一个公钥和一个私钥,其中私钥用于产生签名,验证者用签名者的公钥验证签名。一般来说,数字签名不会直接对原始数据进行签名操作,而是先使用密码杂凑算法(例如SM3)对原始数据进行压缩输出摘要值,再对该摘要值进行签名。在验证时,也要同样进行得到摘要值进行比较验证。
上面提到了私钥和公钥,具体来说私钥dA为256bit随机数,对应的公钥PA=[dA]G=(XA,YA),XA和YA都是256bit,所以PA就是512bit长。按照SM2参数公开如下,SM2使用素数域256位椭圆曲线,基点G也就是(xG、yG),p是一个大素数,也就是定义在有限域GF(p)上的椭圆曲线。
2.1 签名生成算法
这里ZA是签名者的可辨别标识(公开固定值)、M的待签名的消息(公开)、PA是公钥(公开)、DA是私钥(不可公开妥善保存)。注意这里引入随机数k,从而使得即使对相同的M多次签名,每次的签名值都不同。
SM2算法输出数字签名是(r,s),其中r和s都是256bit长,所以数字签名长度为512bit。签名者将原始消息M和签名(r,s)一起发送给验证者。
2.2签名验证算法
验证者在验签时拥有的数据包括ZA(签名者的公开标识)、PA(签名者的公钥)以及收到的M'和签名值(r',s')。这里我们可以看到,SM2算法的验签过程相比较签名过程要计算更多的椭圆曲线上点乘运算,故SM2算法的验签速度较慢。
![](https://img-blog.csdnimg.cn/f9319e51772e4cf5a93f76104c1b6df9.png)
3、SM2数字签名算法特点(与RSA对比)
(1)安全性高,相当于RSA-3072。SM2安全强度为128位。
(2)密钥短(256bit VS. 3072bit)
(3)私钥产生简单,256bit的随机数即可。RSA则需要大素数判定等。
(4)签名速度快,同等安全强度下,速度远超RSA。
本文转载自: https://blog.csdn.net/ryanzzzzz/article/details/129690211
版权归原作者 搞搞搞高傲 所有, 如有侵权,请联系我们删除。
版权归原作者 搞搞搞高傲 所有, 如有侵权,请联系我们删除。