密钥分布式生成的数字签名方法技术

技术编号:21719002 阅读:26 留言:0更新日期:2019-07-27 21:32
本发明专利技术公开了一种密钥分布式生成的数字签名方法,用于解决现有数字签名方法效率低的技术问题。技术方案是在密钥生成阶段,t个签名参与者选取自己的子私钥,通过与第一个签名参与者的交互完成私钥的生成。在签名阶段,t个签名参与者依次利用自己持有的子私钥进行分布式签名,然后由第t个签名参与者在同态加密条件下完成签名第二部分的合成,再由第一个签名参与者完成最终的签名合成与验证。本发明专利技术利用paillier同态加密算法,每个签名参与者不需要利用零知识证明来保证签名的正确性,最后的签名验证只需要一个椭圆曲线上的点加运算和两个椭圆曲线上的点乘运算,与背景技术t次零知识证明相比,提高了计算效率。

Digital Signature Method for Distributed Key Generation

【技术实现步骤摘要】
密钥分布式生成的数字签名方法
本专利技术涉及一种数字签名方法,特别涉及一种密钥分布式生成的数字签名方法。
技术介绍
文献“GoldfederS,GennaroR,KalodnerH,etal.SecuringBitcoinwalletsviaanewDSA/ECDSAthresholdsignaturescheme.2015.”中提出了一种分布式门限签名方法,该方法利用的主要技术是paillier同态加密算法和零知识证明。该方法中,签名的私钥由t个人掌握,签名过程需要t个人参与完成,因此提高了签名私钥的安全性。然而,这个方法中使用了大量的零知识证明操作,零知识证明需要验证方与被验证方进行多次交互,交互次数的量级越高,被验证方的可信度越高,这是一个耗时操作,因此该方法的效率相对较低。在该方法中,完成一次签名需要进行t次零知识证明,假设进行一次零知识证明需要tz次交互,那么完成所有的零知识证明就需要t·tz次交互,交互的次数太多导致该方法并不适合在真实场景中应用。
技术实现思路
为了克服现有数字签名方法效率低的不足,本专利技术提供一种密钥分布式生成的数字签名方法。该方法在密钥生成阶段,t个签名参与者选取自己的子私钥,通过与第一个签名参与者的交互完成私钥的生成。在签名阶段,t个签名参与者依次利用自己持有的子私钥进行分布式签名,然后由第t个签名参与者在同态加密条件下完成签名第二部分的合成,再由第一个签名参与者完成最终的签名合成与验证。本专利技术利用paillier同态加密算法,每个签名参与者不需要利用零知识证明来保证签名的正确性,只需要由第一个签名参与者对签名进行验证就可以保证最终签名的正确性,最后的签名验证只需要一个椭圆曲线上的点加运算和两个椭圆曲线上的点乘运算,与
技术介绍
t次零知识证明相比,提高了计算效率。本专利技术解决其技术问题所采用的技术方案:一种密钥分布式生成的数字签名方法,其特点是包括以下步骤:步骤一、第一个签名参与者ID1选取自己的子私钥d1∈{1,2,…,n-1},然后计算自己的子私钥d1在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的子私钥d1∈{1,2,…,n-1}并重新计算自己的子私钥d1在模n下是否存在乘法逆元直到找到一个存在乘法逆元的子私钥d1,然后执行下一步骤;其中,ID1表示第一个签名参与者,d1表示第一个签名参与者ID1的子私钥,表示第一个签名参与者ID1的子私钥d1在模n下的乘法逆元,n为正整数,表示椭圆曲线基点的阶;步骤二、按照下式,第一个签名参与者ID1计算自己的子公钥Q1和伪子公钥Q1′,然后将子公钥Q1和伪子公钥Q1′都广播给所有签名参与者:Q1=d1G其中,Q1表示第一个签名参与者ID1的子公钥,Q1′表示第一个签名参与者ID1的伪子公钥,G表示椭圆曲线上一个阶为n的基点;步骤三、接收到第一个签名参与者ID1的子公钥Q1和伪子公钥Q1′后,第i个签名参与者IDi选取自己的子私钥di∈{1,2,…,n-1},然后按照下式,计算自己的伪子公钥Qi′,并将伪子公钥Qi′发送给第一个签名参与者ID1,i=2,3,...,t:Qi′=diQ1′其中,IDi表示第i个签名参与者,di表示第i个签名参与者IDi的子私钥,Qi′表示第i个签名参与者IDi的伪子公钥,t为正整数,表示签名参与者IDi的数目;步骤四、第一个签名参与者ID1在接收到所有签名参与者的伪子公钥Qi′后,按照下式,依次计算每一个签名参与者IDi的子公钥Qi,然后将所有计算出的子公钥Qi公开:Qi=d1Qi′其中,Qi表示第i个签名参与者IDi的子公钥;步骤五、每一个签名参与者IDi接收到第一个签名参与者ID1公开的子公钥Qi后,验证等式Qi=diG是否成立,如果每一个签名参与者的验证结果都是成立,则执行下一步骤,如果有任何一个签名参与者的验证结果是不成立,则返回步骤一;步骤六、按照下式,每一个签名参与者IDi计算签名公钥Q并对签名公钥Q进行公开:其中,Q表示签名公钥,∑表示求和操作;步骤七、第一个签名参与者ID1选取自己的秘密值k1∈{1,2,…,n-1},然后计算自己的秘密值k1在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的秘密值k1∈{1,2,…,n-1}并重新计算自己的秘密值k1在模n下是否存在乘法逆元直到找到一个存在乘法逆元的秘密值k1,然后执行下一步骤;其中,k1表示第一个签名参与者ID1的秘密值,表示第一个签名参与者ID1的秘密值k1在模n下的乘法逆元;步骤八、按照下式,第一个签名参与者ID1计算第一个签名参数中间值R1,并将第一个签名参数中间值R1发送给第二个签名参与者ID2:R1=k1G其中,R1表示第一个签名参数中间值,ID2表示第二个签名参与者;步骤九、第i个签名参与者IDi接收到第i-1个签名参数中间值Ri-1后,选取自己的秘密值ki∈{1,2,…,n-1},然后计算自己的秘密值ki在模n下是否存在乘法逆元ki-1,如果存在,则执行下一步骤,如果不存在,则重新选取自己的秘密值ki∈{1,2,…,n-1}并重新计算自己的秘密值ki在模n下是否存在乘法逆元直到找到一个存在乘法逆元的秘密值ki,然后执行下一步骤,i=2,3,…,t-1;其中,ki表示第i个签名参与者IDi的秘密值,表示第i个签名参与者IDi的秘密值ki在模n下的乘法逆元;步骤十、按照下式,第i个签名参与者IDi计算第i个签名参数中间值Ri,并将第i个签名参数中间值Ri发送给第i+1个签名参与者IDi+1,i=2,3,…,t-1:Ri=kiRi-1其中,Ri表示第i个签名参数中间值,Ri-1表示第i-1个签名参数中间值,IDi+1表示第i+1个签名参与者;步骤十一、第t个签名参与者IDt接收到第t-1个签名参数中间值Rt-1后,选取自己的秘密值kt∈{1,2,…,n-1},然后计算自己的秘密值kt在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的秘密值kt∈{1,2,…,n-1}并重新计算自己的秘密值kt在模n下是否存在乘法逆元直到找到一个存在乘法逆元的秘密值kt,然后执行下一步骤;其中,IDt表示第t个签名参与者,kt表示第t个签名参与者IDt的秘密值,表示第t个签名参与者IDt的秘密值kt在模n下的乘法逆元;步骤十二、按照下式,第t个签名参与者IDt计算签名参数R,然后判断签名参数R是否为椭圆曲线上的零点,如果是,则返回步骤六,如果不是,则将签名参数R广播给所有的签名参与者:R=ktRt-1=(xR,yR)其中,Rt-1表示第t-1个签名参数中间值,R表示签名参数,xR表示签名参数R的横坐标,yR表示签名参数R的纵坐标;步骤十三、第i个签名参与者IDi接收到签名参数R后,按照下式,计算第一部分签名r:r=xRmodn然后判断r=0是否成立,如果成立,则返回步骤三,如果不成立,则继续执行下一步骤;其中,r表示第一部分签名,mod表示求模运算;步骤十四、按照下式,第一个签名参与者ID1计算消息M的哈希值H,然后按照数据类型转换规则,将H转换为一个整数e:H=hash(M)其中,M表示消息,H表示消息M的哈希值,hash表示一个密码哈希算法,e表示哈本文档来自技高网
...

