一种客户端和服务端协作生成数字签名的方法与流程

文档序号:11929719阅读:392来源:国知局
一种客户端和服务端协作生成数字签名的方法与流程

本发明属于信息安全领域,更具体地,涉及一种客户端和服务端协作生成数字签名的方法。



背景技术:

目前,业务系统多采用基于数字证书的公钥基础设施(Public Key Infrastructure,简称PKI)系统来保障业务数据安全,数字证书是由证书授权(Certificate Authority,简称CA)或第三方CA签发的,以数字证书为核心的公钥密码机制可以对网络上传输的信息进行加密和解密、数字签名和验证,以确保网络上传递消息的机密性、完整性以及交易实体的真实性,以及签名的不可否认性,进而保障网络应用的安全性。

在以数字证书为核心的PKI系统中,数字签名由客户端调用用户数字证书对应的私钥来独立计算完成。常用的数字签名算法包括RSA签名算法和基于椭圆曲线密码的数字签名算法,其中基于椭圆曲线密码的数字签名算法包括国际上使用最广泛的椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm,简称ECDSA)和中国国家密码标准的SM2数字签名算法。

然而,上述数字签名算法存在以下几个技术问题:

第一,数字证书对应的用户私钥是由用户生成,并由用户保管,容易被黑客窃取,为了保障用户私钥的安全,目前通行的做法是使用专门的硬件安全设备(譬如智能卡、U盾、智能密钥设备等)来存储和保护用户私钥,但这就要求用户必须购买并随身携带该硬件安全设备才能完成数字签名操作,从而既增加了用户使用的成本,也增加了用户使用的复杂度。

第二,由于用户私钥是存储在客户端,并在客户端使用,因此用户可以随时生成数字签名;如果用户丢失数字证书,或因用户离职需要作废数字证书,服务端不能及时将用户私钥的客户端部分作废,并终止用户的签名操作。



技术实现要素:

针对现有技术的以上缺陷或改进需求,本发明提供了一种客户端和服务端协作生成数字签名的方法,其目的在于,解决现有方法中存在的用户必须随身携带硬件安全设备以完成数字签名操作所造成的用户使用复杂度高,以及客户端密钥不能被及时作废所导致用户的签名操作不能被终止的技术问题。

为实现上述目的,按照本发明的一个方面,提供了一种客户端和服务端协作生成数字签名方法,包括以下步骤:

(1)客户端接收来自外部应用的数字签名请求,并根据该数字签名请求发送签名原文m和用户个人识别信息ID给服务端,其中该用户个人识别信息ID可包括用户名,和/或客户端使用公钥密码算法对其自身生成的第一私钥d1进行处理后得到的第一公钥P1;

(2)服务端根据用户个人识别信息ID检测用户私钥是否已经被撤销,如果没有被撤销则进入步骤(3),否则过程结束;

(3)服务端根据接收到的用户个人识别信息ID在其自身中查找对应的第二私钥d2,利用该第二私钥d2对签名原文m进行数字签名,以生成第一签名信息S1,并将第一签名信息S1发送给客户端;

(4)客户端利用第一私钥d1对签名原文m和第一签名信息S1的组合进行数字签名,以生成完整签名信息S,并将完整签名信息S返回给外部应用。

优选地,生成第一签名信息S1的步骤如下:

(3-1)根据第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(d2,m)*G

或根据个人用户识别信息ID、第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(ID,d2,m)*G

其中H表示哈希算法,G为数字签名算法采用的椭圆曲线的基点,*表示椭圆曲线的点乘运算;

(3-2)将计算获得的椭圆曲线点P2赋值给第一签名信息S1。

优选地,步骤(4)中使用的数字签名算法是SM2椭圆曲线签名算法,且步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并获得椭圆曲线上的点k*G,其中n为使用的数字签名算法中椭圆曲线的阶;

(4-2)根据步骤(4-1)获得的椭圆曲线上的点k*G和第一签名信息获取椭圆曲线点P1=k*G+S1,其中+表示椭圆曲线的点加运算;

(4-3)根据步骤(4-2)中获得的椭圆曲线点P1和用户个人识别信息获取签名结果第一要素r=(e+x1)mod n,其中e=H(Z||m),Z表示用户个人识别信息的摘要值;x1表示P1点的横坐标,y1表示P1点的纵坐标;

