一种基于SM2算法的多方联合签名方法及系统与流程

文档序号:31364223发布日期:2022-08-31 15:13阅读:81来源:国知局
一种基于SM2算法的多方联合签名方法及系统与流程
一种基于sm2算法的多方联合签名方法及系统
技术领域
1.本发明涉及信息安全技术领域,尤其涉及一种基于sm2算法的多方联合签名方法及系统。


背景技术:

2.证书应用的开始阶段,各ca(certificate authority,证书授权中心)普遍使用usb key作为证书存储介质。用户签名私钥在key内生成,签名私钥无法从key内导出,签名运算在key内进行,这些措施保证了签名私钥生成、存储和使用的安全。
3.近年来移动端证书应用迅速发展,移动端一般不直接带有usb接口,目前常用的是使用sd/tf卡、音频key、蓝牙key、nfc(near field communication,近距离无线通讯技术)卡以及文件方式存储数字证书,或使用云端提供的签名、解密服务,目前常用的单方sm2算法存在以下风险:
4.(1)密钥生成安全风险:密钥对生成时出现完整的密钥,攻击者可通过内存探测等手段获取密钥;
5.(2)密钥存储安全风险:私钥以明文存储、分段方式存储等,攻击者可通过木马等读取或拷贝用户私钥;
6.(3)密钥运算安全风险:私钥在进行数据签名、解密运算时,以完整密钥形式进行运算,攻击者可通过内存探测等手段获取密钥。


技术实现要素:

