RSA模数生成方法、RSA密钥生成方法、计算机设备及介质与流程

文档序号:14124401阅读:928来源:国知局
RSA模数生成方法、RSA密钥生成方法、计算机设备及介质与流程

本发明涉及密码学技术领域,特别是涉及一种rsa模数生成方法、rsa密钥生成方法、计算机设备和计算机存储介质。



背景技术:

rsa分布式密钥托管通过在托管平台和客户端分别存储rsa私钥的分量,并要求客户端与托管平台协同执行rsa签名生成操作,以防止密钥托管机构滥用权力。为了确保分布式托管的私钥安全,在生成私钥的阶段就要求两个或多个参与方通过执行安全多方计算协议来产生私钥分量,而不能有任何一个参与方获得完整的rsa私钥。

rsa私钥的生成,需要获得一个模数n,该模数n必须是两个素数p和q的乘积。如何通过安全计算协议来获得满足条件的n成为分布式生成rsa私钥的关键技术。而目前的计算模数n的方案,需要消耗大量运算资源,导致效率低下。根据实际测试,对于1024比特的rsa模数平均需要1小时才能计算出一组rsa私钥。而对于2048比特的rsa模数,大约需要1~2天才能够计算出一组rsa私钥,显然并不具有工程实用价值。



技术实现要素:

基于此,有必要提供一种rsa模数生成方法、rsa密钥生成方法、计算机设备和计算机存储介质。

一种rsa模数生成方法,所述方法包括:

当前参与方产生第一长度随机数,第二长度随机数;

当前参与方与对端参与方执行乘法转加法协议处理,当前参与方获得第一加法参数和第二加法参数;第一加法参数与对端参与方持有的第三加法参数共享所述第一长度随机数与对端参与方产生的对端第一长度随机数的乘积,第二加法参数与对端参与方持有的第四加法参数共享第二长度随机数与对端参与方产生的对端第二长度随机数的乘积;

当前参与方根据第一长度随机数、第二长度随机数、所述第一加法参数、第二加法参数确定第一模数初始分量;

当前参与方基于第一模数初始分量和所述对端参与方持有的第二模数初始分量确定rsa模数。

一种rsa模数生成方法,所述方法包括:

第一参与方产生长度一第一随机数,长度二第一随机数;第二参与方产生长度一第二随机数和长度二第二随机数;

第一参与方基于所述长度一第一随机数与长度二第一随机数,所述第二参与方基于长度一第二随机数和长度二第二随机数,执行乘法转加法协议处理,第一参与方获得第一加法参数和第二加法参数,第二参与方获得第三加法参数和第四加法参数;第一加法参数与第三加法参数共享长度一第一随机数与长度一第二随机数的乘积,第二加法参数与第四加法参数共享长度二第一随机数与长度二第二随机数的乘积;

第一参与方根据长度一第一随机数、长度二第一随机数、所述第一加法参数、第二加法参数确定第一模数初始分量;所述第二参与方根据所述长度一第二随机数、长度二第二随机数、第三加法参数、第四加法参数确定第二模数初始分量;

第一参与方与第二参与方基于第一模数初始分量和第二模数初始分量确定rsa模数。

一种rsa私钥生成方法,包括步骤:

当前参与方获得素数一当前参与方分量、素数二当前参与方分量;其中素数一当前参与方分量与对端参与方获得的素数一对端参与方分量共享素数一,素数二当前参与方分量与对端参与方获得的素数二对端参与方分量共享素数二;

当前参与方根据素数一当前参与方分量、素数二当前参与方分量与对端参与方共享欧拉函数值,获得第一欧拉函数分量;

当前参与方基于选择的第一选择随机数、第二选择随机数,与对端参与方执行安全点积协议,获得第三点积协议分量;

当前参与方基于第三点积协议分量、第一选择随机数、第一欧拉函数分量、第二选择随机数以及公开指数,确定第一共享参数分量;

当前参与方与对端参与方交换第一共享参数分量和对端参与方确定的第二共享参数分量后,确定第一整数和第二整数,其中,第一共享参数分量与第二共享参数分量的和值与第一整数的第一乘积,与第二整数与所述公开指数的第二乘积的和值为预设整数;

当前参与方根据第一整数和第二整数,确定第一rsa私钥分量。

一种rsa私钥生成方法,包括步骤:

第一参与方获得素数一第一分量、素数二第一分量,第二参与方获得素数一第二分量、素数二第二分量,素数一第一分量与素数一第二分量共享素数一,素数二第一分量与素数二第二分量共享素数二;

第一参与方与第二参与方根据素数一第一分量、素数二第一分量素数一第二分量、素数二第二分量共享欧拉函数值,第一参与方获得第一欧拉函数分量,第二参与方获得第二欧拉函数分量;

基于第一参与方选择的第一选择随机数、第二选择随机数,以及第二参与方选择的第三选择随机数、第四选择随机数,第一参与方与第二参与方执行安全点积协议,第一参与方获得第三点积协议分量,第二参与方获得第四点积协议分量;

第一参与方基于第三点积协议分量、第一选择随机数、第一欧拉函数分量、第二选择随机数以及公开指数,确定第一共享参数分量;第二参与方基于第三点积协议分量、第三选择随机数、第二欧拉函数分量、第四选择随机数以及所述公开指数,确定第二共享参数分量;

第一参与方与第二参与方交换第一共享参数分量和第二共享参数分量后,确定第一整数和第二整数,其中,第一共享参数分量与第二共享参数分量的和值与第一整数的第一乘积,与第二整数与公开指数的第二乘积的和值为预设整数;

第一参与方根据第一整数、第二选择随机数和第二整数,确定第一rsa私钥分量,第二参与方根据第一整数、第四选择随机数,确定第二rsa私钥分量。

一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述方法的步骤。

一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述方法的步骤。

根据如上所述的实施例的方案,通过引入较短的随机数,然后基于较短的随机数进行处理得到多个较长的随机数,通过引入随机数的方式来完成rsa模数和rsa密钥,一定程度上兼顾了客户端计算资源不足的缺陷,也在满足一定安全性的情况下提高了整体效率。

附图说明

图1为一个本实施例方案的应用环境的示意图;

图2为一个实施例中的rsa模数生成方法的流程示意图;

图3为另一个实施例中的rsa模数生成方法的流程示意图;

图4为一个具体示例中的生成rsa模数的交互流程示意图;

图5为一个实施例的rsa密钥生成方法的流程示意图;

图6为另一个实施例的rsa密钥生成方法的流程示意图;

图7为一个具体示例中的生成rsa私钥的交互流程示意图;

图8是一个实施例中的计算机设备的内部结构示意图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

图1为一个实施例中的rsa模数和rsa密钥生成方法的应用环境图。参照图1,该方法涉及两个设备,即设备101和设备102,在一些实施例中,该设备102也可以是服务器,从而实现终端与服务器之间协同生成rsa模数或rsa密钥。设备101、设备102具体可以是台式终端、移动终端以及其他的可以或者用以协同生成rsa模数或rsa密钥的设备,在设备102为服务器时,其可以是独立的服务器或者是多个服务器组成的服务器集群。

图2示出了一个实施例中的rsa模数生成方法的示意图,该实施例是以其中图1中的一个设备(设备101或设备102)的处理过程为例进行说明。

如图2所示,该实施例中的rsa模数生成方法包括步骤s201至步骤s204。

