基于ECDSA算法协同生成签名的方法、装置和数据处理系统
技术领域
本公开的实施例涉及加密技术领域,尤其涉及基于ECDSA算法的签名生成方法、装置以及数据处理系统。
背景技术
消息的数字签名是依赖于某些只有签名者知道的秘密的数,此外,该数又依赖于被签名的消息的内容。签名应当是可验证的。如果对一方是否对文档进行了签名出现争议(由于签名者试图否认其确实创建的签名,或者由于欺骗性声明而导致),无偏的第三方应当能公正地解决这件事,而不需要访问签名者的秘密信息(例如,私有密钥)。
数字签名在信息安全中具有很多应用,特别地,它们被使用在密码方案中。一些应用包括认证、数据完整性和不可否认性。数字签名的一种特别重要的应用是验证大型网络中的公共密钥。对于可信的第三方,验证是一种将用户的身份与公共密钥绑定的方式,使得在以后某个时间,其它实体可以对公共密钥进行认证而无需来自可信第三方的帮助。
被称为数字签名算法(DSA)的密码方案基于公知的且经常讨论的离散对数问题的难解决性。DSA由美国国家标准和技术学会(NIST)于1991年提出并已经成为美国联邦信息处理标准(FIPS 186),称为数字签名标准(DSS)。该算法是公知的ElGamal签名方案的变型,并且可以被分类为具有附录的数字签名(即一种依赖于密码散列(hash)函数而不是定制冗余函数的数字签名)。
椭圆曲线数字签名算法(ECDSA)是一种可以应用于椭圆曲线密码系统且具有类似于DSA的属性的签名方案。它通常被认为是最广泛标准化的基于椭圆曲线的签名方案,出现在ANSI X9.62,FIPS 186-2,IEEE 1363-2000和ISO/IEC 15946-2标准以及多个草案标准中。
ECDSA签名生成过程对若干域参数、私有密钥d和消息m进行运算。输出是签名(r,s),其中签名分量r和s是整数,并且如下进行处理。
1、选择随机整数k∈R[1,n-1],n是域参数之一。
2、计算kG=(x1,y1)并且将x1转换为整数x1,其中G是在椭圆曲线E上的点并且是域参数之一。
3、计算r=x1mod n,其中如果r=0,则返回步骤1。
4、计算e=H(m),其中H代表密码散列(hash)函数,其输出具有不超过n的比特长度(如果不满足该条件,则可以截断H的输出)。
5、计算s=k-1(e+αr)mod n,其中α是签名者的长期私有密钥。如果s=0,则返回步骤1。
6、将(r,s)对作为消息m的ECDSA签名输出。
ECDSA签名验证过程对若干域参数、长期公共密钥Q(其中Q=αP)、消息m以及以上导出的签名(r,s)进行运算。ECDSA签名验证输出对签名的拒绝或接受,并且如下进行处理。
1、验证r和s是区间[1,n-1]中的整数。如果验证失败,则返回拒绝。
2、计算e=H(m)
3、计算w=s-1mod n
4、计算u1=ew mod n以及u2=rw mod n
5、计算R=u1P+u2Q=s-1(eP+rQ)(根据以上3和4)
6、如果R=∞,则拒绝该签名
7、将R的x坐标x1转换为整数x1;计算v=x1mod n
8、如果v=r,则接受该签名,否则拒绝该签名。
在对相关现有技术进行研究的过程中,本公开实施例的发明人发现,私钥的持有方较为容易被攻破,从而导致私钥很容易被窃取,进而导致整个加密系统失效。
发明内容
本公开至少一个实施例的主要目的在于提高私钥的被窃取的难度,降低私钥被窃取的风险。
第一方面,本公开实施例提供了一种基于ECDSA算法协同生成签名的方法,包括:
公钥生成过程和签名生成过程;
其中公钥生成过程包括:
在第一电子设备和第二电子设备处,分别基于每一个电子设备预先获取的参数组生成部分公钥;其中第一电子设备所获取的第一参数组与第二电子设备所获取的第二参数组不同;
在第二电子设备处,将所生成的部分公钥发送给第一电子设备;
在第一电子设备处,将第一电子设备生成的部分公钥与接收到的部分公钥联合得到完整公钥P;
在第一电子设备处,将完整公钥P输出;或者在第一电子设备处,将完整公钥P发送给第二电子设备;并在第二电子设备处,将完整公钥P输出;
签名生成过程包括:
在第二电子设备处,计算待签名信息的摘要的哈希值;并将得到的哈希值发送到第一电子设备;
在第一电子设备处,基于第一参数组对接收到的哈希值计算部分签名,并将计算得到的部分签名发送给第二电子设备;
在第二电子设备处,基于第二参数组对接收到的部分签名计算签名分量,并发送给第一电子设备;
在第一电子设备处,根据签名分量得到完整签名;
在第一电子设备处,将完整签名输出;或者在第一电子设备处,将完整签名发送给第二电子设备;并在第二电子设备处,将完整签名输出。
第二方面,本公开提供了一种基于ECDSA算法协同生成签名的装置,包括:
公钥生成模块和签名生成模块;
其中公钥生成模块,用于
在第一电子设备和第二电子设备处,分别基于每一个电子设备预先获取的参数组生成部分公钥;其中第一电子设备所获取的第一参数组与第二电子设备所获取的第二参数组不同;
在第二电子设备处,将所生成的部分公钥发送给第一电子设备;
在第一电子设备处,将第一电子设备生成的部分公钥与接收到的部分公钥联合得到完整公钥P;
在第一电子设备处,将完整公钥P输出;或者在第一电子设备处,将完整公钥P发送给第二电子设备;并在第二电子设备处,将完整公钥P输出;
签名生成模块用于:
在第二电子设备处,计算待签名信息的摘要的哈希值;并将得到的哈希值发送到第一电子设备;
在第一电子设备处,基于第一参数组对接收到的哈希值计算部分签名,并将计算得到的部分签名发送给第二电子设备;
在第二电子设备处,基于第二参数组对接收到的部分签名计算签名分量,并发送给第一电子设备;
在第一电子设备处,根据签名分量得到完整签名;
在第一电子设备处,将完整签名输出;或者在第一电子设备处,将完整签名发送给第二电子设备;并在第二电子设备处,将完整签名输出。
第三方面,本公开实施例提供了一种计算机存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行第一方面所述的方法中的步骤。
第四方面,本公开实施例提供了一种数据处理系统,包括第一电子设备和第二电子设备;所述第一电子设备与所述第二电子设备通信连接;每一个电子设备均包括:处理器、存储器和通信模组;存储器和通信模组均耦合至所述处理器;所述存储器中存储有计算机程序,所述处理器用于执行所述存储器中存储的计算机程序;所述数据处理系统被配置为执行第一方面所述的方法。
本公开至少一个实施例中,在公钥生成过程中,在两个电子设备处分别基于不同的参数组生成部分的公钥,并将两个电子设备所生成的部分的公钥联合得到完整的公钥,这样私钥不会任意一个电子设备处完整的出现,这样即使攻破了一个电子设备,也难以得到完整的私钥,这样就能够提升私钥被窃取的难度,降低私钥被窃取的风险。并且在签名生成过程中,分别在两个电子设备处,基于所述不同的参数组进行加密,能够完成签名运算的过程。
附图说明
图1示出了本公开一实施例提供的签名系统的结构示意图;
图2示出了本公开的一个实施例提供的基于ECDSA算法的签名生成方法的主要流程;
图3为示出了本公开一实施例提供的基于ECDSA算法协同生成签名的装置的结构示意图。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本公开,并不用于限定本公开。
图1示出了本公开一实施例提供的签名系统的结构的示意图,图1中示出的场景是本公开一实施例提供的基于ECDSA算法的签名生成方法的典型应用场景。请参考图1,该系统包括至少两台电子设备,为了方便描述,分别称为第一电子设备100和第二电子设备200。继续参考图1,第一电子设备100包括处理器110、存储器120以及通信模组130;相应的第一电子设备200包括处理器210、存储器220以及通信模组230。各电子设备中,通信模组、存储器均耦接到处理器中,存储器可以存储可以被处理器执行的计算机程序,处理器在执行计算机程序时,会执行相应的方法流程以实现相应的功能。
这里的通信模组,可以为有线的通信模组,也可以为无线的通信模组,根据实际需要,可以配置支持一种或者多种通信协议的协议栈。如无特殊说明,本公开各个实施例中的“耦接”是指元器件之间通信连接且能够交互数据的一种状态,并不要求两个元器件直接相连。
在实施时,这里的第一电子设备100和第二电子设备200中的一个电子设备可以为终端设备,比如手机等,另外一个电子设备可以为服务器,比如设置在云端的服务器。
除了图1中示出的结构之外,图1中的电子设备通常还可能包括电源等,另在还可能会包含显示屏、声音播放设备等其他外设。在此不再详细说明。
为了便于理解,首先对本公开各实施例可能涉及的一些基本概念和术语进行说明。
E(Fq)、G和n,q是大素数,E是定义在有限域Fq上的椭圆曲线,G=(xG,yG)是E上n阶的基点。其中,[*]表示椭圆曲线上的点乘运算,[+]表示椭圆曲线上的点加运算,mod表示求模运算。
第一方面,本公开一实施例提供了一种基于ECDSA算法协同生成签名的方法,该方法可以通过图1中示出的签名系统执行。图2示出了本公开一实施例提供了一种基于ECDSA算法协同生成签名的方法的主要流程,该方法主要包含公钥生产过程和签名生成过程;
其中公钥生成过程主要包括:
步骤S211,在第一电子设备和第二电子设备处,分别基于每一个电子设备预先获取的参数组生成部分公钥;其中第一电子设备所获取的第一参数组与第二电子设备所获取的第二参数组不同;
步骤S212,在第二电子设备处,将所生成的部分公钥发送给第一电子设备;
步骤S213,在第一电子设备处,将第一电子设备生成的部分公钥与接收到的部分公钥联合得到完整公钥P;
步骤S214,在第一电子设备处,将完整公钥P输出。
签名生成过程包括:
步骤S221,在第二电子设备处,计算待签名信息的摘要的哈希值;并将得到的哈希值发送到第一电子设备;
步骤S222,在第一电子设备处,基于第一参数组对接收到的哈希值计算部分签名,并将计算得到的部分签名发送给第二电子设备;
步骤S223,在第二电子设备处,基于第二参数组对接收到的部分签名计算签名分量,并发送给第一电子设备;
步骤S224,在第一电子设备处,根据签名分量得到完整签名;
步骤S225,在第一电子设备处,将完整签名输出。
本实施例中,在公钥生成过程中,在两个电子设备处分别基于不同的参数组生成部分的公钥,并将两个电子设备所生成的部分的公钥联合得到完整的公钥,这样私钥不会任意一个电子设备处完整的出现,这样即使攻破了一个电子设备,也难以得到完整的私钥,这样就能够提升私钥被窃取的难度,降低私钥被窃取的风险。并且在签名生成过程中,分别在两个电子设备处,基于所述不同的参数组进行加密,能够完成签名运算的过程。
需要指出的是,在一些实施例中,也可以由第二电子设备输出完整公钥P和/或完成签名。在由第二电子设备输出完整公钥P时,在步骤214可以替换为:在第一电子设备处,将完整公钥P发送给第二电子设备;并在第二电子设备处,将完整公钥P输出。相应的,在由第二电子设备输出完整签名时,在步骤225可以替换为:在第一电子设备处,将完整签名发送给第二电子设备;并在第二电子设备处,将完整签名输出。
不难理解的是,本公开的各个实施方式中,“将完整公钥P输出”是指,将完整公钥P公布到网络,比如区块链网络中。“将完整签名输出”是指将完整签名输出到网络中,比如发送给完整签名的接收方。
在一种可选的实施方式中,上述的所述的第一参数组可以包括随机数K1,K2,E(Fq)、G和n,q是大素数;所述的第二参数组可以包括随机数K3,K4,E(Fq)、G和n;其中,E(Fq)是定义在有限域Fq上的椭圆曲线,G=(xG,yG)是E上n阶的基点;
此时,上述的步骤S211中,在第一电子设备和第二电子设备处,分别基于每一个电子设备预先获取的参数组生成部分公钥;其中第一电子设备所获取的第一参数组与第二电子设备所获取的第二参数组不同,可以包括:
在第一电子设备处,计算K1在Fq上的逆元K1 -1mod n,并计算P1=K1 -1[*]G,将计算结果发送给第二电子设备;
在第二电子设备处,计算K3在Fq上的逆元K3 -1mod n,并计算(x,y)=K3 -1[*]P1,将计算结果发送给所述第一电子设备;
在第一电子设备处,计算部分公钥P2=x-1K2[*]P1;
在第二电子设备处,计算部分公钥P3=x-1K3 -1K4[*]P1,并计算P4=x-1K3 -1K4[*]G,
相应的,在步骤S212中,在第二电子设备处,将所生成的部分公钥发送给第一电子设备,包括:
在第二电子设备处,将部分公钥P3以及P4发送给所述第一电子设备;
在步骤S213中,在第一电子设备处,将第一电子设备生成的部分公钥与接收到的部分公钥联合得到完整公钥P,包括:
在第一电子设备处,判断是否有P3=K1 -1[*]P4,在判断为是时,计算P=P2[+]P3,将计算结果P作为完整公钥。
由于公钥P=x-1K2[*]P1[+]x-1K3 -1K4[*]P1
=(x-1K2+x-1K3 -1K4)K1 -1[*]G
=(x-1K2K1 -1+x-1K3 -1K4K1 -1)[*]G
因此,私钥d=x-1K2K1 -1+x-1K3 -1K4K1 -1,进而通信双方均无法独立计算出私钥。
进一步的,上述的签名生成过程还可以包括:将部分公钥P2以及完整公钥P发送给所述第二电子设备;
所述方法还包括:
在第二电子设备处,根据接收到的部分公钥P2以及所生成的部分公钥P3验证接收到的完整公钥P是否正确,并将验证结果发送给第一电子设备;
所述步骤S213中,将计算结果P作为完整公钥,包括:
仅在验证结果指示完整公钥P正确时,将计算结果P作为完整公钥。
通过这种方式,能够进一步提高所生成的数字签名的安全性。
步骤S222中,在第一电子设备处,基于第一参数组对接收到的哈希值计算部分签名,包括:
按照如下公式计算部分签名S1:
S1=(K1e+K2)mod n;
步骤S223中,在第二电子设备处,基于第二参数组对接收到的部分签名计算签名分量,包括:
按照如下公式计算签名分量S:S=(K3S1+K4)mod n;
步骤S224中,在第一电子设备处,根据签名分量得到完整签名,包括:
使用公钥P验证(x,S)是否为ECDSA的有效签名,如是,将(x,S)作为完整签名。
下面证明,(x,S)为公钥P的ECDSA算法签名。
在ECDSA算法中,签名为(r,s),其中对消息m的Hash结果h进行签名的结果s应为s=k-1(h+rd)mod n。
以下证明此结论成立:
令k=(K3K1)-1,h=e=Hash(m),r=x,私钥d=x-1K2K1 -1+x-1K3 -1K4K1 -1,代入得:
s=k-1(h+rd)mod n
=K1K3(e+x(x-1K2K1 -1+x-1K3 -1K4K1 -1))mod n
=K1K3(e+K2K1 -1+K3 -1K4K1 -1)mod n
=(K1K3e+K2K3+K4)mod n
=(K3S1+K4)mod n
=S
可见,(x,S)为公钥P的ECDSA算法签名。
在具体实施时,上述任意一种实施方式中的步骤S221’中,在第一电子设备处,计算待签名信息的摘要的哈希值,包括:
利用SHA256算法计算待签名信息的摘要的哈希值;
相应的,上述任意一种实施方式中的步骤S221中,在第二电子设备处,计算待签名信息的摘要的哈希值,包括:
利用SHA256算法计算待签名信息的摘要的哈希值。
当然在具体实施时,采用其他的方式,也可以采用其他的算法计算摘要的哈希值,在此不再详细说明。
此外,在具体实施时,上述实施例中的待签名信息可以为交易信息。其中,这里的交易信息具体可以为虚拟货币的交易信息,这里的虚拟货币可以为比特币、以太币等虚拟数字货币。
第二方面,本公开一实施例还提供了一种基于ECDSA算法协同生成签名的装置。图3示出了该装置的主要结构,包括:
公钥生成模块310和签名生成模块320;
其中公钥生成模块310,用于
在第一电子设备和第二电子设备处,分别基于每一个电子设备预先获取的参数组生成部分公钥;其中第一电子设备所获取的第一参数组与第二电子设备所获取的第二参数组不同;
在第二电子设备处,将所生成的部分公钥发送给第一电子设备;
在第一电子设备处,将第一电子设备生成的部分公钥与接收到的部分公钥联合得到完整公钥P;
在第一电子设备处,将完整公钥P输出;或者在第一电子设备处,将完整公钥P发送给第二电子设备;并在第二电子设备处,将完整公钥P输出;
签名生成模块用于320:
在第二电子设备处,计算待签名信息的摘要的哈希值;并将得到的哈希值发送到第一电子设备;
在第一电子设备处,基于第一参数组对接收到的哈希值计算部分签名,并将计算得到的部分签名发送给第二电子设备;
在第二电子设备处,基于第二参数组对接收到的部分签名计算签名分量,并发送给第一电子设备;
在第一电子设备处,根据签名分量得到完整签名;
在第一电子设备处,将完整签名输出;或者在第一电子设备处,将完整签名发送给第二电子设备;并在第二电子设备处,将完整签名输出。
在一些实施方式中,所述第一参数组包括随机数K1,K2,E(Fq)、G和n,q是大素数;所述第二参数组包括随机数K3,K4,E(Fq)、G和n;其中,E(Fq)是定义在有限域Fq上的椭圆曲线,G=(xG,yG)是E上n阶的基点;
在第一电子设备和第二电子设备处,分别基于每一个电子设备预先获取的参数组生成部分公钥;其中第一电子设备所获取的第一参数组与第二电子设备所获取的第二参数组不同,包括:
在第一电子设备处,计算K1在Fq上的逆元K1 -1mod n,并计算P1=K1 -1[*]G,将计算结果发送给第二电子设备;
在第二电子设备处,计算K3在Fq上的逆元K3 -1mod n,并计算(x,y)=K3 -1[*]P1,将计算结果发送给所述第一电子设备;
在第一电子设备处,计算部分公钥P2=x-1K2[*]P1;
在第二电子设备处,计算部分公钥P3=x-1K3 -1K4[*]P1,并计算P4=x-1K3 -1K4[*]G,
所述在第二电子设备处,将所生成的部分公钥发送给第一电子设备,包括:
在第二电子设备处,将部分公钥P3以及P4发送给所述第一电子设备;
所述在第一电子设备处,将第一电子设备生成的部分公钥与接收到的部分公钥联合得到完整公钥P,包括:
在第一电子设备处,判断是否有P3=K1 -1[*]P4,在判断为是时,计算P=P2[+]P3,将计算结果P作为完整公钥。
在一些实施方式中,所述签名生成模块还用于:将部分公钥P2以及完整公钥P发送给所述第二电子设备;
验证模块,用于在第二电子设备处,根据接收到的部分公钥P2以及所生成的部分公钥P3验证接收到的完整公钥P是否正确,并将验证结果发送给第一电子设备;
所述将计算结果P作为完整公钥,包括:
仅在验证结果指示完整公钥P正确时,将计算结果P作为完整公钥。
在一些实施方式中,所述在第一电子设备处,基于第一参数组对接收到的哈希值计算部分签名,包括:
按照如下公式计算部分签名S1:
S1=(K1e+K2)mod n;
所述在第二电子设备处,基于第二参数组对接收到的部分签名计算签名分量,包括:
按照如下公式计算签名分量S:S=(K3S1+K4)mod n;
所述在第一电子设备处,根据签名分量得到完整签名,包括:
使用公钥P验证(x,S)是否为ECDSA的有效签名,如是,将(x,S)作为完整签名。
在一些实施方式中,所述在第二电子设备处,计算待签名信息的摘要的哈希值,包括:
利用SHA256算法计算待签名信息的摘要的哈希值。。
此外,在具体实施时,上述实施例中的待签名信息可以为交易信息。其中,这里的交易信息具体可以为虚拟货币的交易信息,这里的虚拟货币可以为比特币、以太币等虚拟数字货币。
由于本公开实施例提供的基于ECDSA算法协同生成签名的装置,能够用于实施如第一方面任一项所述的基于ECDSA算法协同生成签名的方法。因此本公开实施例中的技术效果、相关技术术语以及相关的实施方式可以参考第一方面的实施例,在此不再详细说明。
第三方面,本公开的实施例还提供了一种计算机存储介质,该计算机存储介质中存储有计算机指令代码,该计算机指令代码在被计算机设备执行时执行第一方面任一项所述的方法。
第四方面,本公开的实施例还提供了一种数据处理系统,该系统的主要结构可以参考图1,包括第一电子设备和第二电子设备;所述第一电子设备与所述第二电子设备通信连接;每一个电子设备均包括:处理器、存储器和通信模组;存储器和通信模组均耦合至所述处理器;所述存储器中存储有计算机程序,所述处理器用于执行所述存储器中存储的计算机程序;所述数据处理系统被配置为执行第一方面任一项所述的方法。
以上仅为本公开的优选实施例,并非因此限制本公开的专利范围,凡是利用本公开说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本公开的专利保护范围内。