安全的两方协作SM2签名方法转让专利

申请号 : CN201810800708.3

文献号 : CN108667626B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 侯红霞杨波张明瑞任伟王瑞瑆

申请人 : 陕西师范大学格尔软件股份有限公司

摘要 :

一种安全的两方协作SM2签名方法,由系统初始化、协商生成签名公钥、协作签名、输出完整签名步骤组成。本发明采用在协商签名公钥和协作签名之前,通信双方用零知识证明技术认证对方的身份,用承诺技术保证输出完整签名的正确性,用同态加密技术保证第一通信方无需解密收到的密文,能实现其对应明文的运算操作,时戳机制的加入确保通信双方只有获取第一通信方身份、当前时间和第一通信方所处位置信息一致的情况下才能输出正确的完整签名,极大地提高了系统的安全性,降低因签名私钥泄露所带来的损失,能够防范中间人攻击。本发明具有更高的安全性,可在通信信道不安全的环境中使用。

权利要求 :

1.一种安全的两方协作SM2签名方法,其特征在于它是由下述步骤组成:(1)系统初始化

第一通信方和第二通信方共享SM2签名算法的椭圆曲线参数E(Fp)、G和n,E(Fp)表示有限域Fp上椭圆曲线E的所有有理点,包括无穷远点O,组成的集合,G表示椭圆曲线E上阶为n的基点,n为有限的正整数,各参数的取值依据SM2方法预先设定,通信双方预先约定好要使用的密码杂凑方法hash、承诺协议com、零知识证明协议proof以及具有加法同态性的同态加密方法Enc;

(2)协商生成签名公钥

第一通信方生成子私钥d1和子公钥P1,第二通信方生成子私钥d2和子公钥P2,通信双方分别用对方的子公钥和自身的子私钥协商生成签名公钥P;

所述的通信双方分别用对方的子公钥和自身的子私钥协商生成签名公钥P的方法如下:

1)第一通信方产生子公私钥对

第一通信方产生一个位于[1,n-1]之间的随机数d1,将d1作为子私钥,即有:d1∈[1,n-

1],由d1[*]G得到的结果作为子公钥P1;其中,[*]表示椭圆曲线点乘运算;

2)第二通信方产生子公私钥对

第二通信方产生一个位于[1,n-1]之间的随机数d2,将d2作为子私钥,即有:d2∈[1,n-

1],由d2[*]G得到的结果作为子公钥P2;

3)通信双方相互认证

第一通信方用双方预定的零知识证明协议proof确定子私钥d1的零知识证明proof(d1),按照双方预定的承诺协议com确定子公钥P1和子私钥d1的零知识证明proof(d1)的承诺值com(P1||proof(d1)),按照双方预定的承诺协议com,将承诺值com(P1||proof(d1))和承诺信息发送给第二通信方,其中,||表示拼接;

第二通信方用预定的零知识证明协议proof确定子私钥d2的零知识证明proof(d2),生成预定的加法同态加密方法Enc的密钥对pk和sk,其中pk表示同态公钥,sk表示同态私钥,将子公钥P2,同态公钥pk和子私钥d2的零知识证明proof(d2)发送给第一通信方;

第一通信方根据预定的零知识证明协议proof验证P2=d2[*]G,根据双方预定的承诺协议com将解承诺信息子公钥P1和子私钥d1的零知识证明proof(d1)发送给第二通信方;

第二通信方收到解承诺信息,按照双方预定的承诺协议com,验证承诺值com(P1||proof(d1))的正确性,用预定的零知识证明协议proof验证P1=d1[*]G;

4)通信双方协商生成签名公钥

第一通信方由d1[*]P2[-]G得到的结果作为签名公钥P,其中,[-]表示椭圆曲线点减运算;

第二通信方由d2[*]P1[-]G得到的结果作为签名公钥P′,P′与P相等;

(3)协作签名

