区块链与密码学第6-5讲:SM2数字签名算法
Posted Dig Quant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链与密码学第6-5讲:SM2数字签名算法相关的知识,希望对你有一定的参考价值。
【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链与密码学》授课讲义、教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系,我们将及时处理。】
6.5 SM2数字签名算法
在政府高度重视和市场迫切需求的双向驱动下,国密算法SM1—SM9应时而生。其中,SM2是国家密码管理局于2010年12月17日发布的椭圆曲线公钥密码算法,包含5个部分:
总则
数字签名算法
密钥交换协议
公钥加密算法
参数定义
曲线参数
SM2标准推荐使用256位素域Fp上的椭圆曲线y2=x3 + ax + b,其中:
密钥生成算法
Alice选择随机数dA做为私钥,其中0
Alice计算公钥PA=dA⋅G
输出密钥对 (sk=dA, pk=PA)
签名算法
设Alice发签名消息M给Bob,IDA是Alice的标识符,ENTLA是IDA的长度,dA是A的私钥,基点G= (xG, yG),A的公钥PA=dA ⋅ G= (xA, yA).。
ZA=H (ENTLA ‖IDA ‖a‖b‖ xG ‖ yG ‖ xA ‖ yA), H是SM3算法
①设置M*=ZA ‖M并计算 e = H(M*)
②产生随机数k∈[1, n-1]
③计算椭圆曲线点G1=k ⋅ G= (x1, y1)
④计算r=(e+x1) mod n,若r=0或r+k=n则返回②
⑤计算s=(1+ dA)−1·(k −r ·dA)mod n,若s=0则返回②
⑥以(r, s)作为对消息M的签名
SM2数字签名算法签名过程示意图
验证算法
接收到的消息为M′,签名为(r′, s′)和发送者Alice的公钥PA,Bob执行如下步骤验证合法性:
检验r′∈[1, n-1]是否成立,若不成立则验证不通过
检验s′∈[1, n-1]是否成立,若不成立则验证不通过
设置M*=ZA‖M′
计算e′= H(M* )
计算t= (r′ + s′) mod n,若t=0,则验证不通过
计算椭圆曲线点 (x1′,y1′)= s′ · G + t · PA
计算v=(e′+ x1′) mod n,检验v=r′是否成立,若成立则验证通过;否则验证不通过
SM2数字签名算法验证过程示意图
算法的正确性
由于s = (1 + dA) −1·(k − r ·dA),PA = dA · G,我们可以得到:
s · G + t · PA
= s · G + (r + s)·dA · G
= (s + s · dA ) · G+ r · dA · G
= s · (1 + dA ) · G+ r · dA · G
= (1+dA) −1 · (k −r · dA) · (1+ dA ) · G + r · dA · G
= (k − r · dA) · G + r · dA · G
= k · G −r · dA · G + r · dA · G
= k · G
验证算法的特点
SM2签名验证算法的一个显著特点是,其中加入了较多的检错功能。
因为这是收信者对收到的签名数据进行验证,而签名数据是经过信道传输过来的,由于信道干扰和对手的篡改,因此,签名数据中含有错误或被篡改的可能性是存在的。
把错误和篡改检测出来,对提高签名验证系统的数据完整性、系统可靠性和安全性是有益的。
验证算法中的①检查签名分量r’的合理性
验证算法中的②检查签名分量s’的合理性
验证算法中的⑤检查t的正确性
SM2签名算法的应用
安全:目前尚没有发现求解椭圆曲线离散对数问题的亚指数算法。
实现:软硬件实现规模小,容易实现。160位的椭圆曲线密码的安全性,相当于1024位的RSA密码。
实现难点:倍点运算。
应用场景:目前最大的应用是二代身份证。
应用前景:2019年10月26日,第十三届全国人民代表大会常务委员会第十四次会议表决通过密码法,于2020年1月1日起施行。
今天的课程就到这里啦,下一堂课我们将学习基于身份的数字签名算法,带大家继续了解数字签名,敬请期待!
-- 完 --
关注点宽学园,每周持续更新区块链系列课程,小宽带你进入区块链世界。我们下节课见啦。
【区块链与密码学】课堂回顾:
以上是关于区块链与密码学第6-5讲:SM2数字签名算法的主要内容,如果未能解决你的问题,请参考以下文章