技术领域:
本发明涉及一种ecc私钥分段存储的ecdsa签名方法及系统。
背景技术:
:
椭圆曲线密码学(ellipticcurvecryptography,ecc)是一种公钥密码算法,可以实现加解密和数字签名验签等密码运算,其中的签名算法标准是椭圆曲线数字签名算法ecdsa。
在ecc中,私钥是其核心,一旦私钥发生泄漏,将丧失安全性。为保护私钥安全,部分方案提出将智能卡芯片中的sm2私钥分成两部分,两方协同计算才能对消息实现签名运算,运算双方均无法获取对方部分私钥的任何信息以及ecc私钥的任何信息,即使任何一方被攻击者掌控,都无法伪造签名。
但是,在目前的实现方案中,有的方案交互步骤较多,性能较差,有的方案使用了零知识证明、同态加密等复杂的密码运算,效率较低。
技术实现要素:
:
本发明的目的是提供一种效率更高的一种ecc私钥分段存储的ecdsa签名方法及系统。
上述的目的通过以下的技术方案实现:
一种ecc私钥分段存储的ecdsa签名方法,本方法包括两个子算法:公私钥对生成子算法和数字签名子算法;
第一步公私钥对生成子算法:
客户端随机生成客户端私钥因子,并生成对应的公钥因子,发送给服务器端;
所述的服务器接收所述的客户端发来的客户端公钥因子,随机生成服务器端私钥因子,并基于客户端公钥因子以及预设的基点,生成最终代表客户端身份的公钥;
第二步数字签名子算法:
针对明文消息,所述的客户端计算明文消息的数字摘要,并生成对该明文消息数字摘要的签名会话数据,即客户端签名会话数据,并将所述的客户端签名会话数据发送至所述的服务器;
所述的服务器接收到所述的客户端发来的签名会话数据,基于所述的客户端签名会话数据和所述的服务器私钥因子,生成服务器端签名会话数据,并将服务器端签名会话数据发送给所述的客户端;
所述的客户端收到服务器端签名会话数据,基于客户端私钥因子及所述的服务器端签名会话数据,生成所述的明文消息的椭圆曲线数字签名算法ecdsa数字签名。
所述的一种ecc私钥分段存储的ecdsa签名方法,客户端与服务器端按照以下流程随机生成各自的私钥因子和相关数据,并最终生成代表客户端a的公钥:
c1:客户端a随机生成d1∈[1,n-1];
c2:客户端a计算p1=[d1]g;
c3:客户端a将p1发送给服务器端;
s1:服务器端随机生成d2∈[1,n-1],d3∈[1,n-1];
s2:服务器端计算:pa=[d2]p1+[d3]g,并公开pa。
所述的一种ecc私钥分段存储的ecdsa签名方法,客户端与服务器端对消息m执行以下流程,并最终生成对消息m的椭圆曲线数字签名算法ecdsa数字签名(r,s):
c4:客户端a对消息m做hash运算,计算e=h(m);
c5:客户端a随机生成整数k1∈[1,n-1],计算q1=[k1]g,q1为椭圆曲线上的点;
c6:客户端a将(e,q1)作为客户端签名会话数据发送给服务器端;
s3:服务器端收到客户端签名会话数据(e,q1),随机生成k2∈[1,n-1],k3∈[1,n-1];
s4:服务器端计算q2=[k2]g,q'=[k2]q1=(x1',y1'),其中q'为椭圆曲线上的点,其坐标为(x1',y1'),并计算r'=x1'modn;
s5:服务器端计算
s6:服务器端将(q2,s1,s2)作为服务器端的签名会话数据发送给客户端;
c7:客户端a收到(q2,s1,s2)后,计算q=[k1]q2=(x1,y1),其中q为椭圆曲线上的点,其坐标为(x1,y1),并计算r=x1modn;
c8:客户端a计算
有益效果:
1.本发明通过将ecc私钥分成两部分,其中一部分在客户端,一部分在服务器端,客户端与服务器端均不知道对方的私钥因子,同时均不能计算出对应的ecc私钥,通过双方按照指定的流程运算,能够实现ecdsa签名,从而有效保护ecc的私钥安全。
2.本发明不使用零知识证明、同态密码等复杂的密码运算,效率更高。
附图说明:
附图1是本发明的算法流程图。
具体实施方式:
下面将结合本发明的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
实施例1:
一种ecc私钥分段存储的ecdsa签名方法,本方法包括两个子算法:公私钥对生成子算法和数字签名子算法;
第一步公私钥对生成子算法:
客户端随机生成客户端私钥因子,并生成对应的公钥因子,发送给服务器端;
所述的服务器接收所述的客户端发来的客户端公钥因子,随机生成服务器端私钥因子,并基于客户端公钥因子以及预设的基点,生成最终代表客户端身份的公钥;
第二步数字签名子算法:
针对明文消息,所述的客户端计算明文消息的数字摘要,并生成对该明文消息数字摘要的签名会话数据,即客户端签名会话数据,并将所述的客户端签名会话数据发送至所述的服务器;
所述的服务器接收到所述的客户端发来的签名会话数据,基于所述的客户端签名会话数据和所述的服务器私钥因子,生成服务器端签名会话数据,并将服务器端签名会话数据发送给所述的客户端;
所述的客户端收到服务器端签名会话数据,基于客户端私钥因子及所述的服务器端签名会话数据,生成所述的明文消息的椭圆曲线数字签名算法ecdsa数字签名。
其中,在椭圆曲线密码学中,使用到的系统参数为椭圆曲线e(fp)、g和n,其中e(fp)(p是一个大素数)为定义在有限域fp上的椭圆曲线e,定义在fp上的椭圆曲线方程为y2=x3+ax+b,其中a,b∈fp,且(4a3+27b2)modp≠0,其中g为椭圆曲线的一个基点,n为基点g的阶,[夸]g表示大数夸与点g的乘法运算。
实施例2:
实施例1所述的一种ecc私钥分段存储的ecdsa签名方法,客户端与服务器端按照以下流程随机生成各自的私钥因子和相关数据,并最终生成代表客户端a的公钥:
c1:客户端a随机生成d1∈[1,n-1];
c2:客户端a计算p1=[d1]g;
c3:客户端a将p1发送给服务器端;
s1:服务器端随机生成d2∈[1,n-1],d3∈[1,n-1];
s2:服务器端计算:pa=[d2]p1+[d3]g,并公开pa。
实施例3:
实施例1所述的一种ecc私钥分段存储的ecdsa签名方法,客户端与服务器端对消息m执行以下流程,并最终生成对消息m的椭圆曲线数字签名算法ecdsa数字签名(r,s):
c4:客户端a对消息m做hash运算,计算e=h(m);
c5:客户端a随机生成整数k1∈[1,n-1],计算q1=[k1]g,q1为椭圆曲线上的点;
c6:客户端a将(e,q1)作为客户端签名会话数据发送给服务器端;
s3:服务器端收到客户端签名会话数据(e,q1),随机生成k2∈[1,n-1],k3∈[1,n-1];
s4:服务器端计算q2=[k2]g,q'=[k2]q1=(x1',y1'),其中q'为椭圆曲线上的点,其坐标为(x1',y1'),并计算r'=x1'modn;
s5:服务器端计算
s6:服务器端将(q2,s1,s2)作为服务器端的签名会话数据发送给客户端;
c7:客户端a收到(q2,s1,s2)后,计算q=[k1]q2=(x1,y1),其中q为椭圆曲线上的点,其坐标为(x1,y1),并计算r=x1modn;
c8:客户端a计算