第一通信方产生临时子私钥k1和临时子公钥Q1,第二通信方产生临时子私钥k2和临时子公钥Q2,分别根据对方的临时子公钥、自身的子私钥和自身的临时子私钥生成部分签名r和部分签名s,通信双方协作产生完整签名;通信双方协作产生完整签名的方法如下:

1)第一通信方处理待签名消息

第一通信方将第一通信方和第二通信方共同的身份标识Z和消息M拼接形成M′,即有:M′=Z||M,由密码杂凑方法hash确定hash(M′),得到的结果作为e;

2)第二通信方处理待签名消息

第二通信方处理待签名消息与第一通信方处理待签名消息步骤相同;

3)第一通信方产生临时子公私钥对

第一通信方产生一个位于[1,n-1]之间的随机数k1,将k1作为临时子私钥,由k1[*]G得到的结果作为临时子公钥Q1;

4)第二通信方产生临时子公私钥对

第二通信方产生一个位于[1,n-1]之间的随机数k2,将k2作为临时子私钥,由k2[*]G得到的结果作为临时子公钥Q2;

5)通信双方相互认证

第一通信方用双方预定的零知识证明协议proof确定临时子私钥k1的零知识证明proof(k1),按照双方预定的承诺协议com确定临时子公钥Q1和临时子私钥k1的零知识证明proof(k1)的承诺值com(Q1||proof(k1)),按照双方预定的承诺协议com,将承诺值com(Q1||proof(k1))和承诺信息发送给第二通信方;

第二通信方用双方预定的零知识证明协议proof确定临时子私钥k2的零知识证明proof(k2),将临时子公钥Q2和临时子私钥k2的零知识证明proof(k2)发送给第一通信方;

第一通信方用双方预定的零知识证明协议proof验证Q2=k2[*]G,发送解承诺信息临时子公钥Q1和临时子私钥k1的零知识证明proof(k1)给第二通信方;

第二通信方收到解承诺信息,按照双方预定的承诺协议com,验证承诺值com(Q1||proof(k1))的正确性,用预定的零知识证明协议proof验证Q1=k1[*]G;

6)生成时戳

通信双方分别根据第一通信方的身份信息ID1、当前时间T以及第一通信方所处位置信息S,由密码杂凑方法hash确定hash(ID1||T||S),得到的结果作为时戳t,其中,ID1、T、S为比特串;

7)通信双方协作签名

第二通信方由k2[*]Q1得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r,其中mod表示求模运算;产生一个位于[1,n2]之间的随机数η,按照同态加密方法Enc的加密运算Encpk确定 和 得到的结果分别作为同态密文c1和同态密文c2;将同态密文c1和同态密文c2发送给第一通信方,其中, 表示d2在Fp上的逆元,Encpk表示在同态公钥pk下同态加密方法Enc的加密运算;

第一通信方由k1[*]Q2得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r;计算 将计算结果作为s′,发送s′给第二通信方,其中, 表示d1在Fp上的逆元,t-1表示时戳t在Fp上的逆元,⊙表示标量乘同态运算,即a⊙b表示b对应的明文与a做乘法运算; 表示加法同态运算,即 表示a对应的明文与b对应的明文做加法运算;

第二通信方按照同态加密方法Enc的解密运算Decsk确定Decsk(s′)-rmodn,得到的结果作为部分签名s,其中,Decsk表示在同态私钥sk下同态加密方法Enc的解密运算;

(4)输出完整签名

第二通信方将部分签名r和部分签名s组成一个完整签名输出。

说明书 :

安全的两方协作SM2签名方法

技术领域

[0001] 本发明属于信息安全技术领域,具体涉及一种安全的两方协作SM2签名方法。

背景技术