7.本发明所要解决的技术问题是:提供一种基于sm2算法的多方联合签名方法及系统,能够有效提高密钥的安全性。
8.为了解决上述技术问题,本发明采用的一种技术方案为:
9.一种基于sm2算法的多方联合签名方法,包括步骤:
10.第一通信方生成第一子密钥对,第二通信方生成第二子密钥对;
11.所述第一通信方对接收的待签名消息进行签名,得到签名值,并将所述签名值发送至所述第二通信方;
12.所述第二通信方根据所述第一子密钥对对所述签名值进行验证,得到第一验证结果,基于所述第一验证结果根据所述第二子密钥对对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方;
13.所述第一通信方根据所述部分签名值参数和所述第一子密钥对计算完整签名值,并根据所述完整签名值得到联合签名结果。
14.为了解决上述技术问题,本发明采用的另一种技术方案为:
15.一种基于sm2算法的多方联合签名系统,包括第一通信方及第二通信方,所述第一通信方包括第一存储器、第一处理器及存储在所述第一存储器上并可在所述第一处理器上运行的第一计算机程序,所述第二通信方包括第二存储器、第二处理器及存储在所述第二
存储器上并可在所述第二处理器上运行的第二计算机程序,所述第一处理器执行所述第一计算机程序时实现以下步骤:
16.第一通信方生成第一子密钥对,第二通信方生成第二子密钥对;
17.所述第一通信方对接收的待签名消息进行签名,得到签名值,并将所述签名值发送至所述第二通信方;
18.所述第二处理器执行所述第二计算机程序时实现以下步骤:
19.所述第二通信方根据所述第一子密钥对对所述签名值进行验证,得到第一验证结果,基于所述第一验证结果根据所述第二子密钥对对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方;
20.所述第一处理器执行所述第一计算机程序时实现以下步骤:
21.所述第一通信方根据所述部分签名值参数和所述第一子密钥对计算完整签名值,并根据所述完整签名值得到联合签名结果。
22.本发明的有益效果在于:第一通信方和第二通信方各自生成子密钥对,各自保存自己的子密钥对,完整的私钥不存在于任何一方,签名运算时,第一通信方对接收的待签名消息进行签名,并将签名值发送至第二通信方,第二通信方根据第一子密钥对对签名值进行验证,得到第一验证结果,基于第一验证结果根据第二子密钥对对待签名消息进行运算,得到部分签名值参数,第一通信方根据部分签名值参数和第一子密钥对计算完整签名值,并根据完整签名值得到联合签名结果,即双方使用自己的子密钥对进行运算并交换参数,最终在某一方计算出完整签名值,即使在签名运算的过程中,私钥也不会完整出现,能够很好地隐藏用户私钥数据,提高了使用攻击手段获取密钥的难度,从而能够有效提高密钥的安全性。
附图说明
23.图1为本发明实施例的一种基于sm2算法的多方联合签名方法的步骤流程图;
24.图2为本发明实施例的一种基于sm2算法的多方联合签名系统的结构示意图。
具体实施方式
25.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
26.请参照图1,本发明实施例提供了一种基于sm2算法的多方联合签名方法,包括步骤:
27.第一通信方生成第一子密钥对,第二通信方生成第二子密钥对;
28.所述第一通信方对接收的待签名消息进行签名,得到签名值,并将所述签名值发送至所述第二通信方;
29.所述第二通信方根据所述第一子密钥对对所述签名值进行验证,得到第一验证结果,基于所述第一验证结果根据所述第二子密钥对对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方;
30.所述第一通信方根据所述部分签名值参数和所述第一子密钥对计算完整签名值,并根据所述完整签名值得到联合签名结果。
31.从上述描述可知,本发明的有益效果在于:第一通信方和第二通信方各自生成子密钥对,各自保存自己的子密钥对,完整的私钥不存在于任何一方,签名运算时,第一通信方对接收的待签名消息进行签名,并将签名值发送至第二通信方,第二通信方根据第一子密钥对对签名值进行验证,得到第一验证结果,基于第一验证结果根据第二子密钥对对待签名消息进行运算,得到部分签名值参数,第一通信方根据部分签名值参数和第一子密钥对计算完整签名值,并根据完整签名值得到联合签名结果,即双方使用自己的子密钥对进行运算并交换参数,最终在某一方计算出完整签名值,即使在签名运算的过程中,私钥也不会完整出现,能够很好地隐藏用户私钥数据,提高了使用攻击手段获取密钥的难度,从而能够有效提高密钥的安全性。
32.进一步地,所述第一通信方生成第一子密钥对包括:
33.第一通信方生成第一随机数,并根据所述第一随机数计算第一子私钥;
34.所述第一通信方根据预设椭圆曲线的基点和所述第一子私钥生成第一子公钥;
35.所述第一通信方根据所述第一子私钥和所述第一子公钥得到第一子密钥对。
36.由上述描述可知,第一通信方生成自己的子密钥对,其中的子私钥和子公钥都不是完整密钥,因此,即便获取了第一通信方的子密钥对,也无法利用子密钥对进行对应加解密操作,提高了密钥的安全性,进而提高了数据安全性。
37.进一步地,所述第一通信方根据所述第一子私钥和所述第一子公钥得到第一子密钥对之后包括:
38.所述第一通信方根据所述第一随机数和所述基点计算第一参数,并将所述第一参数发送给第二通信方;
39.所述第二通信方生成第二子密钥对包括:
40.所述第二通信方生成第二随机数,并根据所述第二随机数计算第二子私钥;
41.所述第二通信方根据所述第二子私钥和所述基点生成第二子公钥;
42.所述第二通信方根据所述第二随机数和所述基点生成第二参数,并根据所述第二随机数、所述第一参数和所述第二参数生成第二公钥;
43.所述第二通信方将所述第二公钥和所述第二参数发送给所述第一通信方;
44.所述第一通信方根据所述第一随机数、所述第二参数和所述第一参数生成第一公钥,并判断所述第一公钥是否等于所述第二公钥,若是,则确定密钥生成成功。
45.由上述描述可知,第一通信方将需要的参数发送给第二通信方,第二通信方根据第二随机数计算第二子私钥,根据第二子私钥和基点生成第二子公钥,以此使第二通信方生成自己的子密钥对,同时,利用第一通信方参数计算完整公钥,并将需要的参数和完整公钥发送给第一通信方,使得第一通信方将生成的完整公钥与第二通信方生成的完整公钥进行比较,以此确定密钥生成是否成功,从而确保了双方能够各自保存了自己的密钥对。
46.进一步地,所述第一通信方对接收的待签名消息进行签名,得到签名值,并将所述签名值发送至所述第二通信方包括:
47.所述第一通信方生成第三随机数,并根据所述第三随机数和所述基点生成第三参数;
48.所述第一通信方根据所述第一子私钥对接收的待签名消息进行签名,得到签名值,并将所述签名值和所述第三参数发送给所述第二通信方。
49.由上述描述可知,在进行签名时,第一通信方只将签名值和相应参数发送给第二通信方,以便第二通信方进行签名,从而实现了联合签名,提高了签名过程的安全性。
50.进一步地,所述第一通信方根据所述第一子私钥和所述第一子公钥得到第一子密钥对之后还包括:
51.所述第一通信方将所述第一子公钥发送给所述第二通信方;
52.所述第二通信方根据所述第一子密钥对对所述签名值进行验证,得到第一验证结果,基于所述第一验证结果根据所述第二子密钥对对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方包括:
53.所述第二通信方根据所述第一子公钥对所述签名值进行验证,得到第一验证结果;
54.所述第二通信方判断所述第一验证结果是否为验证成功,若是,则所述第二通信方生成第四随机数和第五随机数,并根据所述第四随机数、所述第五随机数、所述第三参数、所述第一子公钥、所述第二子私钥和所述基点计算第一椭圆曲线点,所述第一椭圆曲线点包括第一坐标;
55.所述第二通信方计算所述待签名消息的消息摘要,并根据所述消息摘要、所述第一坐标、所述第二子私钥、所述第四随机数和所述第五随机数对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方。
56.由上述描述可知,第二通信方计算待签名消息的消息摘要,并根据消息摘要、第一坐标、第二子私钥、第四随机数和第五随机数对待签名消息进行运算,将对应的部分签名值参数发送至第一通信方,提高了签名的可靠性,且以便后续第一通信方计算完整签名值。
57.进一步地,所述根据所述消息摘要、所述第一坐标、所述第二子私钥、所述第四随机数和所述第五随机数对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方包括:
58.所述第二通信方根据所述消息摘要和所述第一坐标计算第一部分签名值参数;
59.所述第二通信方判断所述第一部分签名值参数是否等于第一预设值,若是,则返回执行所述第二通信方生成第四随机数和第五随机数步骤,若否,则根据所述第二子私钥和所述第五随机数计算第二部分签名值参数;
60.根据所述第二子私钥、所述第四随机数、所述第五随机数和所述第一部分签名值参数计算第三部分签名值参数,并将所述第一部分签名值参数、所述第二部分签名值参数和所述第三部分签名值参数发送至所述第一通信方。
61.由上述描述可知,第二通信方根据消息摘要和第一坐标计算第一部分签名值参数,当第一部分签名值参数不等于第一预设值,则根据第二子私钥和第五随机数计算第二部分签名值参数,根据第二子私钥、第四随机数、第五随机数和第一验证参数计算第三部分签名值参数,并将第一部分签名值参数、第二部分签名值参数和第三部分签名值参数发送至第一通信方,从而提高了签名的有效性。
62.进一步地,所述第一通信方根据所述部分签名值参数和所述第一子密钥对计算完整签名值,并根据所述完整签名值得到联合签名结果包括:
63.所述第一通信方根据所述部分签名值参数、所述第三随机数和所述第一子私钥计算完整签名值,并判断所述完整签名值是否等于第二预设值,若是,则返回执行所述第一通
信方生成第三随机数步骤,若否,则确定联合签名成功,并得到联合签名结果。
64.由上述描述可知,第一通信方根据部分签名值参数、第三随机数和第一子私钥计算完整签名值,并当完整签名值不等于第二预设值时,则确定联合签名成功,否则,重新进行签名步骤,从而实现了安全、有效地联合签名。
65.进一步地,所述第一通信方生成第一子密钥对,第二通信方生成第二子密钥对之后还包括:
66.所述第一通信方获取密文,所述密文包括第一密文、第二密文和第三密文;
67.所述第一通信方对所述第一密文进行签名,得到第二签名值,并将所述第二签名值和所述第一密文发送至所述第二通信方;
68.所述第二通信方对所述第二签名值进行验证,得到第二验证结果,基于所述第二验证结果根据所述第二子私钥和所述第一密文计算第四参数,并将所述第四参数发送给所述第一通信方;
69.所述第一通信方根据所述第四参数、所述第一子私钥和所述第一密文对所述密文进行解密,得到明文。
70.由上述描述可知,第一通信方对第一密文进行签名,并将得到的第二签名值和第一密文发送至第二通信方,第二通信方对第二签名值进行验证,得到第二验证结果,基于第二验证结果根据第二子私钥和第一密文计算第四参数,并将第四参数发送给第一通信方,第一通信方根据第四参数、第一子私钥和第一密文对密文进行解密,得到明文,实现了联合解密,从而提高了解密过程的安全性。
71.进一步地,所述第一通信方根据所述第四参数、所述第一子私钥和所述第一密文对所述密文进行解密,得到明文包括:
72.所述第一通信方根据所述第四参数、所述第一子私钥和所述第一密文计算第二椭圆曲线点,所述第二椭圆曲线点包括第三坐标和第四坐标;
73.所述第一通信方获取所述第二密文的比特长度,并根据所述第三坐标、所述第四坐标和所述比特长度计算第五参数;
74.所述第一通信方根据所述第五参数和所述第二密文计算明文,并根据所述第三坐标、所述第四坐标和所述明文计算第六参数;
75.所述第一通信方判断所述第六参数是否等于所述第三密文,若是,则输出所述明文。
76.由上述描述可知,第一通信方利用第二通信方发送的参数并结合自己保存的密钥进行解密,确保了联合解密的有效性,从而提高了数据安全性。
77.请参照图2,本发明另一实施例提供了一种基于sm2算法的多方联合签名系统,包括第一通信方及第二通信方,所述第一通信方包括第一存储器、第一处理器及存储在所述第一存储器上并可在所述第一处理器上运行的第一计算机程序,所述第二通信方包括第二存储器、第二处理器及存储在所述第二存储器上并可在所述第二处理器上运行的第二计算机程序,所述第一处理器执行所述第一计算机程序时实现上述基于sm2算法的多方联合签名方法中第一通信方所执行的各个步骤;
78.所述第二处理器执行所述第二计算机程序时实现上述基于sm2算法的多方联合签名方法中第二通信方所执行的各个步骤。
79.本发明公开了基于sm2算法的多方联合签名方法及系统能够适用于需要进行签名加密的应用场景中,以下通过具体实施方式进行说明:
80.实施例一
81.第一通信方与第二通信方共享一套预设椭圆曲线;
82.请参照图1,本实施例的一种基于sm2算法的多方联合签名方法,包括步骤:
83.s1、第一通信方生成第一子密钥对,第二通信方生成第二子密钥对,具体包括:
84.s11、第一通信方生成第一随机数,并根据所述第一随机数计算第一子私钥;
85.具体的,第一通信方生成第一随机数d1∈[1,n-1],并根据第一随机数d1计算第一子私钥d1=(d
1-1)-1
;n有限域上的预设椭圆曲线中基点g对应的阶;
[0086]
s12、所述第一通信方根据预设椭圆曲线的基点和所述第一子私钥生成第一子公钥;
[0087]
具体的,所述第一通信方根据预设椭圆曲线的基点g和第一子私钥d1生成第一子公钥p1=d1[*]g,其中,[*]表示椭圆曲线点乘运算;
[0088]
s13、所述第一通信方根据所述第一子私钥和所述第一子公钥得到第一子密钥对;
[0089]
具体的,所述第一子密钥对包括所述第一子私钥d1和所述第一子公钥p1;
[0090]
s14、所述第一通信方根据所述第一随机数和所述基点计算第一参数,并将所述第一参数发送给第二通信方,所述第一通信方将所述第一子公钥发送给所述第二通信方;
[0091]
具体的,第一通信方根据第一随机数d1和基点g计算第一参数q1=d1[*]g,并将第一参数q1发送给第二通信方,第一通信方将第一子公钥p1发送给第二通信方;
[0092]
s15、所述第二通信方生成第二随机数,并根据所述第二随机数计算第二子私钥;
[0093]
具体的,第二通信方生成第二随机数d2∈[1,n-1],并根据第二随机数d2计算第二子私钥d2=(d
2-1)-1