步骤s201:当前参与方产生第一长度随机数、第二长度随机数。

当前参与方产生第一长度随机数、第二长度随机数时,可以采用任何可能的方式来缠上。在一个实施例中,当前参与方可以基于与对端参与方约定的共同参数来产生第一长度随机数、第二长度随机数。其中,该共同参数可以基于实际技术需要采用不同的方式进行约定,一个具体示例中,该共同参数可以为k,确定共同参数后,还可以计算共同参数个最小的素数的乘积,如

在产生第一长度随机数和第二长度随机数时,可以采用任何可能的方式进行,一个具体示例中,将第一长度记为n比特,第二长度记为m比特,则可以产生n比特长度的随机数(第一长度随机数)p≡0mod(4m),产生m比特长度的随机数(第二长度随机数)q≡3mod4。在其他的实施例中,也可以采用其他的方式来基于共同参数产生第一长度随机数和第二长度随机数。

步骤s201:当前参与方与对端参与方执行乘法转加法协议处理,当前参与方获得第一加法参数和第二加法参数。

乘法转加法协议处理的过程可以采用任何可能的方式进行,在一个具体示例中,可以执行两次mult-to-sum协议(mult-to-sum协议可以基于混合乘法同态加密或者茫然传输ot协议实现)来完成乘法转加法协议处理。

在其中一个示例中,可以基于下述原则来完成该乘法转加法协议处理过程:第一加法参数与对端参与方持有的第三加法参数共享所述第一长度随机数与对端参与方产生的对端第一长度随机数的乘积,第二加法参数与对端参与方持有的第四加法参数共享第二长度随机数与对端参与方产生的对端第二长度随机数的乘积。如第一加法参数与对端参与方持有的第三加法参数的和,为第一长度随机数与对端参与方产生的对端第一长度随机数的乘积,第二加法参数与对端参与方持有的第四加法参数的和,为第二长度随机数与对端参与方产生的对端第二长度随机数的乘积。

步骤s203:当前参与方根据第一长度随机数、第二长度随机数、第一加法参数、第二加法参数确定第一模数初始分量。

当前参与方在确定第一模数初始分量时,一个示例中可以采用下述方式进行。将第一长度随机数与第二长度随机数的乘积,与第一加法参数、第二加法参数求和,确定第一模数初始分量。

步骤s204:当前参与方基于第一模数初始分量和对端参与方持有的第二模数初始分量确定rsa模数。

当前参与方基于第一模数初始分量和对端参与方持有的第二模数初始分量确定rsa模数时,基于不同的考虑因素,可以采用不同的方式进行。

在其中一个具体示例中,当前参与方基于第一模数初始分量和对端参与方持有的第二模数初始分量确定rsa模数的方式可以包括:

当前参与方与对端参与方交换第一模数初始分量和对端参与方持有的第二模数初始分量;

当前参与方根据第一模数初始分量和第二模数初始分量确定rsa模数。具体地,该rsa模数可以是第一模数初始分量与第二模数初始分量之和。

在另一个具体示例中,还可以对上述方式进行扩展,即当前参与方基于第一模数初始分量和对端参与方持有的第二模数初始分量确定rsa模数,可以采用下述方式进行:

当前参与方产生第三长度随机数,使得第二长度随机数与第三长度随机数之和为奇数、模4余3的奇数、素数或者blum素数(模4余3的素数)。从而,通过第三长度随机数使得第二长度随机数与第三长度随机数之和为奇数、模4余3的奇数、素数或者blum素数,使得第二长度随机数、第三长度随机数以及所述对端参与方产生的对端第一长度随机数之和为素数的概率大大增加,进一步提高了处理效率。产生第三长度随机数时可以采用任何可能的方式进行,一个具体示例中,将第二长度随机数记为qa、第三长度记为q比特,则可以产生q比特长度的随机数(第三长度随机数)x≡0mod(4m);或者产生q比特长度的第三长度随机数x,使得qa+x=3mod4。在其他实施例中,也可以采用其他的方式产生该第三长度随机数,只要第二长度随机数与第三长度随机数之和为奇数、模4余3的奇数、素数或者blum素数即可。

当前参与方以第二长度随机数、第三长度随机数为输入参数,与对端参与方执行安全点积协议,获得第一点积协议分量;具体的执行安全点积协议的过程可以采用任何可能的方式进行;

当前参与方根据第一模数初始分量、第一长度随机数、第三长度随机数以及第一点积协议分量确定第一中间分量;一个具体示例中,该第一中间分量具体可以是第一长度随机数、第三长度随机数的乘积与第一模数初始分量和第一点积协议分量的和值;

当前参与方与对端参与方交换第一中间分量和所述对端参与方确定的第二中间分量,并根据第一中间分量和第二中间分量确定rsa模数。具体地,该rsa模数可以是第一中间分量与第二中间分量之和。

根据如上所述的实施例的方案,当前参与方通过生成第三长度随机数,通过增量式产生rsa模式,通过合理选择增量部分第三长度随机数的长度,一方面可以保证最终得到的素数的隐私性,另一方面也兼顾了客户端资源不足的缺陷,在满足一定安全性的条件下提高了整体效率。

在一个实施例中,当前参与方以第二长度随机数、第三长度随机数为输入参数,与对端参与方执行安全点积协议,获得第一点积协议分量时,可以采用下述方式进行:

当前参与方随机生成随机参数;该随机参数可以是具体的随机数也可以是包含随机数的随机数向量,随机数的数目可以是1个或者多个,基于实际技术需求确定;

当前参与方以所述第二长度随机数、第三长度随机数以及所述随机参数构建当前参与方点积输入向量,与所述对端参与方执行安全点积协议,获得第一点积协议分量。

从而在执行点积协议的过程中,通过引入随机参数,并结合引入的随机参数构造点积输入向量,可以混淆交互过程中发送的数据,提高了对输入参数的隐私保护,提高安全性。可以理解,在执行安全点积协议的过程中,引入的随机参数,在获得的最终的点积协议输出结果(如第一点积协议分量)之前,会进行消除,以确保输出结果的准确性,具体的消除方式可以采用任何可能的方式。

在一个具体示例中,在上述确定rsa模数之后,还可以判断rsa模数是否满足模数试除条件,在rsa模数满足模数试除条件时,放弃该rsa模数。从而过滤掉不满足要求的rsa模数,避免浪费时间和消耗资源。该模数试除条件可以结合实际技术需要做不同的设置。在一个实施例中,可以是该模数试除条件可以设置为rsa模数包含小素数因子,从而进行小素数试除,具体可以是在rsa模数包含小于预设数值阈值的素数因子时,放弃该rsa模数。该预设数值阈值可以结合实际技术需要进行设定,例如可以设定为2000。

在另一个具体示例中,在上述确定rsa模数之后,或者在rsa模数不满足模数试除条件(如不包含小于预设数值阈值的素数因子)时,可以进一步进行素性测试。

在一个实现方式中,当前参与方可以作为素性测试的被发起方,具体可以采用下述方式进行:

当前参与方接收所述对端参与方发送的对端参与方验证参数,并根据rsa模数、第一长度随机数、第二长度随机数以及第三长度随机数,确定当前参与方验证参数;

当前参与方在当前参与方验证参数与对端参与方验证参数满足预定关系时,将所述rsa模数作为最终确定的rsa模数。

另一方面,若当前参与方验证参数与对端参与方验证参数不满足预定关系,则可以跳转到产生第三长度随机数的过程,重新生成新的rsa模数。

