[发明专利]一种基于SM2椭圆曲线的签名验证算法的实现方法及系统有效
申请号: | 201710368280.5 | 申请日: | 2017-05-23 |
公开(公告)号: | CN107040385B | 公开(公告)日: | 2020-10-27 |
发明(设计)人: | 王丽雪;熊晓明 | 申请(专利权)人: | 广东工业大学 |
主分类号: | H04L9/32 | 分类号: | H04L9/32 |
代理公司: | 广东广信君达律师事务所 44329 | 代理人: | 杨晓松 |
地址: | 510062 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 sm2 椭圆 曲线 签名 验证 算法 实现 方法 系统 | ||
1.一种基于SM2椭圆曲线的签名验证算法的实现系统,该系统包括:SM2控制模块、签名生成控制模块、签名验证控制模块、随机数生成模块、密码杂凑模块、点乘运算模块、点加运算模块、模加运算模块、模减运算模块、模乘运算模块、模逆运算模块;
SM2控制模块:用于与签名生成控制模块和签名验证控制模块进行通信,向签名生成控制模块发送签名生成命令,向签名验证模块发送签名验证命令,同时接收签名生成控制模块返回的数字签名,接收签名验证模块返回的签名验证是否通过的消息;
签名生成控制模块:用于在收到SM2控制模块发送的进行签名生成的命令后,与随机数生成模块、密码杂凑模块、点乘运算模块、模加运算模块、模逆运算模块、模乘运算模块、模减运算模块进行通信:拼接用户杂凑值ZA和待签名的消息M,得到签名方拼接消息ME;通过密码杂凑模块对ME进行杂凑运算,得到签名方拼接消息杂凑值e;通过随机数生成模块产生随机数k;通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法对椭圆曲线的基点G和k进行点乘运算,得坐标(x1,y1);通过模加运算模块计算r=(e+x1)mod n,得到r的值;检验r=0或r+k=n是否成立;若r=0或r+k=n成立,则通知随机数生成模块重新产生随机数k;若r=0或r+k=n不成立,则通过模加运算模块计算a1=(1+dA)mod n,得到的a1值;通过模逆运算模块和模乘运算模块并行计算a2=a1-1mod n,a3=(r*dA)mod n,得到a2和a3的值;通过模减运算模块计算a4=(k-a3)mod n,得到a4的值;通过模乘运算模块计算s=(a2*a4)mod n,得到s的值;检验s=0是否成立,若成立则通知随机数生成模块重新产生随机数k,若不成立则输出消息M及其数字签名(r,s);
签名验证控制模块:用于在收到SM2控制模块发送的进行签名验证的命令后,与密码杂凑模块、模加运算模块、点乘运算模块、点加运算模块进行通信:从发送方接收(r’,s’),即接收待验证消息M’的待验证的签名;检验r’是否在1到(n-1)的范围内;检验s’是否在1到(n-1)的范围内;若r’和s’中至少有一个不在1到(n-1)的范围内,则验证不通过;若r’和s’都在1到(n-1)的范围内,则拼接用户杂凑值ZA和待验证的消息M’,得到验证方拼接消息ME’;通过密码杂凑模块对ME’进行杂凑运算,得到验证方拼接消息杂凑值e’;通过模加运算模块计算t=(r’+s’)mod n,得到t的值;检验t是否等于0,若t=0,则验证不通过,若t≠0,则通过点乘运算模块,采用一种改进的部分使用一补数减法形式的点乘算法计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2);通过点加运算模块计算s’G+tpA,得其坐标(x1’,y1’);通过模加运算模块计算R=(e’+x1’)mod n,得到R的值;检验R是否等于r’,若R等于r’,则验证通过,若R不等于r’,则验证不通过;
随机数生成模块:用于生成1到(n-1)范围内的随机数k;
密码杂凑模块:用于通过使用SM3密码杂凑算法,求得用户的杂凑值ZA,求得签名方拼接消息杂凑值e和验证方拼接消息杂凑值e’;
点乘运算模块:用于计算kG,得到其坐标(x1,y1);计算s’G和tpA,得到它们的坐标(m1,n1)和(m2,n2),点乘运算采用一种改进的部分使用一补数减法形式的点乘算法;
点加运算模块:用于计算s’G+tpA,得其坐标(x1’,y1’);
模加运算模块:用于计算r=(e+x1)mod n,得到r的值;计算a1=(1+dA)mod n,得到的a1值;计算t=(r’+s’)mod n,得到t的值;计算R=(e’+x1’)mod n,得到R的值;
模减运算模块:用于计算a4=(k-a3)mod n,得到a4的值;
模乘运算模块:用于计算a3=(r*dA)mod n,得到a3的值,模乘运算采用一种改进的Blakley算法;
模逆运算模块:用于计算计算a2=a1-1mod n,得到a2的值,模逆运算采用Fp上二进制求逆算法;
其中,dA为签名方私钥,n为椭圆曲线基点G的阶,pA为签名方公钥,tpA为将t与pA进行点乘运算,s’G为将s’与G进行点乘运算,kG为将k与G进行点乘运算;
所述点乘运算采用一种改进的部分使用一补数减法形式的点乘算法,具体包括以下步骤:
步骤一:输入k=(kl-1,…k1,k0)2,P∈E(Fp);
步骤二:用k的PCS形式算法计算k的PCS形式k’;
步骤三:令Q=∞;
步骤四:从i=length(k’)-1到i=0,循环:
步骤五:Q=2Q;
步骤六:若ki=1,则Q=Q+P,若ki=-1,则Q=Q-P;
步骤七:i=i-1;
步骤八:循环结束后,输出点Q,点Q的值就等于所求的kG的值;
其中,length(k’)为k’的二进制表示的长度;
所述模乘运算采用一种改进的Blakley算法,具体包括以下步骤:
设A、B和N是三个k比特位的大整数,且满足A,BN,其中
步骤一:输入A、B和N;
步骤二:令P=0;
步骤三:从i=k-1到i=0,循环:
步骤四:P=2P;
步骤五:若P≥N,则P=P-N;
步骤六:P=P+A*bi
步骤七:若P≥N,则P=P-N;
步骤八:返回P的值;
所述用k的PCS形式算法计算k的PCS形式k’包括以下步骤:
输入:k=(kl-1,…k1,k0)2
输出:k的PCS形式k’
1.i=0
2.如果l≤l-3,重复执行
2.1如果ki=ki+1=1,则
2.1.1 j=i+2
2.1.2如果j≥0,重复执行
2.1.2.1如果kj=0,则
2.1.2.1.1如果j≤l-3且kj+1=kj+2=1则j=j+3,
否则退出循环2.1.2
2.1.2.2否则j=j+1
2.1.3如果l=((j-1)-i+1)2,则
2.1.3.1m=(kj-1,…,ki)2,
2.1.3.2对于n从j-i到0,重复执行kn+i=mn
2.1.3.3 i=j
2.1.4否则i=j+2
2.2否则i=i+1
3.返回k的PCS形式k’。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于广东工业大学,未经广东工业大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710368280.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:水平栅极环绕纳米线晶体管的底部隔离
- 下一篇:静态随机存取存储单元的布局