[0002] 为了满足电子认证服务系统等应用需求,2010年12月17日国家密码管理局发布了SM2椭圆曲线公钥密码算法,并制定了国家标准GB/T 32918。该标准的第二部分描述了一种基于椭圆曲线的签名算法,即SM2签名算法。该签名算法包括数字签名生成算法和验证算法,签名生成算法是实现签名者对数据产生数字签名的功能,验证算法是实现验证者验证签名可靠性的功能。每个签名者会生成一对密钥:公钥和私钥,其中公钥是公开的,私钥由签名者秘密保管。生成签名时,签名者用私钥产生签名;验证时,验证者用签名者的公钥验证签名。
[0003] SM2数字签名算法能够满足多种密码应用中的身份认证和数据完整性、真实性的安全需求,目前在国内商密应用领域已经广泛使用多年。但随着各种攻击技术的发展,攻击者会利用各种各样的攻击工具窃取用户私钥,一旦私钥被攻击者窃取,则攻击者可以利用窃取的私钥冒充合法用户的身份进行签名,由此带来的危害可能会是灾难性的。
[0004] 针对以上问题,一个有效的解决方案是将私钥将拆分成两个部分,分别存储第一通信方和第二通信方,使用时双方进行协作计算,私钥不会在任何一方完整出现,即参与运算的任何一方都不会拿到完整的私钥。2014年,林璟锵等人公开了一种适用于云计算的基于SM2算法的签名方法,该方法在双方均诚实的情况下实现了上述功能,即通信双方可以分别利用各自的部分私钥联合计算才能得到消息的完整签名。但是,该方法在其密钥生成与签名生成阶段中,缺乏对通信双方身份的认证机制,难以防范中间人攻击,从而导致攻击者可以假冒第一通信方的身份产生完整签名并通过验证。

发明内容