在另一个实现方式中,当前参与方也可以作为素性测试的发起方,具体可以采用下述方式进行:

当前参与方基于第二长度随机数、第三长度随机数、第一长度随机数以及所述rsa模数,确定当前参与方验证参数,并将该当前参与方验证参数发送给对端参与方;所述当前参与方验证参数用于指示所述对端参与方确定对端参与方验证参数后,在所述当前参与方验证参数与所述对端参与方验证参数满足预定关系时,将所述rsa模数作为最终确定的rsa模数。

图3示出了另一个实施例中的rsa模数生成方法的流程示意图,该实施例是以rsa模数生成过程中涉及的两个参与方的处理过程为例进行说明。如图3所示,该实施例中的rsa模数生成方法包括如下步骤s301至步骤s304。

步骤s301:第一参与方产生第一长度随机数(为了便于与第二参与方产生的第一长度随机数相区分,本实施例以及下述各实施例中称之为长度一第一随机数)、第二长度随机数(为了便于区分,本实施例以及下述各实施例中称之为长度二第一随机数);第二参与方产生第一长度随机数(为了便于区分,本实施例以及下述各实施例中称之为长度一第二随机数)和第二长度随机数(为了便于区分,本实施例以及下述各实施例中称之为长度二第二随机数)。

在产生长度一第一随机数、长度二第一随机数、长度一第二随机数和长度二第二随机数时,可以采用任何可能的方式进行,第一参与方可以基于与第二参与方约定的共同参数产生长度一第一随机数和长度二第一随机数,第二参与方可以基于所述共同参数产生长度一第二随机数和长度二第二随机数。其中,该共同参数可以基于实际技术需要采用不同的方式进行约定,一个具体示例中,该共同参数可以为k,确定共同参数后,还可以计算共同参数个最小的素数的乘积,如

一个具体示例中,将第一长度记为n比特,第二长度记为m比特,则第一参与方产生n比特长度的长度一第一随机数pa≡0mod(4m),产生m比特长度的长度二第一随机数qa≡3mod4。第二参与方产生n比特长度的长度一第二随机数qb≡0mod(4m),产生m比特长度的长度二第二随机数pb≡3mod4。

步骤s302:第一参与方与第二参与方执行乘法转加法协议处理,第一参与方获得第一加法参数和第二加法参数,第二参与方获得第三加法参数和第四加法参数。

乘法转加法协议处理的过程可以采用任何可能的方式进行,在一个具体示例中,可以执行两次mult-to-sum协议(mult-to-sum协议可以基于混合乘法同态加密或者茫然传输ot协议实现)来完成乘法转加法协议处理。

在其中一个示例中,可以基于下述原则来完成该乘法转加法协议处理过程:第一加法参数与第三加法参数共享长度一第一随机数与长度一第二随机数的乘积,第二加法参数与第四加法参数共享长度二第一随机数与长度二第二随机数的乘积。如第一加法参数与第三加法参数之和,为长度一第一随机数与长度一第二随机数的乘积,第二加法参数与第四加法参数的和,为长度二第一随机数与长度二第二随机数的乘积。

步骤s303:第一参与方根据长度一第一随机数、长度二第一随机数、第一加法参数、第二加法参数确定第一模数初始分量;第二参与方根据长度一第二随机数、长度二第二随机数、第三加法参数、第四加法参数确定第二模数初始分量。

第一参与方在确定第一模数初始分量时,一个示例中可以采用下述方式进行:将长度一第一随机数与长度二第一随机数的乘积,与第一加法参数、第二加法参数求和,确定第一模数初始分量。

第二参与方在确定第二模数初始分量时,一个示例中可以采用下述方式进行:将长度一第二随机数与长度二第二随机数的乘积,与第三加法参数、第四加法参数求和,确定第二模数初始分量。

步骤s304:第一参与方与第二参与方基于第一模数初始分量和第二模数初始分量确定rsa模数。

基于第一模数初始分量和对端参与方持有的第二模数初始分量确定rsa模数时,基于不同的考虑因素,可以采用不同的方式进行。

在其中一个具体示例中,第一参与方与第二参与方基于第一模数初始分量和第二模数初始分量确定rsa模数的方式可以包括:

第一参与方与第二参与方交换第一模数初始分量和第二模数初始分量;

第一参与方或者所述第二参与方根据所述第一模数初始分量和第二模数初始分量确定rsa模数。具体地,该rsa模数可以是第一模数初始分量与第二模数初始分量之和。

在另一个具体示例中,还可以对上述方式进行扩展,即第一参与方与第二参与方基于第一模数初始分量和第二模数初始分量确定rsa模数的方式可以包括:

第一参与方产生第三长度随机数(为便于区分,本实施例及下述各示例中称之为长度三第一随机数),使得长度二第一随机数与长度三第一随机数之和为奇数、模4余3的奇数、素数或者blum素数。从而,通过长度三第一随机数使得长度二第一随机数与长度三第一随机数之和之和为奇数、模4余3的奇数、素数或者blum素数,使得长度二第一随机数、长度三第一随机数以及第二参与方产生的长度一第二随机数之和为素数的概率大大增加,进一步提高了处理效率。一个具体示例中,将第三长度记为q比特,则可以产生q比特长度的长度三第一随机数x≡0mod(4m);或者产生q比特长度的长度三第一随机数x,使得qa+x=3mod4。在其他实施例中,也可以采用其他的方式产生该长度三第一随机数,只要长度二第一随机数与长度三第一随机数之和为奇数、模4余3的奇数、素数或者blum素数即可。

第二参与方产生第三长度随机数(为便于区分,本实施例及下述各示例中称之为长度三第二随机数),使得长度二第二随机数与长度三第二随机数之和为奇数、模4余3的奇数、素数或者blum素数。从而,通过长度三第二随机数使得长度二第二随机数与长度三第二随机数之和之和为奇数、模4余3的奇数、素数或者blum素数,使得长度二第二随机数、长度三第二随机数以及第一参与方产生的长度一第一随机数之和为素数的概率大大增加,进一步提高了处理效率。一个具体示例中,将第三长度记为q比特,则可以产生q比特长度的长度三第二随机数y≡0mod(4m);或者产生q比特长度的长度三第二随机数y,使得qb+y=3mod4。在其他实施例中,也可以采用其他的方式产生该长度三第二随机数,只要长度二第二随机数与长度三第二随机数之和为奇数、模4余3的奇数、素数或者blum素数即可。

第一参与方以长度二第一随机数、长度三第一随机数为输入参数,第二参与方以长度二第二随机数、长度三第二随机数为输入参数,第一参与方与第二参与方执行安全点积协议,第一参与方获得第一点积协议分量,第二参与方获得第二点积协议分量;具体的执行安全点积协议的过程可以采用任何可能的方式进行。

第一参与方根据第一模数初始分量、长度一第一随机数、长度三第一随机数以及第一点积协议分量确定第一中间分量;第二参与方根据第二模数初始分量、长度一第二随机数、长度三第二随机数以及第二点积协议分量确定第二中间分量;一个具体示例中,该第一中间分量具体可以是长度一第一随机数、长度三第一随机数的乘积与第一模数初始分量和第一点积协议分量的和值;该第二中间分量具体可以是长度一第二随机数、长度三第二随机数的乘积与第二模数初始分量和第二点积协议分量的和值;