[0094]
s16、所述第二通信方根据所述第二子私钥和所述基点生成第二子公钥;
[0095]
具体的,第二通信方根据第二子私钥d2和基点g生成第二子公钥p2=d2[*]g;
[0096]
s17、所述第二通信方根据所述第二随机数和所述基点生成第二参数,并根据所述第二随机数、所述第一参数和所述第二参数生成第二公钥;
[0097]
具体的,第二通信方根据第二随机数d2和基点g生成第二参数q2=d2[*]g,并根据第二随机数d2、第一参数q1和第二参数q2生成第二公钥p=d2[*]q1[-]q1[-]q2,其中,[-]表示椭圆曲线点减运算;
[0098]
s18、所述第二通信方将所述第二公钥和所述第二参数发送给所述第一通信方;
[0099]
具体的,第二通信方将第二公钥p和第二参数q2发送给第一通信方;
[0100]
s19、所述第一通信方根据所述第一随机数、所述第二参数和所述第一参数生成第一公钥,并判断所述第一公钥是否等于所述第二公钥,若是,则确定密钥生成成功;若否,则返回执行s11;
[0101]
具体的,第一通信方根据第一随机数d1、第二参数q2和第一参数q1生成第一公钥p
*
,并判断第一公钥p
*
是否等于第二公钥p,若是,则确定密钥生成成功;若否,则返回执行s11;
[0102]
s2、所述第一通信方对接收的待签名消息进行签名,得到签名值,并将所述签名值发送至所述第二通信方,具体包括:
[0103]
s21、所述第一通信方生成第三随机数,并根据所述第三随机数和所述基点生成第三参数;
[0104]
具体的,第一通信方生成第三随机数k1∈[1,n-1],并根据第三随机数k1和基点g生成第三参数t1=k1[*]g;
[0105]
s22、所述第一通信方根据所述第一子私钥对接收的待签名消息进行签名,得到签名值,并将所述签名值和所述第三参数发送给所述第二通信方;
[0106]
具体的,第一通信方根据第一子私钥d1对接收的待签名消息进行签名,得到签名值sign1,并将签名值sign1和第三参数t1发送给第二通信方,所述签名使用现有签名流程进行;
[0107]
s3、所述第二通信方根据所述第一子密钥对对所述签名值进行验证,得到第一验证结果,基于所述第一验证结果根据所述第二子密钥对对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方,具体包括:
[0108]
s31、所述第二通信方根据所述第一子公钥对所述签名值进行验证,得到第一验证结果;需要注意的是,所述第二通信方无法获取所述第一通信方的所述第一子私钥,只能使用其中的所述第一子公钥对签名值进行验证;
[0109]
s32、所述第二通信方判断所述第一验证结果是否为验证成功,若是,则执行s33;若否,则报错退出;
[0110]
s33、所述第二通信方生成第四随机数和第五随机数,并根据所述第四随机数、所述第五随机数、所述第三参数、所述第一子公钥、所述第二子私钥和所述基点计算第一椭圆曲线点,所述第一椭圆曲线点包括第一坐标;
[0111]
其中,所述第一坐标为x1;
[0112]
具体的,第二通信方生成第四随机数k2和第五随机数k3,并根据第四随机数k2、第五随机数k3、第三参数t1、第一子公钥p1、第二子私钥d2和基点g计算第一椭圆曲线点(x1,y1)=k3[*](t1[+]p1)[+]((k2+d2)*k3)[*]g,其中,[+]表示椭圆曲线点加运算;
[0113]
s34、所述第二通信方计算所述待签名消息的消息摘要,并根据所述消息摘要、所述第一坐标、所述第二子私钥、所述第四随机数和所述第五随机数对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方,具体包括:
[0114]
s341、所述第二通信方计算所述待签名消息的消息摘要;
[0115]
具体的,第二通信方计算待签名消息的消息摘要e=hv(),hv()表示消息摘要长度为v的密码杂凑函数;
[0116]
s342、所述第二通信方根据所述消息摘要和所述第一坐标计算第一部分签名值参数;
[0117]
具体的,第二通信方根据消息摘要e和第一坐标x1计算第一部分签名值参数r=(e+x1)mod n,其中,mod表示模运算;
[0118]
s343、所述第二通信方判断所述第一部分签名值参数是否等于第一预设值,若是,则返回执行所述第二通信方生成第四随机数和第五随机数步骤,若否,则根据所述第二子私钥和所述第五随机数计算第二部分签名值参数;
[0119]
其中,第一预设值为0;
[0120]
具体的,第二通信方判断第一部分签名值参数r是否等于0,若是,则返回执行s33,
若否,则根据第二子私钥d2和第五随机数k3计算第二部分签名值参数s1=(d2*k3)mod n;
[0121]
s344、根据所述第二子私钥、所述第四随机数、所述第五随机数和所述第一验证参数计算第三部分签名值参数,并将所述第一部分签名值参数、所述第二部分签名值参数和所述第三部分签名值参数发送至所述第一通信方;
[0122]
具体的,根据第二子私钥d2、第四随机数k2、第五随机数k3和第一验证参数r计算第三部分签名值参数s2=(d2*((k2+d2)*k3+r))mod n,并将第一部分签名值参数r、第二部分签名值参数s1和第三部分签名值参数s2发送至第一通信方;
[0123]
s4、所述第一通信方根据所述部分签名值参数和所述第一子密钥对计算完整签名值,并根据所述完整签名值得到联合签名结果,具体包括:
[0124]
所述第一通信方根据所述部分签名值参数、所述第三随机数和所述第一子私钥计算完整签名值,并判断所述完整签名值是否等于第二预设值,若是,则返回执行s21,若否,则确定联合签名成功,并得到联合签名结果;
[0125]
其中,所述第二预设值为0;
[0126]
具体的,第一通信方根据部分签名值参数(包括第一部分签名值参数r、第二部分签名值参数s1和第三部分签名值参数s2)、第三随机数k1和第一子私钥d1计算完整签名值s=(d1*(k1+d1)*s1+d1*s2–
r)mod n,并判断完整签名值s是否等于0,若是,则返回执行s21,若否,则确定联合签名成功,并得到联合签名结果(r,s);
[0127]
s5、所述第一通信方获取密文,所述密文包括第一密文、第二密文和第三密文;
[0128]
具体的,第一通信方获取密文,所述密文包括第一密文c1、第二密文c2和第三密文c3;
[0129]
s6、所述第一通信方对所述第一密文进行签名,得到第二签名值,并将所述第二签名值和所述第一密文发送至所述第二通信方,具体包括:
[0130]
s61、所述第一通信方验证所述第一密文是否在所述预设椭圆曲线上,若是,则执行s62;若否,则报错退出;
[0131]
具体的,第一通信方验证第一密文c1是否在预设椭圆曲线上,若是,则执行s62;
[0132]
s62、所述第一通信方根据所述第一密文计算第三椭圆曲线点,并判断所述第三椭圆曲线点是否为无穷远点,若是,则报错退出,若否,则执行s63;
[0133]
具体的,第一通信方根据第一密文c1计算第三椭圆曲线点s=h[*]c1,并判断第三椭圆曲线点s是否为无穷远点,若是,则报错退出,若否,则执行s63;
[0134]
s63、所述第一通信方对所述第一密文进行签名,得到第二签名值,并将所述第二签名值和所述第一密文发送至所述第二通信方;
[0135]
具体的,第一通信方对第一密文c1进行签名,得到第二签名值sign1,并将第二名值sign1和第一密文c1发送至第二通信方;
[0136]
s7、所述第二通信方对所述第二签名值进行验证,得到第二验证结果,判断所述第二验证结果是否为验证成功,若是,则执行s8;若否,则报错退出;
[0137]
s8、所述第二通信方根据所述第二子私钥和所述第一密文计算第四参数,并将所述第四参数发送给所述第一通信方;
[0138]
具体的,第二通信方根据第二子私钥d2和第一密文c1计算第四参数t2=d
2-1
[*]c1,并将第四参数t2发送给第一通信方;
[0139]
s9、所述第一通信方根据所述第四参数、所述第一子私钥和所述第一密文对所述密文进行解密,得到明文,具体包括:
[0140]
s91、所述第一通信方根据所述第四参数、所述第一子私钥和所述第一密文计算第二椭圆曲线点,所述第二椭圆曲线点包括第三坐标和第四坐标;
[0141]
其中,所述第三坐标为x2,所述第四坐标为y2;
[0142]
具体的,第一通信方根据第四参数t2、第一子私钥d1和第一密文c1计算第二椭圆曲线点(x2,y2)=d
1-1
[*]t2[-]c1;
[0143]
s92、所述第一通信方获取所述第二密文的比特长度,并根据所述第三坐标、所述第四坐标和所述比特长度计算第五参数;
[0144]
具体的,第一通信方获取第二密文c2的比特长度klen,并根据第三坐标x2、第四坐标y2和比特长度klen计算第五参数t=kdf(x2||y2,klen),并判断第五参数t是否为全0,若是,则报错退出,若否,则执行s93;
[0145]
s93、所述第一通信方根据所述第五参数和所述第二密文计算明文,并根据所述第三坐标、所述第四坐标和所述明文计算第六参数;
[0146]
具体的,第一通信方根据第五参数t和第二密文c2计算明文m’=c2⊕
t,并根据第三坐标x2、第四坐标y2和明文m’计算第六参数u=hash(x2||m’||y2);
[0147]
s94、所述第一通信方判断所述第六参数是否等于所述第三密文,若是,则输出所述明文;
[0148]
具体的,第一通信方判断第六参数u是否等于第三密文c3,若是,则输出明文m’,若否,则报错退出;
[0149]
上述联合解密流程s5-s9与联合签名流程s2-s4可同时进行,而与联合解密流程s5-s9对应的加密流程为现有的加密流程,在此不再赘述。
[0150]
实施例二
[0151]
请参照图2,本实施例的一种基于sm2算法的多方联合签名系统,包括第一通信方及第二通信方,所述第一通信方包括第一存储器、第一处理器及存储在所述第一存储器上并可在所述第一处理器上运行的第一计算机程序,所述第二通信方包括第二存储器、第二处理器及存储在所述第二存储器上并可在所述第二处理器上运行的第二计算机程序,所述第一处理器执行所述第一计算机程序时实现实施例一中第一通信方所执行的步骤;
[0152]
所述第二处理器执行所述第二计算机程序时实现实施例一中第二通行方所执行的步骤。
[0153]
综上所述,本发明提供的一种基于sm2算法的多方联合签名方法及系统,第一通信方生成第一子密钥对,第二通信方生成第二子密钥对,第一子密钥对包括第一子私钥和第一子公钥,第二子密钥对包括第二子私钥和第二子公钥,各自保存自己的子密钥对,完整的私钥不存在于任何一方,提高了密钥的安全性;所述第一通信方对接收的待签名消息进行签名,得到签名值,并将所述签名值发送至所述第二通信方;所述第二通信方根据所述第一子密钥对对所述签名值进行验证,得到第一验证结果,基于所述第一验证结果根据所述第二子密钥对对所述待签名消息进行运算,得到部分签名值参数,并将所述部分签名值参数发送至所述第一通信方;所述第一通信方根据所述部分签名值参数和所述第一子密钥对计算完整签名值,并根据所述完整签名值得到联合签名结果;同时,第一通信方获取密文后,
对其中的第一密文进行签名,并将得到的第二签名值和第一密文发送至第二通信方,第二通信方对第二签名值进行验证,得到第二验证结果,基于第二验证结果根据第二子私钥和第一密文计算第四参数,并将第四参数发送给第一通信方,第一通信方根据第四参数、第一子私钥和第一密文对密文进行解密,得到明文,实现了联合解密,提高了解密过程的安全性;即使在签名运算的过程中,私钥也不会完整出现,能够很好地隐藏用户私钥数据,提高了使用攻击手段获取密钥的难度,从而能够有效提高密钥的安全性。
[0154]
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1