[0005] 本发明所要解决的技术问题在于克服上述签名方法的缺点,提供一种易于操作、安全性高的安全的两方协作SM2签名方法。
[0006] 解决上述技术问题采用的技术方案是由下述步骤组成:
[0007] (1)系统初始化
[0008] 第一通信方和第二通信方共享SM2签名算法的椭圆曲线参数E(Fp)、G和n,E(Fp)表示有限域Fp上椭圆曲线E的所有有理点,包括无穷远点O,组成的集合,G表示椭圆曲线E上阶为n的基点,n为有限的正整数,各参数的取值依据SM2方法预先设定,通信双方预先约定好要使用的密码杂凑方法hash、承诺协议com、零知识证明协议proof以及具有加法同态性的同态加密方法Enc。
[0009] (2)协商生成签名公钥
[0010] 第一通信方生成子私钥d1和子公钥P1,第二通信方生成子私钥d2和子公钥P2,通信双方分别用对方的子公钥和自身的子私钥协商生成签名公钥P。
[0011] (3)协作签名
[0012] 第一通信方产生临时子私钥k1和临时子公钥Q1,第二通信方产生临时子私钥k2和临时子公钥Q2,分别根据对方的临时子公钥、自身的子私钥和自身的临时子私钥生成部分签名r和部分签名s,通信双方协作产生完整签名。
[0013] (4)输出完整签名
[0014] 第二通信方将部分签名r和部分签名s组成一个完整签名输出。
[0015] 在本发明的协商生成签名公钥步骤(2)中,本发明的通信双方分别用对方的子公钥和自身的子私钥协商生成签名公钥P的方法为:
[0016] 1)第一通信方产生子公私钥对
[0017] 第一通信方产生一个位于[1,n-1]之间的随机数d1,将d1作为子私钥,即有:d1∈[1,n-1],由d1[*]G得到的结果作为子公钥P1;其中,[*]表示椭圆曲线点乘运算。
[0018] 2)第二通信方产生子公私钥对
[0019] 第二通信方产生一个位于[1,n-1]之间的随机数d2,将d2作为子私钥,即有:d2∈[1,n-1],由d2[*]G得到的结果作为子公钥P2。
[0020] 3)通信双方相互认证
[0021] 第一通信方用双方预定的零知识证明协议proof确定子私钥d1的零知识证明proof(d1),按照双方预定的承诺协议com确定子公钥P1和子私钥d1的零知识证明proof(d1)的承诺值com(P1||proof(d1)),按照双方预定的承诺协议com,将承诺值com(P1||proof(d1))和承诺信息发送给第二通信方,其中,||表示拼接。
[0022] 第二通信方用预定的零知识证明协议proof确定子私钥d2的零知识证明proof(d2),生成预定的加法同态加密方法Enc的密钥对pk和sk,其中pk表示同态公钥,sk表示同态私钥,将子公钥P2,同态公钥pk和子私钥d2的零知识证明proof(d2)发送给第一通信方。
[0023] 第一通信方根据预定的零知识证明协议proof验证P2=d2[*]G,根据双方预定的承诺协议com将解承诺信息子公钥P1和子私钥d1的零知识证明proof(d1)发送给第二通信方。
[0024] 第二通信方收到解承诺信息,按照双方预定的承诺协议com,验证承诺值com(P1||proof(d1))的正确性,用预定的零知识证明协议proof验证P1=d1[*]G。
[0025] 4)通信双方协商生成签名公钥
[0026] 第一通信方由d1[*]P2[-]G得到的结果作为签名公钥P,其中,[-]表示椭圆曲线点减运算。
[0027] 第二通信方由d2[*]P1[-]G得到的结果作为签名公钥P′,P′与P相等。
[0028] 在本发明的协作签名步骤(3)中,本发明的通信双方协作产生完整签名的方法为:
[0029] 1)第一通信方处理待签名消息
[0030] 第一通信方将第一通信方和第二通信方共同的身份标识Z和消息M拼接形成M′,即有:M′=Z||M,由密码杂凑方法hash确定hash(M′),得到的结果作为e。
[0031] 2)第二通信方处理待签名消息
[0032] 第二通信方处理待签名消息与第一通信方处理待签名消息步骤相同。
[0033] 3)第一通信方产生临时子公私钥对
[0034] 第一通信方产生一个位于[1,n-1]之间的随机数k1,将k1作为临时子私钥,由k1[*]G得到的结果作为临时子公钥Q1。
[0035] 4)第二通信方产生临时子公私钥对
[0036] 第二通信方产生一个位于[1,n-1]之间的随机数k2,将k2作为临时子私钥,由k2[*]G得到的结果作为临时子公钥Q2。
[0037] 5)通信双方相互认证
[0038] 第一通信方用双方预定的零知识证明协议proof确定临时子私钥k1的零知识证明proof(k1),按照双方预定的承诺协议com确定临时子公钥Q1和临时子私钥k1的零知识证明proof(k1)的承诺值com(Q1||proof(k1)),按照双方预定的承诺协议com,将承诺值com(Q1||proof(k1))和承诺信息发送给第二通信方。
[0039] 第二通信方用双方预定的零知识证明协议proof确定临时子私钥k2的零知识证明proof(k2),将临时子公钥Q2和临时子私钥k2的零知识证明proof(k2)发送给第一通信方。
[0040] 第一通信方用双方预定的零知识证明协议proof验证Q2=k2[*]G,按照双方预定的承诺协议com,发送解承诺信息临时子公钥Q1和临时子私钥k1的零知识证明proof(k1)给第二通信方。
[0041] 第二通信方收到解承诺信息,按照双方预定的承诺协议com,验证承诺值com(Q1||proof(k1))的正确性,用预定的零知识证明协议proof验证Q1=k1[*]G。
[0042] 6)生成时戳
[0043] 通信双方分别根据第一通信方的身份信息ID1、当前时间T以及第一通信方所处位置信息S,由密码杂凑方法hash确定hash(ID1||T||S),得到的结果作为时戳t,其中,ID1、T、S为比特串。
[0044] 7)通信双方协作签名
[0045] 第二通信方由k2[*]Q1得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r,其中mod表示求模运算;产生一个位于[1,n2]之间的随机数η,按照同态加密方法Enc的加密运算Encpk确定 和 得到的结果分别作为同态密文c1和同态密文c2;将同态密文c1和同态密文c2发送给第一通信方,其中, 表示d2在Fp上的逆元,Encpk表示在同态公钥pk下同态加密方法Enc的加密运算。
[0046] 第一通信方由k1[*]Q2得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r;计算 将计算结果作为s′,发送s′给第二通信方,其中, 表示d1在Fp上的逆元,t-1表示时戳t在Fp上的逆元,⊙表示标量乘同态运算,即a⊙b表示b对应的明文与a做乘法运算; 表示加法同态运算,即 表示a对应的明文与b对应的明文做加法运算。
[0047] 第二通信方按照同态加密方法Enc的解密运算Decsk确定Decsk(s′)-rmodn,得到的结果作为部分签名s,其中,Decsk表示在同态私钥sk下同态加密方法Enc的解密运算。
[0048] 本发明的同态加密方法Enc为Paillier同态加密方法、Benaloh同态加密方法、NS同态加密方法中的任意一种。
[0049] 本发明将SM2签名私钥拆分成两部分,分别由第一通信方和第二通信方保管,在密钥生成阶段和签名阶段需要通信双方协作计算才能产生签名公钥和完整的SM2签名,任何一方都不能得到完整的私钥独自输出一个完整的签名。本发明中,为了确保通信双方身份的真实性,在协商签名公钥和协作签名之前,通信双方均利用零知识证明技术来认证对方的身份;利用承诺技术保证输出完整签名的正确性;利用同态加密技术保证第一通信方无需解密收到的密文就能实现其对应明文的运算操作;时戳机制的加入确保了通信双方只有获取第一通信方身份、当前时间和第一通信方所处位置信息一致的情况下才能输出正确的完整签名;这些技术极大地提高了系统的安全性,降低因签名私钥泄露所带来的损失。与现有技术相比,本发明能够防范中间人攻击,具有更高的安全性,适用于在通信信道不安全的环境中使用。

