1.一种基于爱德华兹曲线数字签名的生成方法,其特征在于它是由下述步骤组成:(1)协商生成系统密钥
1)生成第一通信方子公钥和子私钥
第一通信方选择一个长度为w1字节的随机字符串作为第一通信方私钥字符串k1,w1∈[32,64]的整数,使用密码杂凑函数Hash用式(1)得到第一通信方私钥字符串的杂凑值str1:str1=Hash(k1) (1)
第一通信方用式(2)得到第一通信方子私钥sl1:其中len为杂凑函数Hash输出的杂凑值的比特长度,len的取值为256或512,其中l的取值为2或4或8;第一通信方用式(3)得到第一通信方标识符perix1:第一通信方用式(4)使用爱德华兹曲线上点乘运算由第一通信方子私钥sl1生成第一通信方子公钥p1,并将第一通信方子公钥p1发送到第二通信方;
p1=sl1[*]B (4)
其中[*]表示爱德华兹曲线上的点乘运算,B为爱德华兹曲线上的基点、取点B1或B2,B1的坐标为(1511222134953540077250115140958853151145401269304185720604611328394
9847762202,46316835694926478169428394003475163141307993866256225615783033603
165251855960),B2的坐标为(224580040295924300187604334099896036246789641632564
1342461254616869504154674060329090291928693579532825780320751464461736746026
35247710,2988192100784814926760179304439306734375440401540802420959282413723
31506189835876003536878655418784733982303233503462500531545062832660);
2)生成第二通信方子公钥和子私钥
第二通信方选择一个长度为w2字节的随机字符串作为第二通信方私钥字符串k2,w2∈[32,64]的整数,使用密码杂凑函数Hash用式(5)得到第二通信方私钥字符串的杂凑值str2:str2=Hash(k2) (5)
第二通信方用式(6)得到第二通信方子私钥sl2:第二通信方用式(7)得到第二通信方标识符perix2:第二通信方用式(8)使用爱德华兹曲线上点乘方法由第二通信方子私钥sl2生成第二通信方子公钥p2,将第二通信方子公钥p2发送到第一通信方;
p2=sl2[*]B (8)
3)生成签名系统公钥
第一通信方收到第二通信方子公钥P2,用式(9)得到签名系统公钥T1:T1=sl1[*]P2 (9)
第二通信方收到第一通信方子公钥P1,用式(10)得到签名系统公钥T2:T2=sl2[*]P1 (10)
第一通信方采用爱德华兹曲线点压缩方法Encoding用式(11)得到签名系统公钥T1的压缩值T1′:T1′=Encoding(T1) (11)第二通信方采用爱德华兹曲线点压缩方法Encoding用式(12)得到签名系统公钥T2的压缩值T2′:T2′=Encoding(T2) (12)(2)协商生成数字签名
1)生成第一通信方签名元素
第一通信方由式(13)得到部分签名r的子生成元素r1:r1=Hash(perix1||M)modq (13)其中M为待签名消息、长度为有限正整数,mod表示模运算,q为爱德华兹曲线点群的阶,即爱德华兹曲线点群上的元素个数,q为2^252+277423177773723535358519377908836484
93或2^446-138180668098951153520073867485154268803366924748821786098945475038
85,||符号表示连接;
第一通信方用Paillier同态加密方法的密钥生成方法生成密钥对(sk,pk),其中sk为同态加密私钥,pk为同态加密公钥,用式(14)得到部分签名r的子生成元素r1的密文c1:c1=Encpk(r1) (14)
其中Encpk为同态加密方法;第一通信方使用同态加密方法Encpk用式(15)得到第一通信方子私钥sl1的密文c2:c2=Encpk(sl1) (15)
第一通信方用式(16)得到爱德华兹曲线上点Q:Q=r1[*]B (16)
第一通信方将c1,c2,Q,pk发送给第二通信方;
2)协商生成完整数字签名
第二通信方用式(17)得到部分签名r的子生成元素r2:r2=Hash(perix2||M)modq (17)第二通信方用式(18)得到第二通信方子私钥p2的压缩值p2′:p2′=Encoding(p2) (18)第二通信方用式(19)、(20)得到两个第二通信方的私有大数n1与私有大数n2:n1=Hash(perix2||p2′)modq (19)n2=Hash(perix2||T2′)modq (20)第二通信方用式(21)得到待签名消息M的杂凑值e:e=Hash(M) (21)
第二通信方用式(22)得到爱德华兹曲线上点R:R=e[*]r2[*]B (22)
第二通信方用式(23)得到部分签名r:
r=Encoding(R) (23)
第二通信方用式(24)得到签名系数k:
k=Hash(r||T2′||M)modq (24)第二通信方分别用式(25)、(26)、(27)得到部分签名s的密文s′的三个生成元素s1、s2、s3:s3=Encpk(n1n2q) (27)其中 表示同态乘法, 表示b对应的明文与a相乘;第二通信方使用上述三个生成元素由同态加法用式(28)得到部分签名s的密文s′:其中 表示同态加法, 表示a对应的明文与b对应的明文相加;第二通信方将s′和r发送到第一通信方;第一通信方收到第二通信方发送的部分签名s的密文s′与部分签名r,第一通信方用式(29)得到部分签名s:s=Decsk(s′)modq (29)Decsk是同态加密解密方法;第一通信方由部分签名s与部分签名r用式(30)得到完整的签名S:S=s||r (30)
(3)签名验证
验证者和签名发布者共享的信息包括待签名消息M、签名系统公钥压缩值T1′、完整签名S:验证者用式(31)、(32)得到部分签名s与部分签名r:其中length是完整签名S的长度,为偶数;验证者用式(33)解压部分签名r得到R:R=Decoding(r) (33)
其中Decoding为爱德华兹曲线上的点解压缩方法;验证者用式(34)得到签名系数k:k=Hash(r||T1′||M)modq (34)验证者用式(35)得到签名系统公钥T1:T1=Decoding(T1′) (35)验证者验证式(36)两边是否相等,相等则证明验证通过,得到完整签名,否则验证失败;
s[*]B=R+k[*]T1 (36)
2.根据权利要求1所述的基于爱德华兹曲线数字签名的生成方法,其特征在于所述的协商生成系统密钥步骤(1)中的步骤1)为:
1)第一通信方选择一个长度为w1字节的随机字符串作为第一通信方私钥字符串k1,w1为32,使用密码杂凑函数Hash用式(1)得到第一通信方私钥字符串的杂凑值str1:str1=Hash(k1) (1)
第一通信方用式(2)得到第一通信方子私钥sl1:其中杂凑函数Hash选择国密SM3方法,len为杂凑函数SM3输出的杂凑值的比特长度,len的取值为256,l的取值为2;第一通信方用式(3)得到第一通信方标识符perix1:第一通信方用式(4)使用爱德华兹曲线上点乘运算由第一通信方子私钥sl1生成第一通信方子公钥p1,并将第一通信方子公钥p1发送到第二通信方;
p1=sl1[*]B (4)
其中[*]表示爱德华兹曲线上的点乘运算,B为爱德华兹曲线上的基点,为爱德华兹曲线上的生成元,B为(x,y);
2)第二通信方选择一个长度为w2字节的随机字符串作为第二通信方私钥字符串k2,w2为32,使用密码杂凑函数Hash用式(5)得到第二通信方私钥字符串的杂凑值str2:str2=Hash(k2) (5)
第二通信方用式(6)得到第二通信方子私钥sl2:第二通信方用式(7)得到第二通信方标识符perix2:其中杂凑函数Hash选择国密SM3方法,len为杂凑函数SM3输出的杂凑值的比特长度,len的取值为256,l的取值为2;第二通信方用式(8)使用爱德华兹曲线上点乘方法由第二通信方子私钥sl2生成第二通信方子公钥p2,将第二通信方子公钥p2发送到第一通信方。
p2=sl2[*]B (8)
3.根据权利要求1所述的基于爱德华兹曲线数字签名的生成方法,其特征在于:所述的在协商生成系统密钥步骤(1)的步骤3)中,第一通信方的签名系统公钥T1与第二通信方的签名系统公钥T2相等,签名系统公钥T1的压缩值T1′与签名系统公钥T2的压缩值T2′相等。