【技术保护点】
1.一种密钥分布式生成的数字签名方法,其特征在于包括以下步骤:步骤一、第一个签名参与者ID1选取自己的子私钥d1∈{1,2,…,n‑1},然后计算自己的子私钥d1在模n下是否存在乘法逆元

【技术特征摘要】
1.一种密钥分布式生成的数字签名方法,其特征在于包括以下步骤:步骤一、第一个签名参与者ID1选取自己的子私钥d1∈{1,2,…,n-1},然后计算自己的子私钥d1在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的子私钥d1∈{1,2,…,n-1}并重新计算自己的子私钥d1在模n下是否存在乘法逆元直到找到一个存在乘法逆元的子私钥d1,然后执行下一步骤;其中,ID1表示第一个签名参与者,d1表示第一个签名参与者ID1的子私钥,表示第一个签名参与者ID1的子私钥d1在模n下的乘法逆元,n为正整数,表示椭圆曲线基点的阶;步骤二、按照下式,第一个签名参与者ID1计算自己的子公钥Q1和伪子公钥Q1′,然后将子公钥Q1和伪子公钥Q1′都广播给所有签名参与者:Q1=d1G其中,Q1表示第一个签名参与者ID1的子公钥,Q1′表示第一个签名参与者ID1的伪子公钥,G表示椭圆曲线上一个阶为n的基点;步骤三、接收到第一个签名参与者ID1的子公钥Q1和伪子公钥Q1′后,第i个签名参与者IDi选取自己的子私钥di∈{1,2,…,n-1},然后按照下式,计算自己的伪子公钥Qi′,并将伪子公钥Qi′发送给第一个签名参与者ID1,i=2,3,...,t:Qi′=diQ1′其中,IDi表示第i个签名参与者,di表示第i个签名参与者IDi的子私钥,Qi′表示第i个签名参与者IDi的伪子公钥,t为正整数,表示签名参与者IDi的数目;步骤四、第一个签名参与者ID1在接收到所有签名参与者的伪子公钥Qi′后,按照下式,依次计算每一个签名参与者IDi的子公钥Qi,然后将所有计算出的子公钥Qi公开:Qi=d1Qi′其中,Qi表示第i个签名参与者IDi的子公钥;步骤五、每一个签名参与者IDi接收到第一个签名参与者ID1公开的子公钥Qi后,验证等式Qi=diG是否成立,如果每一个签名参与者的验证结果都是成立,则执行下一步骤,如果有任何一个签名参与者的验证结果是不成立,则返回步骤一;步骤六、按照下式,每一个签名参与者IDi计算签名公钥Q并对签名公钥Q进行公开:其中,Q表示签名公钥,∑表示求和操作;步骤七、第一个签名参与者ID1选取自己的秘密值k1∈{1,2,…,n-1},然后计算自己的秘密值k1在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的秘密值k1∈{1,2,…,n-1}并重新计算自己的秘密值k1在模n下是否存在乘法逆元直到找到一个存在乘法逆元的秘密值k1,然后执行下一步骤;其中,k1表示第一个签名参与者ID1的秘密值,表示第一个签名参与者ID1的秘密值k1在模n下的乘法逆元;步骤八、按照下式,第一个签名参与者ID1计算第一个签名参数中间值R1,并将第一个签名参数中间值R1发送给第二个签名参与者ID2:R1=k1G其中,R1表示第一个签名参数中间值,ID2表示第二个签名参与者;步骤九、第i个签名参与者IDi接收到第i-1个签名参数中间值Ri-1后,选取自己的秘密值ki∈{1,2,…,n-1},然后计算自己的秘密值ki在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的秘密值ki∈{1,2,…,n-1}并重新计算自己的秘密值ki在模n下是否存在乘法逆元直到找到一个存在乘法逆元的秘密值ki,然后执行下一步骤,i=2,3,…,t-1;其中,ki表示第i个签名参与者IDi的秘密值,表示第i个签名参与者IDi的秘密值ki在模n下的乘法逆元;步骤十、按照下式,第i个签名参与者IDi计算第i个签名参数中间值Ri,并将第i个签名参数中间值Ri发送给第i+1个签名参与者IDi+1,i=2,3,…,t-1:Ri=kiRi-1其中,Ri表示第i个签名参数中间值,Ri-1表示第i-1个签名参数中间值,IDi+1表示第i+1个签名参与者;步骤十一、第t个签名参与者IDt接收到第t-1个签名参数中间值Rt-1后,选取自己的秘密值kt∈{1,2,…,n-1},然后计算自己的秘密值kt在模n下是否存在乘法逆元如果存在,则执行下一步骤,如果不存在,则重新选取自己的秘密值kt∈{1,2,…,n-1}并重新计算自己的秘密值kt在模n下是否存在乘法逆元直到找到一个存在乘法逆元的秘密值kt,然后执行下一步骤;其中,IDt表示第t个签名参与者,kt表示第t个签名参与者IDt的秘密值,表示第t个签名参与者IDt的秘密值kt在模n下的乘法逆元;步骤十二、按照下式,第t个签名参与者IDt计算签名参数R,然后判断签名参数R是否为椭圆曲线上的零点,如果是,则返回步骤六,如果不是,则将签名参数R广播给所有的签名参与者:R=ktRt-1=(xR,yR)其中,Rt-1表示第t-1个签名参数中间值,R表示签名参数,xR表示签名参数R的横坐标,yR表示签名参数R的纵坐标;步骤十三、第i个签名参与者IDi接收到签名参数R后,按照下式,计算第一部分签名r:r=xRmodn然后判断r=0是否成立,如果成立,则返回步骤三,如果不成立,则继续执行下一步骤;其中,r表示第一部分签名,mod表示求模运算;步骤十四、按照下式,第一个签名参与者ID1计算消息M的哈希值H,然后按照数据类型转换规则,将H转换为一个整数...

【专利技术属性】
技术研发人员:庞辽军叩曼魏萌萌李慧贤
申请(专利权)人:西安电子科技大学
类型:发明
国别省市:陕西,61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1