附图说明

[0050] 图1为本发明实施例1的流程图。

具体实施方式

[0051] 为了使本发明的技术方案更加清楚、明白,以下参照附图,对本发明所述方案作进一步的详细说明。
[0052] 为便于表述,分别用第一通信方和第二通信方来表示通信双方,其中,第一通信方为移动终端,第二通信方为服务器端。
[0053] 实施例1
[0054] 在图1中,本实施例的安全的两方协作SM2签名方法由以下步骤组成。
[0055] (1)系统初始化
[0056] 第一通信方和第二通信方共享SM2算法的椭圆曲线参数E(Fp)、G和n,E(Fp)表示有限域Fp上椭圆曲线E的所有有理点,包括无穷远点O,组成的集合,G表示椭圆曲线E上阶为n的基点,n为有限的正整数,本实施例的椭圆曲线参数E(Fp)、G和n的具体取值与GB/T 32918.2-2016中的附录A.2中各参数的取值相同。通信双方预先约定好要使用的密码杂凑方法hash为GB/T 32905-2016给出的密码杂凑方法,即SM3算法;承诺协议com为文献“Fast secure two-party ECDSA signing”中图2.1所定义的承诺协议comSM3,本实施例中确定承诺值的具体方法为:comSM3(x)=SM3(x||R),其中R为位于[1,n-1]之间的随机数,||表示拼接;零知识证明协议proof为1989年C.P.Schnorr在“E cient identification and signatures for smart cards”中提出的Schnorr零知识证明协议proofSchnorr;同态加密方法Enc为1999年P.Paillier在“Cryptosystems  based on composite degree residuosityclasses”提出的具有加法同态性的Paillier同态加密方法,本实施例的Paillier同态加密方法是同态加密方法Enc中的一种方法。
[0057] (2)协商生成签名公钥
[0058] 第一通信方生成子私钥d1和子公钥P1,第二通信方生成子私钥d2和子公钥P2。通信双方分别用对方的子公钥和自身的子私钥协商生成签名公钥P的方法如下;
[0059] 1)第一通信方产生子公私钥对
[0060] 第一通信方产生一个位于[1,n-1]之间的随机数d1,将d1作为子私钥,即有:d1∈[1,n-1],由d1[*]G得到的结果作为子公钥P1;其中,[*]表示椭圆曲线点乘运算。
[0061] 2)第二通信方产生子公私钥对
[0062] 第二通信方产生一个位于[1,n-1]之间的随机数d2,将d2作为子私钥,即有:d2∈[1,n-1],由d2[*]G得到的结果作为子公钥P2。
[0063] 3)通信双方相互认证
[0064] 本实施例的零知识证明协议proof采用Schnorr零知识证明协议proofSchnorr,承诺协议com采用承诺协议comSM3。第一通信方用零知识证明协议proofSchnorr确定子私钥d1的零知识证明proofSchnorr(d1),按照双方预定的承诺协议comSM3确定子公钥P1和子私钥d1的零知识证明proofSchnorr(d1)的承诺值comSM3(P1||proofSchnorr(d1)),具体为:由密码杂凑方法SM3确定SM3(P1||proofSchnorr(d1)||R),将得到的结果作为子公钥P1和子私钥d1的零知识证明proofSchnorr(d1)的承诺值comSM3(P1||proofSchnorr(d1)),按照双方预定的承诺协议comSM3,将承诺值comSM3(P1||proofSchnorr(d1))和承诺信息R发送给第二通信方,其中R为第一通信方产生的位于[1,n-1]之间的随机数,||表示拼接。
[0065] 本实施例的同态加密方法Enc采用Paillier同态加密方法。第二通信方用零知识证明协议proofSchnorr确定子私钥d2的零知识证明proofSchnorr(d2),生成Paillier同态加密方法的密钥对pk和sk,其中pk表示Paillier同态公钥,sk表示Paillier同态私钥,将子公钥P2,同态公钥pk和子私钥d2的零知识证明proofSchnorr(d2)发送给第一通信方。
[0066] 第一通信方根据零知识证明协议proofSchnorr验证P2=d2[*]G,按照双方预定的承诺协议comSM3将解承诺信息子公钥P1和子私钥d1的零知识证明proofSchnorr(d1)发送给第二通信方;
[0067] 第二通信方收到解承诺信息,按照双方预定的承诺协议comSM3,验证承诺值comSM3(P1||proofSchnorr(d1))的正确性,具体方法为:验证comSM3(P1||proofSchnorr(d1))=SM3(P1||proofSchnorr(d1)||R),用预定的零知识证明协议proofSchnorr验证P1=d1[*]G;
[0068] 4)通信双方协商生成签名公钥
[0069] 第一通信方由d1[*]P2[-]G得到的结果作为签名公钥P,其中,[-]表示椭圆曲线点减运算;
[0070] 第二通信方由d2[*]P1[-]G得到的结果作为签名公钥P′,P′与P相等。
[0071] (3)协作签名
[0072] 第一通信方产生临时子私钥k1和临时子公钥Q1,第二通信方产生临时子私钥k2和临时子公钥Q2,分别根据对方的临时子公钥、自身的子私钥和自身的临时子私钥,通信双方协作产生完整签名。
[0073] 上述的通信双方协作产生完整签名的方法为:
[0074] 1)第一通信方处理待签名消息
[0075] 本实施例的密码杂凑方法hash采用GB/T 32905-2016给出的密码杂凑方法,即SM3算法。第一通信方将第一通信方和第二通信方共同的身份标识Z和消息M拼接形成M′,即:M′=Z||M,由密码杂凑方法SM3确定SM3(M′),得到的结果作为e;
[0076] 2)第二通信方处理待签名消息
[0077] 第二通信方处理待签名消息与第一通信方处理待签名消息步骤相同;
[0078] 3)第一通信方产生临时子公私钥对
[0079] 第一通信方产生一个位于[1,n-1]之间的随机数k1,将k1作为临时子私钥,由k1[*]G得到的结果作为临时子公钥Q1;
[0080] 4)第二通信方产生临时子公私钥对
[0081] 第二通信方产生一个位于[1,n-1]之间的随机数k2,将k2作为临时子私钥,由k2[*]G得到的结果作为临时子公钥Q2;
[0082] 5)通信双方相互认证
[0083] 第一通信方用零知识证明协议proofSchnorr确定临时子私钥k1的零知识证明proofSchnorr(k1),本实施例的双方预定的承诺协议com采用comSM3。按照双方预定的承诺协议comSM3确定临时子公钥Q1和临时子私钥k1的零知识证明proofSchnorr(k1)的承诺值comSM3(Q1||proofSchnorr(k1)),具体为:由密码杂凑方法SM3确定SM3(Q1||proofSchnorr(k1)||R′),将得到的结果作为临时子公钥Q1和临时子私钥k1的零知识证明proofSchnorr(k1)的承诺值comSM3(Q1||proofSchnorr(k1)),按照双方预定的承诺协议comSM3,将承诺值comSM3(Q1||proofSchnorr(k1))和承诺信息R′发送给第二通信方,其中,R′为第一通信方产生的位于[1,n-1]之间的随机数。
[0084] 第二通信方用零知识证明协议proofSchnorr确定临时子私钥k2的零知识证明proofSchnorr(k2),将临时子公钥Q2和临时子私钥k2的零知识证明proofSchnorr(k2)发送给第一通信方。
[0085] 第一通信方用双方预定的零知识证明协议proofSchnorr验证Q2=k2[*]G,按照双方预定的承诺协议comSM3,发送解承诺信息临时子公钥Q1和临时子私钥k1的零知识证明proofSchnorr(k1)给第二通信方。
[0086] 第二通信方收到解承诺信息,按照双方预定的承诺协议comSM3,验证承诺值comSM3(Q1||proofSchnorr(k1))的正确性,具体方法为:验证comSM3(Q1||proofSchnorr(k1))=SM3(Q1||proofSchnorr(k1)||R′),用预定的零知识证明协议proofSchnorr验证Q1=k1[*]G。
[0087] 6)生成时戳
[0088] 通信双方分别根据第一通信方的身份信息ID1、当前时间T以及第一通信方所处位置信息S,本实施例的密码杂凑方法hash为SM3密码杂凑方法,由SM3(ID1||T||S)得到的结果作为时戳t,其中,ID1、T、S为比特串。
[0089] 7)通信双方协作签名
[0090] 本实施例中的同态加密方法Enc采用Paillier同态加密方法。第二通信方由k2[*]Q1得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r,其中mod表示求模运算;产生一个位于[1,n2]之间的随机数η,按照Paillier同态加密方法中的加密运算Paillierpk,本实施例中的Encpk采用Paillierpk,由 和得到的结果分别作为Paillier同态密文c1和Paillier同态密文c2;将
Paillier同态密文c1和Paillier同态密文c2发送给第一通信方,其中, 表示子私钥d2在Fp上的逆元,Paillierpk表示在同态公钥pk下Paillier同态加密方法的加密运算。
[0091] 第一通信方由k1[*]Q2得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r;计算 将计算结果作为s′,发送s′给第二通信方,其中, 表示子私钥d1在Fp上的逆元,t-1表示时戳t在Fp上的逆元,⊙表示Paillier标量乘同态运算,即a⊙b表示b对应的明文与a做乘法运算; 表示Paillier加法同态运算,即 表示a对应的明文与b对应的明文做加法运算;
[0092] 第二通信方按照Paillier同态加密方法中的解密运算Pailliersk确定Pailliersk(s′)-rmodn,得到的结果作为部分签名s,其中,Pailliersk表示在同态私钥sk下Paillier加法同态方法的解密运算。
[0093] (4)输出完整签名
[0094] 第二通信方将部分签名r和部分签名s组成一个完整签名输出。
[0095] 实施例2
[0096] (1)系统初始化
[0097] 该步骤中的同态加密方法Enc采用1994年J.Benaloh在“Dense probabilistic encryption”提出的具有加法同态性的Benaloh同态加密方法。该步骤中的其它步骤与实施例1相同。
[0098] (2)协商生成签名公钥
[0099] 该步骤与实施例1相同。
[0100] (3)协作签名
[0101] 步骤1)~步骤6)与实施例1相同。
[0102] 7)通信双方协作签名
[0103] 本实施例中的同态加密方法Enc采用Benaloh同态加密方法。第二通信方由k2[*]Q1得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r,其中mod表示求模运算;产生一个位于[1,n2]之间的随机数η,按照Benaloh同态加密方法中的加密运算Benalohpk,本实施例中的Encpk采用Benalohpk,由 和 得到
的结果分别作为Benaloh同态密文c1和Benaloh同态密文c2;将Benaloh同态密文c1和Benaloh同态密文c2发送给第一通信方,其中, 表示子私钥d2在Fp上的逆元,Benalohpk表示在同态公钥pk下Benaloh同态加密方法的加密运算。
[0104] 第一通信方由k1[*]Q2得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r;计算 将计算结果作为s′,发送s′给第二通信方,其中, 表示子私钥d1在Fp上的逆元,t-1表示时戳t在Fp上的逆元,⊙表示Benaloh标量乘同态运算,即a⊙b表示b对应的明文与a做乘法运算; 表示Benaloh加法同态运算,即 表示a对应的明文与b对应的明文做加法运算;
[0105] 第二通信方按照Benaloh同态加密方法中的解密运算Benalohpk确定Benalohpk(s′)-rmodn,得到的结果作为部分签名s,其中,Benalohpk表示在同态私钥sk下Benaloh加法同态方法的解密运算。
[0106] (4)输出完整签名
[0107] 该步骤与实施例1相同。
[0108] 实施例3
[0109] (1)系统初始化
[0110] 该步骤中的同态加密方法Enc采用1998年D.Naccache和J.Stern在“A new public key cryptosystem based on higher residues”提出的具有加法同态性的NS同态加密方法。该步骤中的其它步骤与实施例1相同。
[0111] (2)协商生成签名公钥
[0112] 该步骤与实施例1相同。
[0113] (3)协作签名
[0114] 步骤1)~步骤6)与实施例1相同。
[0115] 7)通信双方协作签名
[0116] 本实施例中的同态加密方法Enc采用NS同态加密方法。第二通信方由k2[*]Q1得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r,其中mod表示求模运算;产生2
一个位于[1,n ]之间的随机数η,按照NS同态加密方法中的加密运算NSpk,本实施例中的Encpk采用NSpk,由 和 得到的结果分别作为NS同态密文c1
和NS同态密文c2;将NS同态密文c1和NS同态密文c2发送给第一通信方,其中, 表示子私钥d2在Fp上的逆元,NSpk表示在同态公钥pk下NS同态加密方法的加密运算。
[0117] 第一通信方由k1[*]Q2得到的结果作为点(x1,y1),由x1+emodn得到的结果作为部分签名r;计算 将计算结果作为s′,发送s′给第二通信方,其中, 表示子私钥d1在Fp上的逆元,t-1表示时戳t在Fp上的逆元,⊙表示NS标量乘同态运算,即a⊙b表示b对应的明文与a做乘法运算; 表示NS加法同态运算,即 表示a对应的明文与b对应的明文做加法运算;
[0118] 第二通信方按照NS同态加密方法中的解密运算NSpk确定NSpk(s′)-rmodn,得到的结果作为部分签名s,其中,NSpk表示在同态私钥sk下NS加法同态方法的解密运算。
[0119] (4)输出完整签名
[0120] 该步骤与实施例1相同。