(4-4)根据第一私钥d1、随机数k、步骤(4-3)得到的签名结果第一要素r获取签名结果第二要素s=((1+d1)-1·(k-r·d1))mod n;

(4-5)将步骤(4-3)获得的签名结果第一要素r和步骤(4-4)中获得的签名结果第二要素s合成,以得到完整签名信息S。

优选地,步骤(4)中使用的数字签名算法是SM2椭圆曲线签名算法,且步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并根据该随机数和第一签名信息获取椭圆曲线点P1=k*S1,其中n为使用的数字签名算法中椭圆曲线的阶;

(4-2)根据步骤(4-1)中获得的椭圆曲线点P1和用户个人识别信息获取签名结果第一要素r=(e+x1)mod n,其中e=H(Z||m),Z表示用户个人识别信息的摘要值;x1表示P1点的横坐标,y1表示P1点的纵坐标;

(4-3)根据第一私钥d1、随机数k、步骤(4-2)得到的签名结果第一要素r获取签名结果第二要素s=((1+d1)-1·(k-r·d1))mod n;

(4-4)将步骤(4-2)获得的签名结果第一要素r和步骤(4-3)中获得的签名结果第二要素s合成,以得到完整签名信息S。

优选地,步骤(4)中使用的数字签名算法是ECDSA椭圆曲线签名算法,则步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并获得椭圆曲线上的点k*G,其中n为使用的数字签名算法中椭圆曲线的阶;

(4-2)根据步骤(4-1)获得的椭圆曲线上的点k*G和第一签名信息获取椭圆曲线点P1=k*G+S1,其中+表示椭圆曲线的点加运算;

(4-3)根据步骤(4-2)中获得的椭圆曲线点P1获取签名结果第一要素r=x1mod n,其中x1表示P1点的横坐标;

(4-4)根据第一私钥d1、随机数k、步骤(4-3)得到的签名结果第一要素r获取签名结果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);

(4-5)将步骤(4-3)获得的签名结果第一要素r和步骤(4-4)中获得的签名结果第二要素s合成,以得到完整签名信息S。

优选地,步骤(4)中使用的数字签名算法是ECDSA椭圆曲线签名算法,则步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并根据该随机数和第一签名信息获取椭圆曲线点P1=k*S1,其中n为使用的数字签名算法中椭圆曲线的阶;

(4-2)根据步骤(4-1)中获得的椭圆曲线点P1获取签名结果第一要素r=x1mod n,其中x1表示P1点的横坐标;

(4-3)根据第一私钥d1、随机数k、步骤(4-2)得到的签名结果第一要素r获取签名结果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);

(4-4)将步骤(4-2)获得的签名结果第一要素r和步骤(4-3)中获得的签名结果第二要素s合成,以得到完整签名信息S。

优选地,生成第一签名信息S1的步骤如下:

(3-1)根据第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(d2,m)*G

或根据个人用户识别信息ID、第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(ID,d2,m)*G

(3-2)将计算获得的椭圆曲线点P2的横坐标x2赋值给第一签名信息S1。

优选地,步骤(4)中使用的数字签名算法是SM2椭圆曲线签名算法,且步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并根据该随机数获取椭圆曲线点P1=k*G,其中n为使用的数字签名算法中椭圆曲线的阶;

(4-2)根据用户个人识别信息、椭圆曲线上的点P1和第一签名信息S1获取签名结果第一要素r=(e+x1+S1)mod n;

(4-3)根据第一私钥d1、随机数k、步骤(4-2)得到的签名结果第一要素r获取签名结果第二要素s=((1+d1)-1·(k-r·d1))mod n;

(4-4)将步骤(4-2)获得的签名结果第一要素r和步骤(4-3)中获得的签名结果第二要素s合成,以得到完整签名信息S。

优选地,步骤(4)中使用的数字签名算法是ECDSA椭圆曲线签名算法,且步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并根据该随机数获取椭圆曲线点P1=k*G,其中n为使用的数字签名算法中椭圆曲线的阶;

(4-2)根据椭圆曲线上的点P1和第一签名信息S1获取签名结果第一要素r=(x1+S1)mod n;

(4-3)根据第一私钥d1、随机数k、步骤(4-2)得到的签名结果第一要素r获取签名结果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);

(4-4)将步骤(4-2)获得的签名结果第一要素r和步骤(4-3)中获得的签名结果第二要素s合成,以得到完整签名信息S。