第一参与方与第二参与方交换第一中间分量和第二中间分量,并根据第一中间分量和第二中间分量确定rsa模数。具体地,该rsa模数可以是第一中间分量与第二中间分量之和。

在一个实施例中,第一参与方以长度二第一随机数、长度三第一随机数为输入参数,第二参与方以长度二第二随机数、长度三第二随机数为输入参数,第一参与方与第二参与方执行安全点积协议,第一参与方获得第一点积协议分量,第二参与方获得第二点积协议分量时,可以采用下述方式进行:

第一参与方随机生成第一随机参数,第二参与方随机生成第二随机参数;该第一随机参数、第二随机参数可以是具体的随机数也可以是包含随机数的随机数向量,随机数的数目可以是1个或者多个,基于实际技术需求确定;

第一参与方以所述长度二第一随机数、所述长度三第一随机数以及所述第一随机参数构建第一参与方点积输入向量,第二参与方以所述长度二第二随机数、长度三第二随机数以及所述第二随机参数构建第二参与方点积输入向量;

第一参与方基于第一参与方点积输入向量、第二参与方基于第二参与方点积输入向量,第一参与方与第二参与方执行安全点积协议,第一参与方获得第一点积协议分量,第二参与方获得第二点积协议分量。

从而在执行点积协议的过程中,通过引入随机参数,并结合引入的随机参数构造点积输入向量,可以混淆交互过程中发送的数据,提高了对输入参数的隐私保护,提高安全性。可以理解,在执行安全点积协议的过程中,引入的随机参数,在获得的最终的点积协议输出结果(如第一点积协议分量、第二点积协议分量)之前,会进行消除,以确保输出结果的准确性,具体的消除方式可以采用任何可能的方式。

在一个具体示例中,在上述确定rsa模数之后,还可以判断rsa模数是否满足模数试除条件,在rsa模数满足模数试除条件时,放弃该rsa模数。从而过滤掉不满足要求的rsa模数,避免浪费时间和消耗资源。该模数试除条件可以结合实际技术需要做不同的设置。在一个实施例中,可以是该模数试除条件可以设置为rsa模数包含小素数因子,从而进行小素数试除。具体可以是第一参与方或第二参与方在rsa模数包含小于预设数值阈值的素数因子时,放弃该rsa模数。该预设数值阈值可以结合实际技术需要进行设定,例如可设定为2000。

在另一个具体示例中,在上述确定rsa模数之后,或者在rsa模数不包含小于预设数值阈值的素数因子时,可以进一步进行素性测试。在一个实现方式中,以第二参与方作为素性测试的发起方,第一参与方作为素性测试的被发起方,具体可以采用下述方式进行:

第二参与方基于长度二第二随机数、长度三第二随机数、长度一第二随机数以及rsa模数,确定第二验证参数,并将该第二验证参数发送给第一参与方;

第一参与方接收第二验证参数,并根据rsa模数、长度一第一随机数、长度二第一随机数以及长度三第一随机数,确定第一验证参数;

第一参与方在第一验证参数与第二验证参数满足预定关系时,将所述rsa模数作为最终确定的rsa模数。该预定关系可以结合具体技术需要进行设定。

若第一验证参数与第二验证参数不满足预定关系,则可以跳转到产生长度三第一随机数、长度三第二随机数的步骤,重新生成新的rsa模数。

可以理解,在另一个实现方式中,若以第一参与方作为素性测试的发起方,第二参与方作为素性测试的被发起方,具体可以采用下述方式进行:

第一参与方基于长度一第一随机数、长度二第一随机数、长度三第一随机数以及rsa模数,确定第一验证参数,并将该第一验证参数发送给第二参与方;

第二参与方接收第二验证参数,并根据长度二第二随机数、长度三第二随机数、长度一第二随机数以及rsa模数,确定第二验证参数,确定第二验证参数;

第二参与方在所述第一验证参数与所述第二验证参数满足预定关系时,将所述rsa模数作为最终确定的rsa模数。

基于如上所述的rsa模数生成方法,以下结合其中一个具体示例进行举例说明,图4对应示出了该具体示例中的rsa模数的交互流程的示意图。在该具体示例中,以第一参与方为alice、第二参与方为bob、第一长度记为n、第二长度记为m、第三长度记为q且基于约定的共同参数生成随机数为例进行说明。

alice和bob约定共同参数k,并计算k个最小的素数的乘积结果:

随后,alice产生n比特长度的随机数(长度一第一随机数)pa≡0mod(4m),产生m比特长度的随机数(长度二第一随机数)qa≡3mod4。

bob产生n比特长度的随机数(长度一第二随机数)qb≡0mod(4m),产生m比特长度的随机数(长度二第二随机数)pb≡3mod4。在一个具体示例中,该第一长度可以为1024比特,第二长度可以为128比特。

随后,alice与bob执行2次mult-to-sum协议(可以基于混合乘法同态加密或者茫然传输ot协议实现)的处理,alice获得第一加法参数a1、第二加法参数a2,bob获得第三加法参数b1、第四加法参数b2,满足如下关系:

第一加法参数与第三加法参数的和为长度一第一随机数pa与长度一第二随机数的乘积,即a1+b1=paqb;

第二加法参数与第四加法参数的和为长度二第一随机数qa与长度二第二随机数的乘积,即a2+b2=pbqa。

随后,alice根据长度一第一随机数pa、长度二第一随机数qa、第一加法参数a1、第二加法参数a2确定第一模数初始分量na,该第一模数初始分量na具体可以是将长度一第一随机数pa与长度二第一随机数qa的乘积,与第一加法参数a1、第二加法参数a2求和得到,即na=paqa+a1+a2。

bob根据长度一第二随机数qb、长度二第二随机数pb、第三加法参数b1、第四加法参数确定第二模数初始分量nb,该第二模数初始分量nb可以通过将长度一第二随机数qb与长度二第二随机数pb的乘积,与第三加法参数b1、第四加法参数b2求和得到,即nb=pbqb+b1+b2。

随后,alice产生第三长度的随机数(长度三第一随机数)x≡0mod4,使得长度二第一随机数qa、长度三第一随机数x之和为素数;

对应地,bob产生第三长度的随机数(长度三第二随机数)y≡0mod4,使得长度二第二随机数pb、长度三第二随机数y之和为素数。在一个具体示例中,该第三长度可以为128比特。

从而,alice与bob双方可以约定:

n′=[pa+(pb+y)][(qa+x)+qb]=(na+xpa)+(nb+yqb)+(xpb+yqa+xy)

在上述约定的公式中,alice可独立计算第一项na+xpa,bob可独立计算第二项nb+yqb,第三项xpb+yqa+xy可以看作两个3元素向量的点积结果。

因此,alice与bob可以执行安全点积协议,其中alice输入向量bob输入向量在安全点积协议执行结束之后,alice获得第一点积协议分量sa,bob获得第二点积协议分量sb,二者满足:sa+sb=xpb+yqa+xy。

具体的执行安全点积协议的过程可以采用任何可能的方式进行,一个实施例中的安全点积协议的过程可以是如下所述:

第一参与方alice获取第一输入向量,并根据第一输入向量构造第一n阶矩阵和第二n阶矩阵;第二参与方bob获取第二输入向量,并根据第二输入向量构造第三n阶矩阵和第四n阶矩阵;其中,该第一输入向量、第二输入向量可以是仅包含输入参数,也可以包含输入参数和随机生成的随机参数,以混淆交互过程中发送的数据,提高对输入参数的隐私保护,提高安全性;

