本发明属于信息安全领域,更具体地,涉及一种双方协作生成数字签名的方法。
背景技术:
目前,业务系统多采用基于数字证书的公钥基础架构(publickeyinfrastructure,简称pki)系统来保障业务数据安全,数字证书是由自建认证实体(certificateauthority,简称ca)或第三方ca签发的,以数字证书为核心的公钥密码机制可以对网络上传输的信息进行加密和解密、数字签名和验证,确保网络上传递消息的机密性、完整性以及交易实体的真实性,签名的不可否认性,从而保障网络应用的安全性。
在以数字证书为核心的pki系统中,数字签名由客户端调用用户数字证书对应的私钥来独立计算完成。常用的数字签名算法包括rsa签名算法和椭圆曲线数字签名算法,其中椭圆曲线数字签名算法包括国际上使用最广泛的椭圆曲线数字签名算法(ellipticcurvedigitalsignaturealgorithm,简称ecdsa)和中国国家密码标准的sm2数字签名算法。
然而,现有的数字签名算法存在以下问题:
第一,由于现有方法是通过单独一方参与生成数字签名,会导致数字签名安全性较低;
第二,数字证书对应的用户私钥由用户生成,并由用户保管,容易被黑客窃取;为了保障用户私钥的安全,现在通行的做法是使用专门的安全硬件设备譬如智能卡、u盾、智能密钥设备等来存储和保护用户私钥,但是这就要求用户必须随身携带相应的硬件安全设备才能完成数字签名操作,既增加了用户使用的成本,也增加了用户使用的复杂度。
第三,现有方法无法针对sm2或ecdsa数字签名算法提供相应的两方协作生成数字签名的机制,从而导致其应用范围较窄。
技术实现要素:
针对现有技术的以上缺陷或改进需求,本发明提供了一种客户端和服务端协作生成数字签名的方法,其目的在于,解决现有方法中存在的由于单独一方生成签名导致数字签名安全性较低的技术问题,用户需要随身携带硬件安全设备导致用户成本高、使用复杂度高的技术问题,以及由于不能针对sm2或ecdsa数字签名算法提供相应的两方协作生成数字签名的机制而导致的应用范围较窄的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种双方协作生成数字签名的方法,其特征在于,包括以下步骤:
(1)第一设备产生随机数k1∈[1,n-1],根据ecc算法计算椭圆曲线上的点r1=k1*g,并将待签名消息m、椭圆曲线上的点r1打包发送给第二设备,其中n为椭圆曲线的阶,g为椭圆曲线基点,*为椭圆曲线点乘运算。
(2)第二设备产生随机数k2∈[1,n-1],根据ecc算法计算椭圆曲线上的点r2=k2*g,利用其第二私钥d2对待签名消息进行签名,以生成第一签名信息s1,并将s1和r2打包发送给第一设备。
(3)第一设备利用其第一私钥d1对待签名消息和第一签名信息s1的组合进行数字签名,以生成完整签名信息s。
按照本发明的另一方面,提供了一种双方协作生成数字签名的方法,其特征在于,包括以下步骤:
(1)第一设备产生随机数k1∈[1,n-1],根据ecc算法计算椭圆曲线上的点r1=k1*g,根据第一设备的同态加密公钥获取第一密文信息ck=encpk(k1),并将待签名消息m、点r1、以及第一密文信息ck打包发送给第二设备,其中n为椭圆曲线的阶,g为椭圆曲线基点,*为椭圆曲线点乘运算,enc为同态加密算法,pk为第一设备的同态加密公钥;
(2)第二设备产生随机数k2∈[1,n-1],根据ecc算法计算椭圆曲线上的点r2=k2*g,利用其第二私钥d2对待签名消息进行签名,以生成第一签名信息s1,并将s1和r2打包发送给第一设备;
优选地,步骤(2)中第二设备利用第二私钥d2对待签名消息进行签名,以生成第一签名信息s1的过程包括如下子步骤:
(2-1)第二设备根据随机数k2和椭圆曲线上的点r1计算椭圆曲线上的点r=k2*r1=(rx,ry),其中rx和ry分别为椭圆曲线点r的横坐标和纵坐标。
(2-2)第二设备根据sm2签名算法预处理规则对待签名消息进行预处理,以得到杂凑值e,并根据杂凑值e获取完整签名信息的第一分量r=(e+rx)modn;
(2-3)第二设备根据其第二私钥d2和完整签名信息的第一分量r计算第二密文信息c1=encpk(d2-1·r);
(2-4)第二设备根据随机数k2及其第二私钥d2获取中间值v=k2·d2-1,根据v和第一密文信息ck获取第三密文信息c2=v⊙ck,并根据第三密文信息和第二密文信息获取第一签名信息其中⊙为同态乘运算,为同态加运算。
(2-3)第二设备产生随机数ρ,使用该随机数、第二私钥d2以及r获取第二密文信息:c1=encpk(ρ·n+d2-1·r);
优选地,步骤(3)具体包括以下子步骤:
(3-1)第一设备根据第一设备的同态解密私钥sk和第一签名信息s1获取解密结果s′=decsk(s1),其中dec为与同态加密算法enc对应的同态解密算法。
(3-2)第一设备根据解密结果s′、其第一私钥d1以及完整签名信息的第一分量r获取完整签名信息的第二分量s=d1-1·s′-r;
(3-3)第一设备根据完整签名信息的第一分量s和第二分量r生成完整签名信息s=(r,s)。
优选地,所述方法进一步包括在步骤(2)之后、步骤(3)之前,第一设备对收到的数字签名信息s1进行验证,以判断该数字签名信息s1是否为第二设备生成的数字签名,验证通过则进入步骤(3),否则过程结束的步骤。
优选地,第一私钥d1可以是在密钥建立阶段由第一设备随机生成并保存,或者第一设备通过执行密钥派生函数生成,或者第一设备直接从外部导入并保存,第二私钥d2可以是在密钥建立阶段由第二设备随机生成并保存,或者第二设备通过执行密钥派生函数生成,或者第二设备直接从外部导入并保存。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
1、本发明的方法由于采用了两个设备同时生成和保存用户的部分私钥,任意一方均不能合成用户的完整私钥,从而保证了用户私钥的安全性,即使一方密钥被黑客窃取,黑客也不能恢复出完整密钥,从而增加了用户签名的安全性;
2、本发明的方法由于采用了两个设备同时参与签名运算流程,用户私钥的两个分散部分只在满足条件下参与运算,生成部分签名,任意一方均不能生成完整的签名,从而进一步保证了用户签名的安全性。
3、本发明用户完整私钥分散保存,任意一方不需要专门的硬件安全设备来保存密钥,从而降低了用户的使用成本和复杂度。
4、本发明针对sm2或ecdsa数字签名算法提供了相应的两方协作生成数字签名的机制,应用范围广。
附图说明
图1是根据本发明一种实施方式的双方协作生成数字签名的方法的流程图。
图2是根据本发明另一种实施方式的双方协作生成数字签名的方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
如图1所示,根据本发明一种实施方式的双方协作生成数字签名的方法包括以下步骤:
(2)第一设备产生随机数k1∈[1,n-1],根据椭圆曲线算法(ellipticcurvecryptography,简称ecc)计算椭圆曲线上的点r1=k1*g,并将待签名消息m、椭圆曲线上的点r1打包发送给第二设备,其中n为椭圆曲线的阶,g为椭圆曲线基点,*为椭圆曲线点乘运算。
具体而言,本发明中的第一设备,可以是客户端,诸如桌面电脑(desktopcomputer)、笔记本(laptop)、智能手机(smartphone)等,也可以是服务端,例如服务器等。
具体而言,本发明中的第二设备,可以是客户端,诸如桌面电脑(desktopcomputer)、笔记本(laptop)、智能手机(smartphone)等,也可以是服务端,例如服务器等,当第一设备是客户端时,第二设备是服务端,当第一设备是服务端时,第二设备是客户端。
第二私钥d2可以是在密钥建立阶段由第二设备随机生成并保存,或者第二设备通过执行密钥派生函数生成,或者第二设备直接从外部导入并保存。
具体而言,第一私钥d1可以是在密钥建立阶段由第一设备随机生成并保存,或者第一设备通过执行密钥派生函数生成,或者第一设备直接从外部导入并保存。
作为本发明的进一步改进,本发明的方法还可以包括在上述步骤(1)之前的如下步骤:
作为本发明的进一步改进,本发明的方法还可以包括在上述步骤(1)之后,步骤(2)之前的以下步骤:
作为本发明的进一步改进,本发明的方法还可以包括在上述步骤(2)之后,步骤(3)之前的以下步骤:
(3’)第一设备对收到的数字签名信息s1进行验证,以判断该数字签名信息s1是否为第二设备生成的数字签名,验证通过则进入步骤(3),否则过程结束。
如图2所示,根据本发明另一种实施方式的双方协作生成数字签名的方法包括以下步骤:
在本实施方式下,步骤(2)中第二设备利用第二私钥d2对待签名消息进行签名,以生成第一签名信息s1的过程包括如下步骤:
具体而言,本步骤的具体实现方式可参见gm/t0009-2012《sm2密码算法使用规范》中第8节的预处理过程。
作为本发明实施例的进一步改进,上述步骤(2-3)也可被替换为下述步骤(2-3’):
(2-3’)第二设备产生随机数ρ,使用该随机数、第二私钥d2以及r获取第二密文信息:c1=encpk(ρ·n+d2-1·r)。
步骤(3)具体包括以下子步骤:
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。