按照本发明的另一方面,提供了一种客户端和服务端协作生成数字签名方法,包括以下步骤:

(1)客户端接收来自外部应用的数字签名请求,并根据该数字签名请求发送签名原文和用户个人识别信息给服务端,其中该用户个人识别信息可包括用户名,和/或客户端使用公钥密码算法对其自身生成的第一私钥d1进行处理后得到的第一公钥P1;

(2)服务端根据用户个人识别信息检测用户私钥是否已经被撤销,如果没有被撤销则进入步骤(3),否则过程结束;

(3)服务端根据接收到的用户个人识别信息在其自身中查找对应的第二私钥d2,利用该第二私钥d2对签名原文进行数字签名,以生成第一签名信息S1,并将第一签名信息S1发送给客户端;

(4)客户端利用第一私钥d1对签名原文进行数字签名,以生成第二签名信息S2,将第一签名信息S1和第二签名信息S2合成为完整签名信息S,并将完整签名信息S返回给外部应用。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:

1、本发明的方法由于采用了客户端和服务端同时生成和保存部分的用户私钥,且客户端和服务端中任意一方均不能单独合成完整的用户私钥,从而保证了用户私钥的安全性,即使用户私钥的客户端部分(即第一私钥)被黑客窃取,该黑客也根本无法恢复出完整的用户私钥;

2、本发明的方法由于采用了客户端和服务端同时参与签名运算流程,用户私钥的客户端部分(即第一私钥)和服务端部分(即第二私钥)均只在满足条件下参与签名运算,以生成部分签名,且客户端和服务端中任意一方均不能生成完整的签名,从而保证了用户签名的安全性。

3、本发明中的用户私钥是以分散的方式被保存,客户端不需要专门的硬件安全设备来保存用户私钥,从而能够保证完整的用户私钥的安全性,同时本发明用户的使用复杂度低。

4、本发明通过采用服务器参与签名运算,并在签名之前检测用户私钥有无被撤销,如果被撤销则终止签名,从而保证了用户私钥使用的时效性。

附图说明

图1是根据本发明第一实施方式的客户端和服务端协作生成数字签名的方法的流程图。

图2是根据本发明第二实施方式的客户端和服务端协作生成数字签名的方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

如图1所示,本发明客户端和服务端协作生成数字签名方法包括以下步骤:

(1)客户端接收来自外部应用的数字签名请求,并根据该数字签名请求发送签名原文和用户个人识别信息给服务端;具体而言,该用户个人识别信息可包括用户名,和/或客户端使用公钥密码算法对其自身生成的第一私钥d1进行处理后得到的第一公钥P1,其中第一私钥d1可以是客户端随机生成并保存,或者客户端通过执行密钥派生函数生成;外部应用可以是外部的app应用、web应用、各种进程等;

(2)服务端根据用户个人识别信息检测用户私钥是否已经被撤销,如果没有被撤销则进入步骤(3),否则过程结束;具体而言,服务端查看该个人识别信息中对应的标识信息,该标识信息能够标识用户私钥是否已经被撤销;

(3)服务端根据接收到的用户个人识别信息在其自身中查找对应的第二私钥d2,利用该第二私钥d2对签名原文进行数字签名,以生成第一签名信息S1,并将第一签名信息S1发送给客户端;其中该第二私钥d2是用户首次在服务端注册阶段,由服务端随机生成并保存,或者服务端通过执行密钥派生函数生成;

具体而言,根据本发明的一种实施方式,生成第一签名信息S1的步骤如下:

首先,根据第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(d2,m)*G

或根据个人用户识别信息ID、第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(ID,d2,m)*G

其中H表示哈希算法,G为数字签名算法采用的椭圆曲线的基点,*表示椭圆曲线的点乘运算;

其次,将计算获得的椭圆曲线点P2赋值给第一签名信息S1。

根据本发明的另一种实施方式,生成第一签名信息S1的步骤如下:

首先,根据第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(d2,m)*G

或根据个人用户识别信息ID、第二私钥d2和签名原文m并使用以下公式获得椭圆曲线点P2:

P2=H(ID,d2,m)*G

其次,将计算获得的椭圆曲线点P2的横坐标x2赋值给第一签名信息S1。

(4)客户端利用第一私钥d1对签名原文和第一签名信息S1的组合进行数字签名,以生成完整签名信息S,并将完整签名信息S返回给外部应用。