alice与bob进行矩阵共享交互处理,alice获得第一参与方共享矩阵分量,bob获得第二参与方共享矩阵分量,第一参与方共享矩阵分量与第二参与方共享矩阵分量共享点积协议共享矩阵,点积协议共享矩阵为第一n阶矩阵与第三n阶矩阵的乘积和所述第二n阶矩阵与所述第四n阶矩阵的乘积之和;

alice将所述第一参与方共享矩阵分量的指定主对角线元素的元素值确定为所述第一参与方的点积协议分量结果;alice将所述第二参与方共享矩阵分量的所述指定主对角线元素的元素值确定为所述第二参与方的点积协议分量结果。

以下结合其中一个具体示例进行详细举例说明。可以理解的是,在其他的示例中,也可以采用其他的方式完成该点积协议处理过程。

在该具体示例中,是由alice输入3组向量:bob输入3组向量:最终输出3组点积计算结果的共享,使得alice获得sa[i],bob获得sb[i],且满足关系。sa[i]+sb[i]=xipb+yiqa+xiyi。

具体的点积协议处理过程可以是如下所述。

alice产生一个随机的四阶可逆矩阵p,并计算其逆矩阵p-1;bob产生一个随机的四阶可逆矩阵q,并计算其逆矩阵q-1。alice选择随机的四阶矩阵d1,bob选择随机的四阶矩阵d2。

alice产生随机数qa[0]~qa[5]、x1[0]、x1[1]、x2[0]、x2[1]、x3[0]、x3[1],这些随机数满足关系:qa[0]+qa[1]=qa、qa[2]+qa[3]=qa、qa[4]+qa[5]=qa、x1[0]+x1[1]=x1、x2[0]+x2[1]=x2、x3[0]+x3[1]=x3。

bob产生随机数pb[0]~pb[5]、y1[0]、y1[1]、y2[0]、y2[1]、y3[0]、y3[1],这些随机数满足关系:pb[0]+pb[1]=pb、pb[2]+pb[3]=pb、pb[4]+pb[5]=pb、y1[0]+y1[1]=y1、y2[0]+y2[1]=y2、y3[0]+y3[1]=y3。

alice产生随机数μ1~μ8,然后构造矩阵第一矩阵a1、第二矩阵a2:

bob产生随机数λ1~λ8,然后构造矩阵第三矩阵b1、第四矩阵b2:

然后可以开始执行第一轮交互过程。

alice根据可逆矩阵p、随机矩阵d1以及第一矩阵a1确定第一矩阵中间分量,该第一矩阵中间分量包括:可逆矩阵p与第一矩阵a1的第一乘积结果p×a1,以及可逆矩阵p与随机矩阵d1的第二乘积结果p×d1,然后将第一矩阵中间分量p×a1与p×d1发送给bob。

bob接收到第一矩阵中间分量后,根据第一矩阵中间分量(p×a1与p×d1)以及第三矩阵b1确定第二交互结果分量xb,具体可以采用下式进行计算:

xb=(p×a1)×b1+(p×d1)=p×(a1×b1+d1)。

在第二轮交互过程中,bob根据可逆矩阵q、随机矩阵d2以及第四矩阵b2确定第二矩阵中间分量,该第二矩阵中间分量包括:可逆矩阵q与第四二阶矩阵确定b2的第三乘积结果q×b2、以及第二可逆二阶矩阵q与随机矩阵d2的第四乘积结果q×d2。然后将第二矩阵中间分量q×b2与q×d2发送给alice。

alice接收到第二矩阵中间分量后,根据第二矩阵中间分量(q×b2与q×d2)以及第二矩阵a2确定第一交互结果分量xa,具体可以采用下式进行计算:

xa=(q×b2)×a2+(q×d2)=q×(b2×a2+d2)。

在完成上述两轮交互过程后,可以执行后续的点积计算的过程。可以理解,alice与bob交换第一矩阵中间分量和第二矩阵中间分量的过程可以同时进行,以减少交互次数,提高处理效率。

在点积计算的过程中,作如下取值设定:

alice取

bob取

alice和bob约定一组参数cij,它们是独立线性方程组的系数(譬如所有cij均为小素数),基于这些参数cij可构造系数矩阵

随后,alice根据系数矩阵c、第一交互结果分量xa、可逆矩阵p,确定第一初始矩阵分量u,具体可以采用下式进行计算:

u=(p-1)t+c×xa。

alice获得第一初始矩阵分量u后,将获得的第一初始矩阵分量u发送给bob。在一个具体示例中,alice也可以是将u的最右边一列全部置零后,发送给bob。本实施例以alice将u的最右边一列全部置零后发送给bob为例进行说明。

而bob则根据系数矩阵c、第二交互结果分量xb、可逆矩阵q,确定第二初始矩阵分量v,具体可以采用下式进行计算:

v=(q-1)t-ct×xb。

bob获得第二初始矩阵分量v后,将获得的第二初始矩阵分量v发送给alice。在一个具体示例中,bob也可以是将v最右边一列全部置零后,发送给alice。本实施例以bob将v最右边一列全部置零后发送给alice为例进行说明。可以理解,alice与bob交换第一初始矩阵分量u和第二初始矩阵分量v的过程可以同时进行,以减少交互次数,提高处理效率。

alice接收到bob发送的第二初始矩阵分量v后,根据第一交互结果分量xa、第二初始矩阵分量v和随机矩阵d1,确定alice的共享矩阵分量sa,具体可以采用下式进行计算:

bob接收到第一初始矩阵分量u后,根据第二交互结果分量xb、第一初始矩阵分量u和随机矩阵d2,确定bob的共享矩阵分量sb,具体可以采用下述方式进行计算:

基于alice确定的共享矩阵分量sa和bob确定的共享矩阵分量sb,可以确定,alice与bob共享了矩阵:

因此,alice和bob只需选取自己持有的共享矩阵分量的主对角线的3个元素,就分别是32组输入向量的点积运算结果的加法共享:

sa[i]+sb[i]=xipb+yiqa+xiyi。

该示例中示出的点积计算协议,基于矩阵乘法运算进行构造,可以实现高效计算点积结果。而且其通过将固定的输入变量pb和qa进行随机数分解,使得输入矩阵拥有一定数量的独立变量,整个方案可以满足独立变量个数多于公开方程数的安全条件。

可以理解的是,该示例中仅以其中一个点积协议的处理过程为例进行说明,在其他实施例中也可以采用其他的点积协议的方法来完成该点积协议处理,本实施例方案对此不做限定。

基于上述点积协议的处理过程之后,alice获得其点积协议分量sa(可以理解,该点积协议分量实际上是上述矩阵中的元素值sa[i]),bob获得其点积协议分量sb(可以理解,该点积协议分量实际上是上述矩阵中的元素值sb[i])。

然后,alice根据第一模数初始分量na、长度一第一随机数pa、长度三第一随机数x以及第一点积协议分量sa确定第一中间分量na′,第一中间分量na′的确定具体可采用下式计算:

n′a=na+xpa+sa。

bob根据第二模数初始分量nb、长度一第二随机数qb、长度三第二随机数y以及第二点积协议分量sb确定第二中间分量nb′,具体可采用下式进行计算:

n′b=nb+yqb+sb。

随后,alice与bob交换第一中间分量n′a、第二中间分量n′b,任何一方都可以基于第一中间分量n′a、第二中间分量n′b确定出rsa模数n′:

n′=n′a+n′b=(p+y)(q+x)。

其中p=pa+pb,q=qa+qb,alice和bob共享了素数p+y和q+x。

在获得上述rsa模数后,可进一步进行小素数试除,以过滤掉不满足要求的rsa模数。具体可以是alice或bob在rsa模数包含小于预设数值阈值的素数因子时,放弃该rsa模数。该预设数值阈值可以结合实际技术需要进行设定,例如可以设定为2000。

在上述确定rsa模数之后,或者在rsa模数不包含小于预设数值阈值的素数因子时,可以进一步进行biprimality素性测试。

alice计算:p′a=pa,q′a=qa+x;

bob计算:p′b=pb+y,q′b=qb;显然满足关系:p′a+p′b=p+y,q′a+q′b=q+x;p′a+p′b+q′a+q′b=p+q+x+y。

素性测试时,bob选择底数g,并计算以g为底的第二验证参数:v1=并将v1发给alice。在一个示例中,可以在满足条件的条件下随机选择g,其中(*)表示雅可比符号(jacobisymbol),譬如可以选择g=4。

alice计算以g为底的第一验证参数:

随后,alice检查第二验证参数v1与第一验证参数v2是否满足关系:v2≡±v1modn′,若满足则输出n′,将n′作为最终确定的rsa模数,否则跳转到产生长度三第一随机数、长度三第二随机数的步骤,重新生成新的rsa模数。

在该具体示例中,通过增量式产生rsa模数,通过合理选择增量部分随机数x、y的比特长度,一方面可以保证素数p和q的隐私性,另一方面兼顾了客户端计算资源不足的缺陷,在满足一定安全性的条件下提高了整体效率。

一个实施例中还提供一种rsa私钥生成方法,图5中示出了一个实施例中的rsa私钥生成方法的示意图,该实施例是以其中图1中的一个设备(设备101或设备102)的处理过程为例进行说明。

如图5所示,该实施例中的rsa私钥生成方法包括步骤s501至步骤s506。

步骤s501:当前参与方获得素数一当前参与方分量、素数二当前参与方分量。其中素数一当前参与方分量与对端参与方获得的素数一对端参与方分量共享素数一,素数二当前参与方分量与对端参与方获得的素数二对端参与方分量共享素数二。

其中,素数一当前参与方分量,是指当前参与方与对方参与方需要共享素数一时、对素数一进行分割后由当前参与方获得的分量,素数二当前参与方分量,是指当前参与方与对方参与方需要共享素数二时、对素数二进行分割后由当前参与方获得的分量。对素数一、素数二分割的方式可以采用任何可能的方式进行,如可以是通过加法分割的方式进行分割。

在一个具体示例中,以进行加法分割为例,该素数一当前参与方分量、素数二当前参与方分量,可以通过随机生成的方式生成,例如,可以是基于如上所述的rsa模数生成方法中的方式确定,例如素数一当前参与方分量可以是上述第一长度随机数(当前参与方是第一参与方时,则是长度一第一随机数;当前参与方是第二参与方时,则是长度一第二随机数),素数二当前参与方分量可以是上述第二长度随机数(当前参与方是第一参与方时,则是长度二第一随机数;当前参与方是第二参与方时,则是长度二第二随机数),或者第二长度随机数与第三长度随机数(当前参与方是第一参与方时,则是长度三第一随机数;当前参与方是第二参与方时,则是长度三第二随机数)的和值。当然可以理解是,该素数一当前参与方分量、素数二当前参与方分量也可以是通过其他的方式获得。

步骤s502:当前参与方根据素数一当前参与方分量、素数二当前参与方分量与对端参与方共享欧拉函数值,获得第一欧拉函数分量。

第一参与方与第二参与方对欧拉函数值的共享,可以采用任何可能的方式进行。

步骤s503:当前参与方基于选择的第一选择随机数、第二选择随机数,与对端参与方执行安全点积协议,获得第三点积协议分量。具体的执行安全点积协议的过程可以采用任何可能的方式进行。

在一个实施例中,当前参与方基于选择的第一选择随机数、第二选择随机数,与对端参与方执行安全点积协议,获得第三点积协议分量时,可以采用下述方式进行:

当前参与方随机生成随机参数;该随机参数可以是具体的随机数也可以是包含随机数的随机数向量,随机数的数目可以是1个或者多个,基于实际技术需求确定;

第一参与方以所述长度二第一随机数、所述长度三第一随机数以及所述第一随机参数构建第一参与方点积输入向量,第二参与方以所述长度二第二随机数、长度三第二随机数以及所述第二随机参数构建第二参与方点积输入向量;

当前参与方以选择的第一选择随机数、第二选择随机数以及所述随机参数构建当前参与方点积输入向量,与所述对端参与方执行安全点积协议,获得第三点积协议分量。

从而在执行点积协议的过程中,通过引入随机参数,并结合引入的随机参数构造点积输入向量,可以混淆交互过程中发送的数据,提高了对输入参数的隐私保护,提高安全性。可以理解,在执行安全点积协议的过程中,引入的随机参数,在获得的最终的点积协议输出结果(如第一点积协议分量、第二点积协议分量)之前,会进行消除,以确保输出结果的准确性,具体的消除方式可以采用任何可能的方式。

步骤s504:当前参与方基于第三点积协议分量、第一选择随机数、第一欧拉函数分量、第二选择随机数,确定第一共享参数分量。具体的确定第一共享参数分量的方式可以采用任何可能的方式进行。

步骤s505:当前参与方与对端参与方交换第一共享参数分量和对端参与方确定的第二共享参数分量后,确定第一整数和第二整数。

在一个具体示例中,可以基于下述原则来确定第一整数和第二整数:第一共享参数分量与第二共享参数分量的和值与第一整数的第一乘积,与第二整数与所述公开指数的第二乘积的和值为预设整数。该预设整数可以结合实际技术需要进行设定,一个具体示例中可以为1。

步骤s506:当前参与方根据第一整数和第二整数,确定第一rsa私钥分量。

在一个具体示例中,在当前参与方确定第一rsa私钥分量之后,还可以包括如下步骤:

当前参与方将第五随机数作为当前参与方私钥分量;

当前参与方确定所述第一rsa私钥分量和所述当前参与方私钥分量的差值,并将该差值发送给所述对端参与方;所述差值用于指示所述对端参与方根据所述差值和所述对端参与方确定的第一rsa私钥分量确定第一参与方私钥分量。

在此情况下,该当前参与方只需要存储一个私钥分量,就可以为所有的对方参与方执行协同签名,此时,该当前参与方通常可以为服务器方,从而使得服务器只需要存储一个私钥分量,就可以为所有用户执行协同签名。

在另一个具体示例中,在当前参与方确定第一rsa私钥分量之后,还可以包括如下步骤:

当前参与方接收对端参与方发送的差值,所述差值为所述对端参与方确定的第二rsa私钥分量和对端参与方私钥分量的差值;

当前参与方根据第一rsa私钥分量和所述差值确定当前参与方私钥分量。

从而使得对方参与方只需要存储一个私钥分量,就可以为所有用户执行协同签名。

在另一个具体示例中,当前参与方在获得第一rsa私钥分量之后,需要对该第一rsa私钥分量进行安全存储,以便在执行签名的时候使用。