作为本发明的进一步改进,本发明的方法还可以包括在上述步骤(1)之后,步骤(2)之前的以下步骤:

(1’)服务端根据用户个人识别信息对用户进行身份验证;身份验证包括要求用户提供PIN码信息、语音信息、指纹信息、人脸信息、虹膜信息中任意一种或几种的组合,然后对该信息进行验证。

作为本发明的进一步改进,本发明的方法还可以包括在上述步骤(3)之后,步骤(4)之前的以下步骤:

(3’)客户端根据用户个人识别信息对用户进行身份验证,身份验证包括要求用户提供PIN码信息、语音信息、指纹信息、人脸信息、虹膜信息中任意一种或几种的组合,然后对该信息进行验证。

作为本发明的另一种实施方式,如图2所示,上述步骤(4)也可被替换为:

(4’)客户端利用第一私钥d1对签名原文进行数字签名,以生成第二签名信息S2,将第一签名信息S1和第二签名信息S2合成为完整签名信息S,并将完整签名信息S返回给外部应用。

在本发明一个实施方式中,若步骤(4)中使用的数字签名算法是SM2椭圆曲线签名算法,则上述步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],其中n为使用的数字签名算法中椭圆曲线的阶,并获得椭圆曲线上的点k*G;

(4-2)根据步骤(4-1)获得的椭圆曲线上的点k*G和第一签名信息获取椭圆曲线点P1=k*G+S1,其中+表示椭圆曲线的点加运算;

(4-3)根据步骤(4-2)中获得的椭圆曲线点P1和用户个人识别信息获取签名结果第一要素r=(e+x1)mod n,其中e=H(Z||m),H表示哈希运算,Z表示用户个人识别信息的摘要值;x1表示P1点的横坐标,y1表示P1点的纵坐标;

(4-4)根据第一私钥d1、随机数k、步骤(4-3)得到的签名结果第一要素r获取签名结果第二要素s=((1+d1)-1·(k-r·d1))mod n;

(4-5)将步骤(4-3)获得的签名结果第一要素r和步骤(4-4)中获得的签名结果第二要素s合成,以得到完整签名信息S。

作为本发明的进一步改进,上述步骤(4-1)和步骤(4-2)也可被替换为下述步骤:

(4-1’)生成随机数k∈[1,n-1],并根据该随机数和第一签名信息获取椭圆曲线点P1=k*S1;

作为本发明的进一步改进,上述步骤(4-1)、步骤(4-2)和步骤(4-3)也可被替换为下述步骤:

(4-1”)生成随机数k∈[1,n-1],并根据该随机数获取椭圆曲线点P1=k*G;

(4-2”)根据用户个人识别信息、椭圆曲线上的点P1和第一签名信息S1获取签名结果第一要素r=(e+x1+S1)mod n;

在本发明一个实施方式中,若步骤(4)中使用的数字签名算法是ECDSA椭圆曲线签名算法,则上述步骤(4)具体包括以下子步骤:

(4-1)生成随机数k∈[1,n-1],并获得椭圆曲线上的点k*G;

(4-2)根据步骤(4-1)获得的椭圆曲线上的点k*G和第一签名信息获取椭圆曲线点P1=k*G+S1,其中+表示椭圆曲线的点加运算;

(4-3)根据步骤(4-2)中获得的椭圆曲线点P1获取签名结果第一要素r=x1mod n,其中x1表示P1点的横坐标;

(4-4)根据第一私钥d1、随机数k、步骤(4-3)得到的签名结果第一要素r获取签名结果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);

(4-5)将步骤(4-3)获得的签名结果第一要素r和步骤(4-4)中获得的签名结果第二要素s合成,以得到完整签名信息S。

作为本发明的进一步改进,上述步骤(4-1)和步骤(4-2)也可被替换为下述步骤:

(4-1’)生成随机数k∈[1,n-1],并根据该随机数和第一签名信息获取椭圆曲线点P1=k*S1;

作为本发明的进一步改进,上述步骤(4-1)、步骤(4-2)和步骤(4-3)也可被替换为下述步骤:

(4-1”)生成随机数k∈[1,n-1],并根据该随机数获取椭圆曲线点P1=k*G;

(4-2”)根据椭圆曲线上的点P1和第一签名信息S1获取签名结果第一要素r=(x1+S1)mod n。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1