在另一个具体示例中,为了获得更高的安全性,在当前参与方确定第一rsa私钥分量之后,还可以包括:

当前参与方根据设备id和用户口令计算出与rsa私钥分量相关的敏感参数;

当前参与方根据所述敏感参数、第一rsa私钥分量派生出所述当前参与方私钥分量。此时,对端参与方的私钥分量进行安全存储。

从而在需要执行签名的时刻,当前参与方先根据设备id和用户口令(pin)来联合计算出与rsa私钥分量相关的敏感参数,然后再利用敏感参数来派生出rsa私钥分量。rsa私钥分量使用之后立即从内存中销毁,缩短rsa私钥分量的生存周期。

图6示出了另一个实施例中的rsa私钥生成方法的流程示意图,该实施例是以rsa私钥生成过程中涉及的两个参与方的处理过程为例进行说明。如图6所示,该实施例中的rsa私钥生成方法包括如下步骤s601至步骤s606。

步骤s601:第一参与方获得素数一第一参与方分量(为了便于区分,本实施例以及下述各实施例中称之为素数一第一分量)、素数二第一参与方分量(为了便于区分,本实施例以及下述各实施例中称之为素数二第一分量),第二参与方获得素数一第二参与方分量(为了便于区分,本实施例以及下述各实施例中称之为素数一第二分量)、素数一第二参与方分量(为了便于区分,本实施例以及下述各实施例中称之为素数二第二分量)。素数一第一分量与素数一第二分量共享素数一,素数二第一分量与素数二第二分量共享素数二。

在该步骤中,第一参与方与第二参与方各自获得对素数进行分割的分量。其中,第一参与方与第二参与方需要共享素数一,对素数一进行分割后,由第一参与方获得素数一第一分量,第二参与方获得素数一第二分量;第一参与方与第二参与方需要共享素数二,对素数二进行分割后,由第一参与方获得素数二第一分量,第二参与方获得素数二第二分量。对素数一、素数二分割的方式可以采用任何可能的方式进行,如可以是通过加法分割的方式进行分割。

在一个具体示例中,以进行加法分割为例,素数一第一分量、素数二第一分量、素数一第二分量、素数二第二分量,可以通过随机生成的方式生成,例如,可以是基于如上所述的rsa模数生成方法中的方式确定,例如素数一第一分量可以是上述长度一第一随机数,素数二第一分量可以是上述长度二第一随机数或者长度二第一随机数与长度三第一随机数之和;素数一第二分量可以是上述长度一第二随机数,素数二第二分量可以是上述长度二第二随机数或者长度二第二随机数与长度三第二随机数之和。当然可以理解是,素数一第一分量、素数二第一分量、素数一第二分量、素数二第二分量也可以采用其他的方式来获得。

步骤s602:第一参与方与第二参与方根据素数一第一分量、素数二第一分量素数一第二分量、素数二第二分量共享欧拉函数值,第一参与方获得第一欧拉函数分量,第二参与方获得第二欧拉函数分量。第一参与方与第二参与方对欧拉函数值的共享,可以采用任何可能的方式进行。

步骤s603:基于第一参与方选择的第一选择随机数、第二选择随机数,以及第二参与方选择的第三选择随机数、第四选择随机数,第一参与方与第二参与方执行安全点积协议,第一参与方获得第一参与方的点积协议分量(为了进行区分,本实施例即下述各实施例中称之为第三点积协议分量),第二参与方获得第二参与方的点积协议分量(为了进行区分,本实施例即下述各实施例中称之为第四点积协议分量)。具体的执行安全点积协议的过程可采用任何可能的方式进行。

在一个实施例中,第一参与方与第二参与方执行安全点积协议的过程可以采用下述方式进行:

第一参与方随机生成第三随机参数,第二参与方随机生成第四随机参数;该第三随机参数、第四随机参数可以是具体的随机数也可以是包含随机数的随机数向量,随机数的数目可以是1个或者多个,基于实际技术需求确定;

第一参与方基于选择的第一选择随机数、第二选择随机数以及所述第三随机参数构建第一参与方点积输入向量,第二参与方基于选择的第三选择随机数、第四选择随机数以及所述第四随机参数构建第二参与方点积输入向量;

第一参与方基于第一参与方点积输入向量、第二参与方基于第二参与方点积输入向量,第一参与方与第二参与方执行安全点积协议,第一参与方获得第三点积协议分量,第二参与方获得第四点积协议分量。

从而在执行点积协议的过程中,通过引入随机参数,并结合引入的随机参数构造点积输入向量,可以混淆交互过程中发送的数据,提高了对输入参数的隐私保护,提高安全性。可以理解,在执行安全点积协议的过程中,引入的随机参数,在获得的最终的点积协议输出结果(如第一点积协议分量、第二点积协议分量)之前,会进行消除,以确保输出结果的准确性,具体的消除方式可以采用任何可能的方式。

步骤s604:第一参与方基于第三点积协议分量、第一选择随机数、第一欧拉函数分量、第二选择随机数以及公开指数,确定第一共享参数分量;第二参与方基于第三点积协议分量、第三选择随机数、第二欧拉函数分量、第四选择随机数以及所述公开指数,确定第二共享参数分量。具体的确定第一共享参数分量、第二共享参数分量的方式可以采用任何可能的方式进行。

步骤s605:第一参与方与第二参与方交换第一共享参数分量和第二共享参数分量后,确定第一整数和第二整数。

在一个具体示例中,可以基于下述原则来确定第一整数和第二整数:第一共享参数分量与第二共享参数分量的和值与第一整数的第一乘积,与第二整数与公开指数的第二乘积的和值为预设整数。该公开指数为第一参与方与第二参与方约定的公开指数,该预设整数可以结合实际技术需要进行设定,一个具体示例中可以为1。

步骤s606:第一参与方根据第一整数、第二选择随机数和第二整数,确定第一rsa私钥分量,第二参与方根据第一整数、第四选择随机数,确定第二rsa私钥分量。

在一个具体示例中,在第一参与方确定第一rsa私钥分量,第二参与方确定第二rsa私钥分量之后,还包括步骤:

第二参与方将第五随机数作为第二参与方私钥分量;

第二参与方确定所述第二rsa私钥分量和所述第二参与方私钥分量的差值,并将该差值发送给所述第一参与方;

第一参与方根据第一rsa私钥分量和所述差值确定第一参与方私钥分量。

在此情况下,该第二参与方只需要存储一个私钥分量,就可以为所有的第一参与方执行协同签名,此时,该第二参与方通常可以为服务器方,从而使得服务器只需要存储一个私钥分量,就可以为所有用户执行协同签名。

在另一个具体示例中,第一参与方在获得第一rsa私钥分量之后,需要对该第一rsa私钥分量进行安全存储,以便在执行签名的时候使用。

另一个实施例中,为了获得更高的安全性,第一参与方确定第一rsa私钥分量、第二参与方确定第二rsa私钥分量之后,还包括步骤:

第二参与方存储所述第二rsa私钥分量;

第一参与方根据设备id和用户口令计算出与rsa私钥分量相关的敏感参数;并根据所述敏感参数、第一rsa私钥分量派生出所述第一参与方私钥分量。

从而在需要执行签名的时刻,第一参与方先根据设备id和用户口令(pin)来联合计算出与rsa私钥分量相关的敏感参数,然后再利用敏感参数来派生出rsa私钥分量。rsa私钥分量使用之后立即从内存中销毁,缩短rsa私钥分量的生存周期。

基于如上所述的rsa私钥生成方法,以下结合其中一个具体示例进行详细举例说明,图7对应示出了该具体示例中的rsa私钥的交互流程的示意图。在该具体示例中,以第一参与方为alice、第二参与方为bob为例进行说明。

本实施例方案是基于以下基本技术原理生成rsa私钥。

alice和bob约定rsa公开指数e,希望计算与e对应的私钥d的加法共享。假定双方共同计算出一个共享参数:

γ=λφ(n)+re

其中,φ(n)=(p-1)(q-1)是欧拉函数,λ和r均为随机数。

将上式两边对φ(n)求模可得:

γmodφ(n)=remodφ(n)

利用扩展欧几里德算法,可以选择两个整数x和y,满足关系:

xγ+ye=1

将上式两边对φ(n)求模可得:

(xr+y)modφ(n)=e-1modφ(n)

若取d=(xr+y)modφ(n),则满足关系:de=1modφ(n),显然d是公开模指数e对应的一个rsa私钥。

据此,在本实施例的一个具体示例中,一个具体的生成rsa私钥的过程可以是如下所述。

alice获得素数一第一分量、素数二第一分量,bob获得素数一第二分量、素数二第二分量。素数一第一分量、素数二第一分量、素数一第二分量、素数二第二分量可以采用任何可能的方式获得。在一个具体示例中,在生成rsa模数的步骤中,alice获得了素数p和q的加法分量pa和(qa+x),bob获得了素数p和q的加法分量(pb+y)和qb。因此,本示例中可以将素数一第一分量设为pa、素数二第一分量设为(qa+x)、素数一第二分量设为(pb+y)、素数二第二分量qb。

随后,alice和bob进行欧拉函数值的共享。

若根据p和q计算欧拉函数:

φ(n)=(p-1)(q-1)=n-p-q+1。

因此,在一个具体示例中,alice获得的第一欧拉函数分量可以为:φa(n)=n-pa-(qa+x)+1。而bob获得的第二欧拉函数分量可以为:φb(n)=-(pb+y)-qb。

显然有:φa(n)+φb(n)=φ(n),从而说alice和bob加法共享了φ(n)。

可以理解,在其他的实施例中,alice和bob也可以采用其他的方式共享欧拉函数φ(n)。

随后,alice选择第一选择随机数λa、第二选择随机数ra,bob选择第三选择随机数λb、第四选择随机数rb,然后双方执行一次安全点积协议,使得alice获得第三点积协议分量sa,bob获得第四点积协议分量sb,满足关系:

sa+sb=λaφb(n)+λbφa(n)。

其中,具体的安全点积协议的处理方式可以采用任何可能的方式进行,例如上述生成rsa模数过程中的安全点积协议的处理方式。

该安全点积协议的处理过程,需要两方安全计算λaφb(n)+λbφa(n),显然这是一个二阶向量点积运算,与上述生成rsa模数时需要计算的xipb+yiqa+xiyi具有不同形式。

为此,将λaφb(n)+λbφa(n)变换为:

λaφb+λbφa=λa(φb[0]+φb[1])+λb(φa[0]+φa[1])。

然后alice和bob在执行协议的准备阶段按照如下方式构造输入第一矩阵a1、第二矩阵a2、第三矩阵b1、第四矩阵b2。

其中alice构造第一矩阵a1、第二矩阵a2:

bob构造矩阵第三矩阵b1、第四矩阵b2:

其中:

φa[0]+φa[1]=φa(n)

φb[0]+φb[1]=φb(n)

从而基于与上述对应的方式进行处理后,可以获得点积运算结果:

a1×b1+b2×a2=λaφb+λbφa。

可以理解,在其他的实施例中,也可以采用其他的点积协议的具体的处理方式获得该点积运算结果。

然后,alice基于第三点积协议分量sa、第一选择随机数λa、第一欧拉函数分量φa(n)、第二选择随机数ra以及公开指数e,确定第一共享参数分量γa:

γa=sa+λaφa(n)+rae。

bob基于第三点积协议分量sb、第三选择随机数λb、第二欧拉函数分量φb(n)、第四选择随机数rb以及公开指数,确定第二共享参数分量γb:

γb=esb+λbφb(n)+rbe。

从而满足:

γa+γb=(λa+λb)(φa(n)+φb(n))+(ra+rb)e。

alice与bob交换γa和γb,两方均可以计算:γ=γa+γb。

随后,alice和bob交换第一共享参数分量和第二共享参数分量后,确定第一整数和第二整数。一个具体示例中,可以利用扩展欧几里德算法,选择确定第一整数x和第二整数y,满足关系:xγ+ye=1。

一种简单的计算方法可以是:首先计算x=γ-1mode,然后计算y=-xγ/e。

在获得第一整数x和第二整数y之后,alice根据第一整数x、第二选择随机数ra和第二整数y计算第一rsa私钥分量da:da=xra+y。bob根据第一整数x、第四选择随机数rb,确定第二rsa私钥分量db:db=xrb。

显然满足关系:da+db=x(ra+rb)+y=xr+y。从而实现了rsa私钥的生成。

在一个具体示例中,在生成rsa私钥时,客户端仍然可以选择1024比特或者更长的私钥分量,在生成rsa模数的阶段选择了较短的随机数比特(如m=128),并不会导致最终计算出来的私钥分量的安全性降低。

在另一个具体示例中,还可以通过保持服务端的私钥分量不变,使得服务端只需要存储一个私钥分量,就可以为所有用户执行协同签名。以bob作为服务端为例,具体实现方法可以如下所述:

bob选择一个随机数(第五随机数)d0作为服务端私钥分量,即设置db=d0,然后计算第二rsa私钥分量db=xrb和服务端私钥分量d0的差值:b=xrb-d0。然后将计算得到的差值b发送给alice。

alice接收到该差值b后,根据第一rsa私钥分量xra+y和差值b确定第一参与方私钥分量(客户端私钥分量)da,具体可以是将第一rsa私钥分量xra+y和差值b之和确定为客户端私钥分量da,即da=xra+y+b=xr+y-d0。

从而alice和bob共享了私钥xr+y。

在另一个具体示例中,客户端获得了私钥分量da=xra+y之后,需要将其安全存储,以便在执行签名的时候使用。除非在客户端所在终端引入可信执行环境(tee),否则一般是可修改的计算环境(如ios、android操作系统等)。如果在终端中存储与私钥分量相关的敏感参数,可能面临木马劫持等攻击。

为了获得更高的安全性,服务端存储器私钥分量后,客户端可以根据设备id和用户口令(pin)联合计算出与rsa私钥分量相关的敏感参数,然后根据敏感参数来派生出rsa私钥分量。在需要执行签名的时刻,客户端先根据设备id和用户口令(pin)来联合计算出与rsa私钥分量相关的敏感参数,然后再利用敏感参数来派生出rsa私钥分量。rsa私钥分量使用之后立即从内存中销毁,缩短rsa私钥分量的生存周期。

基于如上所述的示例,在一个实施例中还提供一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如上述各实施例中的任意一个实施例的方法。

图8示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的设备101(或设备102)。如图8所示,该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和输入装置。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现点积协议处理方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行点积协议处理方法。

本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

据此,在一个实施例中还提供一种存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如上述各实施例中的任意一个实施例的方法。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

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