首页 / 技术领域 / 素数 / RSA密钥的生成方法、装置、存储介质及计算机设备

RSA密钥的生成方法、装置、存储介质及计算机设备

热词 素数 因子 私钥 待定 合成 服务 份额 rsa 客户端 密钥
专利类型 发明授权 法律事件 公开; 实质审查; 授权;
专利有效性 有效专利 当前状态 授权
申请号 CN201711365065.6 申请日 2017-12-18
公开(公告)号 CN108055128B 公开(公告)日 2021-11-19
申请人 数安时代科技股份有限公司; 申请人类型 企业
发明人 卢伟龙; 陈壹鹏; 第一发明人 卢伟龙
权利人 数安时代科技股份有限公司 权利人类型 企业
当前权利人 数安时代科技股份有限公司 当前权利人类型 企业
省份 当前专利权人所在省份:广东省 城市 当前专利权人所在城市:广东省佛山市
具体地址 当前专利权人所在详细地址:广东省佛山市南海区狮山镇南海软件科技园科教路 邮编 当前专利权人邮编:528200
主IPC国际分类 H04L9/08 所有IPC国际分类 H04L9/08H04L9/30
专利引用数量 11 专利被引用数量 0
专利权利要求数量 14 专利文献类型 B
专利代理机构 广州华进联合专利商标代理有限公司 专利代理人 黄晓庆;
摘要 本 申请 涉及一种RSA密钥生成方法、装置、计算机可读存储介质及计算机设备,所述方法包括:接收服务端发送的第一密钥生成 请求 ,所述第一密钥生成请求包括第一素数因子对;接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对;对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对;基于所述合成素数对计算RSA模数和欧拉函数值;根据所述RSA模数和所述欧拉函数值获得RSA密钥。本申请提供的方案能够有效地降低RSA密钥生成过程中通信和计算的复杂程度,提高RSA密钥的生成效率。
权利要求

1.一种RSA密钥生成方法,其特征在于,所述方法包括:
接收服务端发送的第一密钥生成请求,所述第一密钥生成请求包括第一素数因子对;
接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对;
对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对;
基于所述合成素数对计算RSA模数和欧拉函数值;
根据所述RSA模数和所述欧拉函数值获得RSA密钥;
所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子;
在所述第一素数因子对的数目大于一个时,所述对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对的步骤,包括:
从各所述第一服务端素数因子中选取一个第一服务端素数因子,作为当前待合成第一服务端素数因子;
对所述第一客户端素数因子和所述当前待合成第一服务端素数因子进行第一预定运算,获得第一待定合成因子;
若获得的第一待定合成因子为合数,则选取下一个未进行过所述第一预定运算的第一服务端素数因子作为所述当前待合成第一服务端素数因子,并返回所述进行第一预定预算的步骤,直至获得的第一待定合成因子为素数;
从各所述第二服务端素数因子中选取一个第二服务端素数因子,作为当前待合成第二服务端素数因子;
对所述第二客户端素数因子和所述当前待合成第二服务端素数因子进行第二预定运算,获得第二待定合成因子;
若获得的第二待定合成因子为合数,则选取下一个未进行过所述第二预定运算的第二服务端素数因子作为所述当前待合成第二服务端素数因子,并返回所述进行第二预定预算的步骤,直至获得的第二待定合成因子为素数;
所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子;
在所述第一素数因子对的数目为一时,所述对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对的步骤,包括:
对所述第一服务端素数因子和所述第一客户端素数因子进行第一预定运算,获得第一待定合成因子;检测所述第一待定合成因子的第一属性,所述第一属性包括合素性;若所述第一待定合成因子为合数,获取第一调整值,并基于所述第一调整值更新所述第一待定合成因子,并返回所述检测所述第一待定合成因子的第一属性的步骤,直至更新获得的所述第一待定合成因子为素数;
对所述第二服务端素数因子和所述第二客户端素数因子进行第二预定运算,获得第二待定合成因子;检测所述第二待定合成因子的第二属性,所述第二属性包括合素性;若所述第二待定合成因子为合数,获取第二调整值,并基于所述第二调整值更新所述第二待定合成因子,并返回所述检测所述第二待定合成因子的第二属性的步骤,直至更新获得的所述第二待定合成因子为素数;
所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
2.根据权利要求1所述的方法,其特征在于,所述第一属性和所述第二属性均还包括奇偶性;
在检测所述第一待定合成因子的合素性的步骤之前,还包括:
检测所述第一待定合成因子的奇偶性;
若所述第一待定合成因子为偶数,则将所述第一待定合成因子调整为奇数;
在检测所述第二待定合成因子的合素性的步骤之前,还包括:
检测所述第二待定合成因子的奇偶性;
若所述第二待定合成因子为偶数,则将所述第二待定合成因子调整为奇数。
3.根据权利要求1或2所述的方法,其特征在于,所述基于所述RSA模数及所述欧拉函数值获得RSA密钥的步骤,包括:
获取公钥指数;
基于所述公钥指数及所述欧拉函数值计算私钥指数;
获取所述客户端/所述服务端的私钥指数份额;
基于所述私钥指数、所述客户端/所述服务端的私钥指数份额以及所述欧拉函数值计算所述服务端/所述客户端的私钥指数份额;
所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
4.根据权利要求1或2所述的方法,其特征在于,所述第一密钥生成请求还包括第一私钥因子,所述第二密钥生成请求还包括第二私钥因子;
所述基于所述RSA模数及所述欧拉函数值获得RSA密钥的步骤,包括:
获取公钥指数;
基于所述欧拉函数值、所述第一私钥因子、所述第二私钥因子、所述公钥指数生成第一参数;
当所述第一参数与所述公钥指数互质时,基于所述第一参数和所述公钥指数计算公开参数对;
获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额;
所述RSA密钥包括所述RSA模数、所述服务端的私钥指数份额及所述客户端的私钥指数份额。
5.根据权利要求4所述的方法,其特征在于,所述获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额的步骤,包括:
基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
6.根据权利要求4所述的方法,其特征在于,所述获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额的步骤,包括:
将所述公开参数对发送至所述服务端和所述客户端,以使所述服务端基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并使得所述客户端基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
7.一种RSA密钥生成装置,其特征在于,所述装置包括:
第一请求接收模,用于接收服务端发送的第一密钥生成请求,所述第一密钥生成请求包括第一素数因子对,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子;
第二请求接收模块,接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子;
素数对合成模块,用于对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对;
RSA参数计算模块,用于基于所述合成素数对计算RSA模数和欧拉函数值;
RSA密钥获取模块,用于基于所述RSA模数和所述欧拉函数值获得RSA密钥;
所述第一素数因子对的数目大于一个时,所述素数对合成模块包括:
第一初始因子选取单元,用于从各所述第一服务端素数因子中选取一个第一服务端素数因子,作为当前待合成第一服务端素数因子;
第一合成因子获取单元,用于对所述第一客户端素数因子和所述当前待合成第一服务端素数因子进行第一预定运算,获得第一待定合成因子;
第一服务端因子更新单元,用于若获得的第一待定合成因子为合数,则选取下一个未进行过所述第一预定运算的第一服务端素数因子作为所述当前待合成第一服务端素数因子,并调用所述第一合成因子获取单元,直至获得的第一待定合成因子为素数;
第二初始因子选取单元,用于从各所述第二服务端素数因子中选取一个第二服务端素数因子,作为当前待合成第二服务端素数因子;
第二合成因子获取单元,用于对所述第二客户端素数因子和所述当前待合成第二服务端素数因子进行第二预定运算,获得第二待定合成因子;
第二服务端因子更新单元,用于若获得的第二待定合成因子为合数,则选取下一个未进行过所述第二预定运算的第二服务端素数因子作为所述当前待合成第二服务端素数因子,并调用所述第二合成因子获取单元,直至获得的第二待定合成因子为素数;
所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子;
所述第一素数因子对的数目为一时,所述素数对合成模块包括:
第三合成因子获取单元,用于对所述第一服务端素数因子和所述第一客户端素数因子进行第一预定运算,获得第一待定合成因子;
第一属性检测单元,用于检测所述第一待定合成因子的第一属性,所述第一属性包括合素性;
第一合成因子更新单元,用于在所述第一待定合成因子为合数时,获取第一调整值,并基于所述第一调整值更新所述第一待定合成因子,以及调用所述第一属性检测单元,直至更新获得的所述第一待定合成因子为素数;
第四合成因子获取单元,用于对所述第二服务端素数因子和所述第二客户端素数因子进行第二预定运算,获得第二待定合成因子;
第二属性检测单元,用于检测所述第二待定合成因子的第二属性,所述第二属性包括合素性;
第二合成因子更新单元,用于当所述第二待定合成因子为合数时,获取第二调整值,并基于所述第二调整值更新所述第二待定合成因子,以及调用所述第二属性检测单元,直至更新获得的所述第二待定合成因子为素数;
所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
8.根据权利要求7所述的装置,其特征在于,所述第一属性和所述第二属性均还包括奇偶性;
所述第一属性检测单元,还包括:第一奇偶性检测子单元,用于检测所述第一待定合成因子的奇偶性,并在所述第一待定合成因子为偶数时,将所述第一待定合成因子调整为奇数;
所述第二属性检测单元,还包括:第二奇偶性检测子单元,用于检测所述第二待定合成因子的奇偶性,并在所述第二待定合成因子为偶数时,将所述第二待定合成因子调整为奇数。
9.根据权利要求7所述的装置,其特征在于,所述RSA密钥获取模块包括:
第一公钥指数模块,用于获取公钥指数;
私钥指数计算模块,用于基于所述公钥指数及所述欧拉函数值计算私钥指数;
第一客户端/所述服务端份额获取模块,用于获取所述客户端/所述服务端的私钥指数份额;
第一服务端/所述客户端份额计算模块,用于基于所述私钥指数、所述客户端/所述服务端的私钥指数份额以及所述欧拉函数值计算所述服务端/所述客户端的私钥指数份额;
所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
10.根据权利要求7所述的装置,其特征在于,所述第一密钥生成请求还包括第一私钥因子,所述第二密钥生成请求还包括第二私钥因子;所述RSA密钥获取模块,包括:
第二公钥指数模块,用于获取公钥指数;
第一参数生成模块,用于基于所述欧拉函数值、所述第一私钥因子、所述第二私钥因子、所述公钥指数生成第一参数;
参数对计算模块,用于当所述第一参数与所述公钥指数互质时,基于所述第一参数和所述公钥指数计算公开参数对;
私钥份额获取模块,用于获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额;
所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
11.根据权利要求10所述的装置,其特征在于,所述私钥份额获取模块,包括:
第一私钥份额获取单元,用于基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
12.根据权利要求10所述的装置,其特征在于,所述钥份额获取模块,包括:
第二私钥份额获取单元,用于将所述公开参数对发送至所述服务端和所述客户端,以使所述服务端基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并使得所述客户端基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
13.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至6中任一项所述方法的步骤。
14.一种计算机设备,包括存储器和处理器,其特征在于,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至6中任一项所述方法的步骤。

说明书全文

RSA密钥的生成方法、装置、存储介质及计算机设备

技术领域

[0001] 本申请涉及密码学与信息安全技术领域,特别是涉及一种RSA密钥的生成方法、装置、存储介质及计算机设备。

背景技术

[0002] 为了保证计算机信息传递的安全性,需要使用密钥对信息进行保密处理后传递。因此,密钥生成技术是信息安全领域中的关键技术。RSA算法是国际认可的公钥密码算法,提供密钥生成功能。在某些应用场景下,为保障RSA密钥生成过程的公平性和协作性,需要多个参与方协同生成RSA密钥,即各参与方在不泄露自己秘密的情况下,协同完成各方预定的任务。
[0003] 在传统的多方协同生成RSA密钥的方法中,参与方需使用茫然传输协议及同态密码算法等高消耗密码工具,对大量隐私数据进行复杂的盲化、混淆和加密处理。然而,实现上述密码工具需各参与方之间多次进行交互,且该密码工具均使用了复杂的数学运算,例如模幂运算及乘法运算等,本身消耗高。因而该方法的通信过程及计算过程复杂,导致密钥的生成效率低下。发明内容
[0004] 基于此,有必要针对传统方法中通信及计算复杂的技术问题,提供一种RSA密钥的生成方法、装置、计算机可读存储介质及计算机设备。
[0005] 一种RSA密钥生成方法,所述方法包括:
[0006] 接收服务端发送的第一密钥生成请求,所述第一密钥生成请求包括第一素数因子对;
[0007] 接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对;
[0008] 对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对;
[0009] 基于所述合成素数对计算RSA模数和欧拉函数值;
[0010] 根据所述RSA模数和所述欧拉函数值获得RSA密钥。
[0011] 在一个实施例中,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子,所述第一素数因子对的数目大于一个;
[0012] 所述对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对的步骤,包括:
[0013] 从各所述第一服务端素数因子中选取一个第一服务端素数因子,作为当前待合成第一服务端素数因子;
[0014] 对所述第一客户端素数因子和所述当前待合成第一服务端素数因子进行第一预定运算,获得第一待定合成因子;
[0015] 若获得的第一待定合成因子为合数,则选取下一个未进行过所述第一预定运算的第一服务端素数因子作为所述当前待合成第一服务端素数因子,并返回所述进行第一预定预算的步骤,直至获得的第一待定合成因子为素数;
[0016] 从各所述第二服务端素数因子中选取一个第二服务端素数因子,作为当前待合成第二服务端素数因子;
[0017] 对所述第二客户端素数因子和所述当前待合成第二服务端素数因子进行第二预定运算,获得第二待定合成因子;
[0018] 若获得的第二待定合成因子为合数,则选取下一个未进行过所述第二预定运算的第二服务端素数因子作为所述当前待合成第二服务端素数因子,并返回所述进行第二预定预算的步骤,直至获得的第二待定合成因子为素数;
[0019] 所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
[0020] 在一个实施例中,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子,且所述第一素数因子对的数目为一;
[0021] 所述对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对的步骤,包括:
[0022] 对所述第一服务端素数因子和所述第一客户端素数因子进行第一预定运算,获得第一待定合成因子;
[0023] 检测所述第一待定合成因子的第一属性,所述第一属性包括合素性;
[0024] 若所述第一待定合成因子为合数,获取第一调整值,并基于所述第一调整值更新所述第一待定合成因子,并返回所述检测所述第一待定合成因子的属性的步骤,直至更新获得的所述第一待定合成因子为素数;
[0025] 对所述第二服务端素数因子和所述第二客户端素数因子进行第二预定运算,获得第二待定合成因子;
[0026] 检测所述第二待定合成因子的第二属性,所述第二属性包括合素性;
[0027] 若所述第二待定合成因子为合数,获取第二调整值,并基于所述第二调整值更新所述第二待定合成因子,并返回所述检测所述第二待定合成因子的属性的步骤,直至更新获得的所述第二待定合成因子为素数;
[0028] 所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
[0029] 在一个实施例中,所述第一属性和所述第二属性均还包括奇偶性;
[0030] 在检测所述第一待定合成因子的合素性的步骤之前,还包括:
[0031] 检测所述第一待定合成因子的奇偶性;
[0032] 若所述第一待定合成因子为偶数,则将所述第一待定合成因子调整为奇数;
[0033] 在检测所述第二待定合成因子的合素性的步骤之前,还包括:
[0034] 检测所述第二待定合成因子的奇偶性;
[0035] 若所述第二待定合成因子为偶数,则将所述第二待定合成因子调整为奇数。
[0036] 在一个实施例中,所述基于所述RSA模数及所述欧拉函数值获得RSA密钥的步骤,包括:
[0037] 获取公钥指数;
[0038] 基于所述公钥指数及所述欧拉函数值计算私钥指数;
[0039] 获取所述客户端/所述服务端的私钥指数份额;
[0040] 基于所述私钥指数、所述客户端/所述服务端的私钥指数份额以及所述欧拉函数值计算所述服务端/所述客户端的私钥指数份额;
[0041] 所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
[0042] 在一个实施例中,所述第一密钥生成请求还包括第一私钥因子,所述第二密钥生成请求还包括第二私钥因子;
[0043] 所述基于所述RSA模数及所述欧拉函数值获得RSA密钥的步骤,包括:
[0044] 获取公钥指数;
[0045] 基于所述欧拉函数值、所述第一私钥因子、所述第二私钥因子、所述公钥指数生成第一参数;
[0046] 当所述第一参数与所述公钥指数互质时,基于所述第一参数和所述公钥指数计算公开参数对;
[0047] 获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额;
[0048] 所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
[0049] 在一个实施例中,所述获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额的步骤,包括下述两项中的任意一项:
[0050] 基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额;
[0051] 将所述公开参数对发送至所述服务端和所述客户端,以使所述服务端基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并使得所述客户端基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
[0052] 一种RSA密钥生成装置,所述装置包括:
[0053] 第一请求接收模,用于接收服务端发送的第一密钥生成请求,所述第一密钥生成请求包括第一素数因子对;
[0054] 第二请求接收模块,接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对;
[0055] 素数对合成模块,用于对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对;
[0056] RSA参数计算模块,用于基于所述合成素数对计算RSA模数和欧拉函数值;
[0057] RSA密钥获取模块,用于基于所述RSA模数和所述欧拉函数值获得RSA密钥。
[0058] 一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如上所述的RSA密钥的生成方法的步骤。
[0059] 一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上所述的RSA密钥的生成方法的步骤。
[0060] 上述RSA密钥的生成方法、装置、计算机可读存储介质及计算机设备,获取服务端和客户端发送的密钥生成请求,并基于获得的密钥生成请求获得合成素数对,再基于该合成素数对计算RSA模数及欧拉函数值,以及基于该RSA模数及欧拉函数值生成RSA密钥。可见,将复杂的运算移交第三方设备完成,无需服务端和客户端之间进行多次交互,且能够避免使用高消耗的密码工具,因而有效地降低了通信和计算的复杂程度,提高了RSA密钥的生成效率。附图说明
[0061] 图1为一个实施例中RSA密钥的生成方法的应用环境图;
[0062] 图2为一个实施例中RSA密钥的生成方法的流程示意图;
[0063] 图3为一个实施例中获得为素数的第一待定合成因子的步骤的流程示意图;
[0064] 图4为一个实施例中获得为素数的第二待定合成因子的步骤的流程示意图;
[0065] 图5为另一个实施例中获得为素数的第一待定合成因子的步骤的流程示意图;
[0066] 图6为一个实施例中获得为素数的第二待定合成因子的步骤的流程示意图;
[0067] 图7为一个实施例中RSA密钥的生成装置的结构框图
[0068] 图8为一个实施例中计算机设备的结构框图。

具体实施方式

[0069] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0070] 图1为一个实施例中RSA密钥的生成方法的应用环境图。参照图1,该应用环境一般涉及服务端110、用户终端120以及可信服务端130。其中,服务端110和可信服务端130之间、以及用户终端120和可信服务端130之间均通过网络连接。服务端110和可信服务端130均可以用独立的服务器或者是多个服务器组成的服务器集群来实现。用户终端120可以为手机、平板电脑笔记本电脑、台式电脑等中的至少一种。
[0071] 在实际应用中,服务端110和用户终端120之间可进行加密通信,即通过密钥保护进行信息传递。服务端110可以为第一通信参与方,用户终端120可以为第二通信参与方,可信服务端130为区别于服务端110和用户终端120的第三方设备。其中,可信服务端130可用于生成供服务端110和用户终端120进行加密通信的密钥,其可以为具有丰富的运算资源、且物理和数字防篡改的高安全级别的运算设备,在运算过程中,其通常不会对中间数据进行存储和日志记录。
[0072] 在传统的多方协同生成RSA密钥的方法中,在协议执行过程中,需要对大量隐私数据均进行复杂的盲化、混淆和加密,以此来保证协议交互过程中敏感数据传输的安全性。为了达到盲化、混淆和加密的目的,需要大量使用茫然传输协议、同态密码算法等高数学消耗的密码工具,然而这些密码工具,均具有复杂的数学结构,使用了耗时的数学运算,例如模幂运算和乘法运算等。此外,要实现这些密码工具,本身也需要各通信参与方多次进行交互。因此,传统方法中存在运算复杂度上的弊端,并且在生成过程中,还会多次触及这些弊端,从而使得缺点呈指数化放大。从产品使用的度,在传统方法下,为了获得一个RSA密钥,服务端110和用户终端120均需耗费很长的时间,并且服务端110和用户终端120之间需要进行多次交互。因此,虽然传统方法能够实现协同生成RSA密钥,但它难以适应实际生产和使用环境,而仅能停留在理论层面。
[0073] 基于此,本申请的各实施例,引入了可信服务端,并将大量敏感数据外包给可信服务端进行内部运算,一定程度上,可以看成可信服务端的单方运算,无需使用上文提到的茫然传输协议和同态密码算法等高消耗的密码工具,因此,本申请的各实施例均能够大大提高RSA密钥的生成效率。
[0074] 如图2所示,在一个实施例中,提供了一种RSA密钥的生成方法。本实施例主要以该方法应用于上述图1中的可信服务端130来举例说明。参照图2,该RSA密钥的生成方法具体包括如下步骤S202至S210。
[0075] S202,接收服务端发送的第一密钥生成请求,所述第一密钥生成请求包括第一素数因子对。
[0076] 第一密钥生成请求可由服务端生成,并发送至可信服务端。在一个具体的示例中,服务端可通过SSL(Secure Sockets Layer,安全套接层)安全信道向可信服务端发送第一密钥生成请求。
[0077] 需要说明的是,第一密钥生成请求中可包括M个第一素数因子对,M为正整数。具体实施时,M的数值可基于服务端的数据处理进行设定及调整。
[0078] 各第一素数因子对均可包括两个随机数,这两个随机数的位数可均为 比特。另外,第一素数因子对的数据结构可为元组。
[0079] S204,接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对。
[0080] 第二密钥生成请求可由客户端生成,并发送至可信服务端。在一个具体的示例中,客户端可通过SSL安全信道向可信服务端发送第二密钥生成请求。
[0081] 此外,客户端的数目可为T个,T为正整数。当T等于1时,意味着只有一个客户端与上述服务端进行加密通信,相应地,可信服务端仅能够接收到一个客户端发送的第二密钥生成请求;当T大于1时,意味着有多个客户端,且各客户端均可分别与上述服务端进行加密通信,则各客户端均可向可信服务端发送与之对应的第二密钥生成请求,相应地,可信服务端可接收到多个第二密钥生成请求,且各第二密钥生成请求均一一对应一个客户端。
[0082] 各第二素数因子对均可包括两个随机数,这两个随机数的位数可均为 比特。另外,第二素数因子对的数据结构可为元组。
[0083] 需要说明的是,服务端向可信服务端发送第一密钥生成请求与客户端向可信服务端发送第二密钥生成请求没有必然的时间先后顺序。相应地,对于可信服务端而言,在执行步骤S202和步骤S204的过程中,两者也没有必然的时间先后顺序,即,可以先执行步骤S202,再执行步骤S204,也可以先执行步骤S204,再执行步骤S202,还可以并行执行步骤S202和步骤S204。
[0084] S206,对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对。
[0085] 可信服务端接收到第一素数因子对和第二素数因子对后,可对第一素数因子对中的一个随机数与第二素数因子对中的一个随机数进行合成,获得一个素数,并对第一素数因子对中的另一个随机数与第二素数因子对中的另一个随机数进行合成,获得另一个素数,以获得包括这两个素数的合成素数对。在一个具体的示例中,第一素数因子对中的两个随机数和第二素数因子对中的两个随机数均具有预定的位置编号,在此情况下,可以将第一素数因子对中的第一个随机数与第二素数因子对中的第一个随机数进行合成,获得一个素数,并将第一素数因子对中的第二个随机数与第二素数因子对中的第二个随机数进行合成,获得另一个素数,以获得包括这两个素数的合成素数对,可见,本示例能够有效地避免合成过程中出现数据混乱,从而保证合成操作的顺利进行。此外,合成操作可为执行预定的运算,例如加法运算。
[0086] S208,基于所述合成素数对计算RSA模数和欧拉函数值。
[0087] 可采用下述公式计算RSA模数:N=pq,其中,N为RSA模数,p和q分别为合成素数对中的两个素数。
[0088] 可采用下述公式计算欧拉函数值: 其中, 为欧拉函数值,p和q分别为合成素数对中的两个素数。
[0089] 此外,计算得到RSA模数和欧拉函数值后,可信服务端可将合成素数对从本地数据库中销毁,以防止数据泄露,增强密钥生成的安全性。
[0090] S210,根据所述RSA模数和所述欧拉函数值获得RSA密钥。
[0091] RSA密钥可包括公钥及私钥,RSA模数可用于获得公钥,欧拉函数值可用于获得私钥。
[0092] 上述RSA密钥的生成方法,获取服务端和客户端发送的密钥生成请求,并基于获得的密钥生成请求获得合成素数对,再基于该合成素数对计算RSA模数及欧拉函数值,以及基于该RSA模数及欧拉函数值生成RSA密钥。可见,将复杂的运算移交第三方设备完成,无需服务端和客户端之间进行多次交互,且能够避免使用高消耗的密码工具,因而有效地降低了通信和计算的复杂程度,提高了RSA密钥的生成效率。
[0093] 为进一步对本申请的方案进行更详细的说明,下文对本申请的一些优选实施例进行具体描述或举例说明。
[0094] 在一个实施例中,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子,并且可信服务器接收到的来自服务端的第一密钥生成请求中包括的第一素数因子对的数目可以大于一个。
[0095] 在此情况下,一并参照图3和图4,图2中示出的步骤S206,可以包括如下步骤S301至步骤S303、以及步骤S401至步骤S403。
[0096] S301,从各所述第一服务端素数因子中选取一个第一服务端素数因子,作为当前待合成第一服务端素数因子;
[0097] S302,对所述第一客户端素数因子和所述当前待合成第一服务端素数因子进行第一预定运算,获得第一待定合成因子;
[0098] S303,若获得的第一待定合成因子为合数,则选取下一个未进行过所述第一预定运算的第一服务端素数因子作为所述当前待合成第一服务端素数因子,并返回所述步骤S302,直至获得的第一待定合成因子为素数。
[0099] S401,从各所述第二服务端素数因子中选取一个第二服务端素数因子,作为当前待合成第二服务端素数因子;
[0100] S402,对所述第二客户端素数因子和所述当前待合成第二服务端素数因子进行第二预定运算,获得第二待定合成因子;
[0101] S403,若获得的第二待定合成因子为合数,则选取下一个未进行过所述第二预定运算的第二服务端素数因子作为所述当前待合成第二服务端素数因子,并返回所述步骤S402,直至获得的第二待定合成因子为素数。
[0102] 所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
[0103] 需要说明的是,本实施例中,步骤S301~步骤S303,与步骤S401~步骤S403,两者可彼此独立,互不影响,并且,在执行过程中,两者没有必然的时间先后顺序。即,在一个具体的示例中,可以先执行步骤S301~步骤S303,以获得为素数的第一待定合成因子,再执行步骤S401~步骤S403,以获得为素数的第二待定合成因子;在另一个具体的示例中,也可以先执行步骤S401~步骤S403,再执行步骤S301~步骤S303;在又一个具体的示例中,步骤S301~步骤S303和步骤S401~步骤S403,两者可以并行执行。
[0104] 以下结合一个具体示例对本实施例获取合成素数对的方法进行详细说明。
[0105] 假设,可信服务端接收到服务端发送的M个第一素数因子对,分别为:M为大于1的正整数,接收到T个客户端发送的第二素数因子对,分
别为 T为正整数,并且,第一预定预算和第二预定运算均
为加法运算。另外,分别用p和q两个参数来表示合成素数对中的两个素数。
[0106] 一方面,可信服务端从M个第一服务端素数因子 中,选取 作1
为当前待合成第一服务端素数因子。再计算当前第一待定合成因子p,
1 1
然后对p进行合素性检测,若p为素数,则意味着找到了合成素数对中的一个素数,则设p=
1 1
p ;若p 为合数(即非素数),则选取 作为当前待合成第一服务端素数因子,并计算当前第
2 2 2
一待定合成因子p, 再次对p进行合素性检测,若p为素数,则设p=
2 2
p ,若p仍为合数,则选取 作为当前待合成第一服务端素数因子,以此类推,执行相同的操作,直至获得的第一待定合成因子为素数时,将该为素数的第一待定合成因子设为p。
[0107] 另一方面,可信服务端从M个第二服务端素数因子 中,选1
取 作为当前待合成第二服务端素数因子。再计算当前第二待定合成因子q ,然后采用预定的素性检测算法对 进行素性验证,若 为素数,则意
味着找到了合成素数对中的另一个素数,设 若 为合数,则选取 作为当前待合成第
2 2
二服务端素数因子,并计算当前第二待定合成因子q , 再次对q 进行
2 2 2
素性验证,若q为素数,则设q=q ;若q 仍为合数,则选取 作为当前待合成第二服务端素数因子,以此类推,执行相同的操作,直至当前第二待定合成因子为素数时,将该为素数的第二待定合成因子设为q。
[0108] 最终,合成素数对包括素数p和素数q。
[0109] 还需要说明的是,在本实施例中,若对第一客户端素数因子和本次接收到的M个第一服务端素数因子中的各第一服务端素数因子分别进行加法运算后,均未获得为素数的第一待定合成因子,则可向服务端发送重发通知,该重发通知用于触发服务端重新生成预设个数的第一服务端素数因子,并将其发送给可信服务端。相应地,可信服务端重新执行上述获取为素数的第一待定合成因子的操作。对于第二客户端素数因子和第二服务端素数因子的处理类似,此处不加赘述。
[0110] 此外,得到合成素数对后,可信服务端可将获得该合成素数对所使用的第一素数因子对和第二素数因子对从本地数据库中销毁,以防止数据泄露,增强密钥生成的安全性。
[0111] 基于本实施例获得的合成素数对,有利于构造基于因式分解困难的RSA密钥。
[0112] 在另一个实施例中,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子,并且可信服务器接收到的来自服务端的第一密钥生成请求中包括的第一素数因子对的数目、以及来自客户端的第二密钥生成请求中包括的第二素数因子对的数目可均为一个。
[0113] 在此情况下,一并参照图5和图6,图2中示出的步骤S206,可以包括如下步骤S501至步骤S503、以及步骤S601至步骤S603。
[0114] S501,对所述第一服务端素数因子和所述第一客户端素数因子进行第一预定运算,获得第一待定合成因子;
[0115] S502,检测所述第一待定合成因子的第一属性,所述第一属性包括合素性;
[0116] S503,若所述第一待定合成因子为合数,获取第一调整值,并基于所述第一调整值更新所述第一待定合成因子,并返回所述步骤S502,直至更新获得的所述第一待定合成因子为素数。
[0117] S601,对所述第二服务端素数因子和所述第二客户端素数因子进行第二预定运算,获得第二待定合成因子;
[0118] S602,检测所述第二待定合成因子的第二属性,所述第二属性包括合素性;
[0119] S603,若所述第二待定合成因子为合数,获取第二调整值,并基于所述第二调整值更新所述第二待定合成因子,并返回所述步骤S602,直至更新获得的所述第二待定合成因子为素数。
[0120] 所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
[0121] 需要说明的是,本实施例中,步骤S501~步骤S503,与步骤S601~步骤S603,两者可彼此独立,互不影响,并且,在执行过程中,两者没有必然的时间先后顺序。即,在一个具体的示例中,可以先执行步骤S501~步骤S503,以获得为素数的第一待定合成因子,再执行步骤S601~步骤S603,以获得为素数的第二待定合成因子;在另一个具体的示例中,可以先执行步骤S601~步骤S603,再执行步骤S501~步骤S503;在又一个具体的示例中,步骤S501~步骤S503和步骤S601~步骤S603,两者可以并行执行。
[0122] 第一调整值可以为位数为 比特的种子因子。此外,第一调整值可以为预设的固定值,也可以为变化的数值,即每次执行步骤S503后,获取的第一调整值可互不相同。需要说明的是,第二调整值类似,此处不加赘述。
[0123] 步骤S503中,基于第一调整值更新第一待定合成因子是指,使执行步骤S503之前的第一待定合成因子,与执行完步骤S503后获得的第一待定合成因子不相同。
[0124] 在一个具体的示例中,可以为对当前第一调整值和当前第一服务端素数因子进行预定的运算,获得更新后的第一服务端素数因子,从而计算更新后的第一待定合成因子。例如,当前第一服务端素数因子为ps,当前第一客户端素数因子为pc,当前第一待定合成因子为p,且p=ps+pc,当前第一调整值为seedp,并且预定的运算为异或运算,则可以先获得更新后的第一服务端素数因子p's, 再计算更新后的第一待定合成因子p',p'=p′s+pc。
[0125] 在另一个具体的示例中,也可以为对当前第一调整值和当前第一客户端素数因子进行预定的运算,获得更新后的第一客户端素数因子,从而计算更新后的第一待定合成因子。例如,当前第一服务端素数因子为ps,当前第一客户端素数因子为pc,当前第一待定合成因子为p,且p=ps+pc,当前第一调整值为seedp,并且预定的运算为异或运算,则可以先获得更新后的第一客户端素数因子p'c, 再计算更新后的第一待定合成因子p',p'=ps+p'c
[0126] 在又一个具体的示例中,还可以为对第一调整值和当前第一合成因子进行预定的运算,获得更新后的第一合成素数因子。例如,当前第一服务端素数因子为ps,当前第一客户端素数因子为pc,当前第一待定合成因子为p,且p=ps+pc,当前第一调整值为seedp,并且预定的运算为异或运算,则可以直接计算更新后的第一待定合成因子p',
[0127] 此外,需要说明的是,对于步骤S603中,基于第二调整值更新第二待定合成因子的处理类似,此处不加赘述。
[0128] 此外,上述运算的运算规则可基于实际需求进行设定。设定为异或运算时,可以更好地保持数据运算过程中的随机性,提高获得为素数的第一待定合成因子和为素数的第二待定合成因子的速度,从而提高生成RSA密钥的效率。
[0129] 以下结合一个具体示例对本实施例获取合成素数对的方法进行详细说明。
[0130] 假设,可信服务端接收到的服务端发送的第一素数因子对为(ps1,qs1),接收到T个客户端发送的第二素数因子对,分别为 T为正整数,并且,第一预定预算和第二预定运算均为加法运算。另外,分别用p和q两个参数来表示合成素数对中的两个素数。
[0131] 一方面,可信服务端计算当前第一待定合成因子p1, 然后1 1
通过预定的合素性检测算法对p进行合素性检测,若p为素数,则意味着找到了合成素数对
1 1
中的一个素数,则设p=p ;若p为合数,则获取当前第一调整值seedp1,计算当前第一服务端
2
素数因子ps2, 并计算当前第一待定合成因子p ,
2 2 2 2
然后对p进行合素性检测,若p 为素数,则设p=p ,若p仍为合数,则获取当前第一调整值seedp2,计算当前第一服务端素数因子ps3, 以此类推,执行相同的操作,直至获得的第一待定合成因子为素数时,将该为素数的第一待定合成因子设为p。
1
[0132] 另一方面,可信服务端计算当前第二待定合成因子q , 然后1 1
通过预定的合素性检测算法对q进行合素性检测,若q为素数,则意味着找到了合成素数对
1 1
中的另一个素数,设q=q ;若q 为合数,则获取当前第二调整值seedq1,计算当前第二服务
2
端素数因子qs2, 并计算当前第二待定合成因子q ,
2 2 2 2
然后对q 进行合素性检测,若q 为素数,则设q=q ,若q仍为合数,则获取当前第二调整值seedq2,计算当前第二服务端素数因子qs3, 以此类推,执行相同的操作,直至获得的第二待定合成因子为素数时,将该为素数的第二待定合成因子设为q。
[0133] 最终,合成素数对包括素数p和素数q。
[0134] 此外,得到合成素数对后,可信服务端可将获得该合成素数对所使用的第一素数因子对和第二素数因子对从本地数据库中销毁,以防止数据泄露,增强密钥生成的安全性。
[0135] 基于本实施例获得的合成素数对,有利于构造基于因式分解困难的RSA密钥。
[0136] 在又一个实施例中,所述第一属性和所述第二属性均还包括奇偶性。
[0137] 在此情况下,在检测所述第一待定合成因子的合素性的步骤之前,还包括:
[0138] 检测所述第一待定合成因子的奇偶性;
[0139] 若所述第一待定合成因子为偶数,则将所述第一待定合成因子调整为奇数。
[0140] 另外,在检测所述第二待定合成因子的合素性的步骤之前,还包括:
[0141] 检测所述第二待定合成因子的奇偶性;
[0142] 若所述第二待定合成因子为偶数,则将所述第二待定合成因子调整为奇数。
[0143] 需要说明的是,本实施例在上一个实施例的区别在于,本实施例在检测第一待定合成因子和第二待定合成因子的合素性的步骤之前,分别增设了检测第一待定合成因子和第二待定合成因子的奇偶性的步骤。即,在本实施例中,上述步骤S502可包括如下步骤:先检测第一待定合成因子的奇偶性,若检测到该第一待定合成因子为奇数,则进一步检测该第一待定合成因子的合素性;若检测到该第一待定合成因子为偶数,则先将该第一待定合成因子调整为奇数,再检测调整后的第一待定合成因子的合素性。此外,所述步骤S602类似,此处不加赘述。
[0144] 还需要说明的是,与上一个实施例类似,在本实施例中,若检测到第一待定合成因子为合数,则获取第一调整值,并基于该第一调整值更新该第一待定合成因子。具体地,可以基于当前第一调整值分别对当前第一服务端素数因子和当前第一客户端素数因子进行预定的运算,获得更新后的第一服务端素数因子和更新后的第一客户端素数因子,从而计算更新后的第一待定合成因子。其中,预定的运算可基于实际需求进行设定,例如,可以设定为加法运算。例如,当前第一服务端素数因子为ps,当前第一客户端素数因子为pc,当前第一待定合成因子为p,且p=ps+pc,当前第一调整值为1,并且预定的运算为加法运算,则可以先获得更新后的第一服务端素数因子p's和更新后的第一客户端因子p'c,p's=ps+1,p'c=pc+1,再计算更新后的第一待定合成因子p',p'=p's+p'c。
[0145] 此外,对第二待定合成因子的处理过程类似,此处不加赘述。
[0146] 可以理解的是,除2以外的偶数,均不是素数,相较于合素性检测,奇偶性检测更为简单,并且在RSA密钥生成过程中,一般不考虑2这个较小的数。因此,本实施例中,先对第一待定合成因子进行奇偶性检测,若检测到第一待定合成因子为偶数,则先将该第一待定合成因子调整为奇数,再对调整后的第一待定合成因子进行合素性检测,能够避免不必要的运算,从而有效地提高获得为素数的第一待定合成因子的效率。需要说明的是,对第二待定合成因子的处理类似,此处不加赘述。
[0147] 在一个实施例中,可信服务端可先生成完整的私钥指数,再获得该私钥指数包含的服务端的私钥指数份额和客户端的私钥指数份额。
[0148] 在此情况下,所述步骤S210,可以包括如下步骤:
[0149] 获取公钥指数;
[0150] 基于所述公钥指数及所述欧拉函数值计算私钥指数;
[0151] 获取所述客户端/所述服务端的私钥指数份额;
[0152] 基于所述私钥指数、所述客户端/所述服务端的私钥指数份额以及所述欧拉函数值计算所述服务端/所述客户端的私钥指数份额;
[0153] 所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
[0154] 其中,公钥指数需满足国际加密消息的语法标准(PKCS#1)对RSA密钥的要求,具体地,公钥指数需大于1且小于欧拉函数值,并且与欧拉函数值互质。此外,公钥指数可以随机生成。
[0155] 在一个具体的示例中,可以采用下述公式计算私钥指数: 其中,d为私钥指数; 为欧拉函数值;e为公钥指数。
[0156] 在一个实施例中,可以获取客户端的私钥指数份额,再基于私钥指数、该客户端的私钥指数份额以及欧拉函数值计算服务端的私钥指数份额。
[0157] 在一个具体的示例中,客户端的私钥指数份额可以由可信服务端随机生成。另外,可以采用下述公式计算服务端的私钥指数份额: 其中,ds为服务端的私钥指数份额;d为私钥指数; 为T个客户端中的第t个客户端的私钥指数份额,t为小于或等于T的正整数。
[0158] 需要说明的是,在另一个实施例中,可以获取服务端的私钥指数份额,再基于私钥指数、该服务端的私钥指数份额以及欧拉函数值计算客户端的私钥指数份额。类似地,服务端的私钥指数份额可以由可信服务端随机生成。
[0159] 基于此,在一个具体示例中,对于客户端数目只有一个的情况,可以由可信服务端随机生成服务端的私钥指数份额,再基于 这一公式计算该客户端的私钥指数份额。其中,dc为客户端的私钥指数份额,ds为服务端的私钥指数份额,d为私钥指数。
[0160] 在另一个具体示例中,对于客户端数目为T个,且T为大于1的正整数的情况,可以由可信服务端随机生成服务端的私钥指数份额和(T‑1)个客户端的私钥指数份额,再基于这一公式计算T个客户端中剩余的一个客户端(以下简称剩余客户端)的私钥指数份额。其中, 为剩余客户端的私钥指数份额,即第j个客户端的私钥指数份额;ds为服务端的私钥指数份额;d为私钥指数; 为(T‑1)个客户端中的第t个客户端的私钥指数份额,t为小于或等于(T‑1),且不等于j的正整数。
[0161] 此外,在又一个具体示例中,对于服务端数目为T个,且T大于1,客户端数目为一个的情况,可以由可信服务端随机生成各服务端的私钥指数份额,再基于这一公式,计算客户端的私钥指数份额。其中,dc为客户端的私钥指数份额;d为私钥指数;
为T个服务端中的第t个服务端的私钥指数份额,t为小于或等于T的正整数。
[0162] 可信服务端获得服务端的私钥指数份额和客户端的私钥指数份额后,可将服务端的私钥指数份额发送至服务端,服务端可将接收到的服务端的私钥指数份额安全地存储或保持秘密。并且,可将客户端的私钥指数份额发送至对应的客户端,类似地,客户端可将接收到的相应客户端的私钥指数份额安全地存储或保持秘密。其中,可信服务端可通过SSL安全信道向服务端和客户端发送对应的私钥指数份额。
[0163] 此外,需要说明的是,RSA密钥的公钥包括RSA模数和公钥指数。RSA密钥的私钥可包括两个部分,一个部分可包括服务端的私钥指数份额、以及与生成的合成素数对相匹配的服务端发送的第一素数因子对,这部分可由服务端安全地存储或保持秘密。另一个部分可包括客户端的私钥指数份额以及与生成的合成素数对相匹配的客户端发送的第二素数因子对,这部分可由客户端安全地存储或保持秘密。
[0164] 还需要说明的是,与生成的合成素数对相匹配的服务端发送的第一素数因子对,指的是可信服务端生成合成素数对所使用的服务端发送的第一素数因子对,类似地,与生成的合成素数对相匹配的客户端发送的第二素数因子对,指的是可信服务端生成合成素数对所使用的客户端发送的第二素数因子对。例如,可信服务端接收到客户端发送的第二素数因子对为 接收到服务端发送的4个第一素数因子对,分别为:和 最终,可信服务端基于 生成了合成素数对,在此情况下,
则为与生成的合成素数对相匹配的客户端发送的第二素数因子对, 则为与生成的合成素数对相匹配的服务端发送的第一素数因子对。
[0165] 在一个具体的示例中,将服务端的私钥指数份额和客户端的私钥指数份额分别发送至服务端和客户端后,可信服务端可将私钥指数、服务端的私钥指数份额、客户端的私钥指数份额以及欧拉函数值从本地数据库中销毁,以防止数据泄露,提高RSA密钥生成的安全性。
[0166] 还需要说明的是,在传统方法中,私钥指数是由各通信参与方(服务端和客户端)协同计算获得,需要使用茫然传输协议等高消耗的密码工具,因而开销比较大。但在本实施例中,私钥指数由可信服务端单方运算完成,避开了传统方法中所使用的高消耗的密码工具,大大简化了计算过程。
[0167] 在另一个实施例中,所述第一密钥生成请求还包括第一私钥因子,所述第二密钥生成请求还包括第二私钥因子,可信服务端可计算公开参数对,再获得基于该公开参数对生成的服务端的私钥指数份额和客户端的私钥指数份额。
[0168] 在此情况下,所述步骤S210,可以包括如下步骤:
[0169] 获取公钥指数;
[0170] 基于所述欧拉函数值、所述第一私钥因子、所述第二私钥因子、所述公钥指数生成第一参数;
[0171] 当所述第一参数与所述公钥指数互质时,基于所述第一参数和所述公钥指数计算公开参数对;
[0172] 获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额;
[0173] 所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
[0174] 需要说明的是,本实施例中的公钥指数与上一个实施例中的公钥指数相同,此处不加赘述。
[0175] 其中,第一私钥因子和第二私钥因子均可以为随机数,且它们的位数可均为3σ比特。
[0176] 在一个具体的示例中,可以采用下述公式计算第一参数:其中,γ为第一参数;λ为位数为2σ比特的随机数; 为欧拉函数;rs为第一私钥因子;
为T个所述客户端中的第t个客户端的第二密钥请求中的第二私钥因子,t为小于或等于T的正整数;e为公钥指数。
[0177] 在一个具体的示例中,可以基于扩展欧几里得算法计算公开参数对(x,y),其中,x和y满足下述条件:xγ+ye=1。
[0178] 并且,公开参数对(x,y)可用于生成服务端的私钥指数份额和客户端的私钥指数份额。具体地,T个客户端中的第t个客户端的私钥指数份额为 服务端的私钥指数份额为ds,ds=xrs+y。
[0179] 此外,需要说明的是,RSA密钥的公钥包括RSA模数和公钥指数。RSA密钥的私钥可包括两个部分,一个部分可包括服务端的私钥指数份额、以及与生成的合成素数对相匹配的服务端发送的第一素数因子对,这部分可由服务端安全地存储或保持秘密。另一个部分可包括客户端的私钥指数份额以及与生成的合成素数对相匹配的客户端发送的第二素数因子对,这部分可由客户端安全地存储或保持秘密。
[0180] 还需要说明的是,与生成的合成素数对相匹配的服务端发送的第一素数因子对,指的是可信服务端生成合成素数对所使用的服务端发送的第一素数因子对;类似地,与生成的合成素数对相匹配的客户端发送的第二素数因子对,指的是可信服务端生成合成素数对所使用的客户端发送的第二素数因子对。例如,可信服务端接收到客户端发送的第二素数因子对为 接收到服务端发送的4个第一素数因子对,分别为:和 最终,可信服务端基于 生成了合成素数对,在此情况下,
则为与生成的合成素数对相匹配的客户端发送的第二素数因子对, 则为与生成的合成素数对相匹配的服务端发送的第一素数因子对。
[0181] 在一个实施例中,可信服务端计算获得公开参数对后,可继续由可信服务端生成服务端的私钥指数份额和客户端的私钥指数份额。
[0182] 在此情况下,所述获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额的步骤,可以包括如下步骤:
[0183] 基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
[0184] 在本实施例中,可由可信服务端生成服务端的私钥指数份额和客户端的私钥指数份额,后续再将服务端的私钥指数份额发送至服务端,将客户端的私钥指数份额发送至相应的客户端。
[0185] 此外,将服务端的私钥指数份额和客户端的私钥指数份额分别发送至服务端和对应的客户端后,可信服务端还可将欧拉函数值、第一私钥因子、第二私钥因子、服务端的私钥指数份额以及客户端的私钥指数份额从本地数据库中销毁,以防止数据泄露,提高RSA密钥生成的安全性。
[0186] 在另一个实施例中,可信服务端计算获得公开参数对后,可由服务端和相应的客户端自行生成对应的私钥指数份额。
[0187] 在此情况下,所述获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额的步骤,可以包括如下步骤:
[0188] 将所述公开参数对发送至所述服务端和所述客户端,以使所述服务端基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并使得所述客户端基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
[0189] 在本实施例中,可信服务端可将生成的公开参数对发送至服务端和对应的客户端,使服务端自行生成服务端的私钥指数份额,以及使对应的客户端自行生成客户端的私钥指数份额。需要说明的是,相较于上一个实施例,本实施例的安全性更高。
[0190] 需要说明的是,可信服务端可通过普通或安全信道将公开参数对直接发送至服务端和对应的客户端,或者,可信服务端可将公开参数对公开,如在预定的网站上进行公布,以供服务端和客户端下载。
[0191] 此外,生成公开参数对后,可信服务端还可将欧拉函数值、第一私钥因子、第二私钥因子从本地数据库中销毁,以防止数据泄露,提高RSA密钥生成的安全性。
[0192] 应该理解的是,虽然图2至图6的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2至图6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0193] 基于与上述方法相同的思想,一个实施例中还提供一种RSA密钥生成装置,参照图7,所述装置700包括:
[0194] 第一请求接收模块702,用于接收服务端发送的第一密钥生成请求,所述第一密钥生成请求包括第一素数因子对;
[0195] 第二请求接收模块704,接收客户端发送的第二密钥生成请求,所述第二密钥生成请求包括第二素数因子对;
[0196] 素数对合成模块706,用于对所述第一素数因子对和所述第二素数因子对进行合成,获得合成素数对;
[0197] RSA参数计算模块708,用于基于所述合成素数对计算RSA模数和欧拉函数值;
[0198] RSA密钥获取模块710,用于基于所述RSA模数和所述欧拉函数值获得RSA密钥。
[0199] 上述RSA密钥生成装置,获取服务端和客户端发送的密钥生成请求,并基于获得的密钥生成请求获得合成素数对,再基于该合成素数对计算RSA模数及欧拉函数值,以及基于该RSA模数及欧拉函数值生成RSA密钥。可见,将复杂的运算移交第三方设备完成,无需服务端和客户端之间进行多次交互,且能够避免使用高消耗的密码工具,因而有效地降低了通信和计算的复杂程度,提高了RSA密钥的生成效率。
[0200] 在一个实施例中,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子,所述第一素数因子对的数目大于一个。此时,所述素数对合成模块706,可以包括:
[0201] 第一初始因子选取单元,用于从各所述第一服务端素数因子中选取一个第一服务端素数因子,作为当前待合成第一服务端素数因子;
[0202] 第一合成因子获取单元,用于对所述第一客户端素数因子和所述当前待合成第一服务端素数因子进行第一预定运算,获得第一待定合成因子;
[0203] 第一服务端因子更新单元,用于若获得的第一待定合成因子为合数,则选取下一个未进行过所述第一预定运算的第一服务端素数因子作为所述当前待合成第一服务端素数因子,并调用所述第一合成因子获取单元,直至获得的第一待定合成因子为素数;
[0204] 第二初始因子选取单元,用于从各所述第二服务端素数因子中选取一个第二服务端素数因子,作为当前待合成第二服务端素数因子;
[0205] 第二合成因子获取单元,用于对所述第二客户端素数因子和所述当前待合成第二服务端素数因子进行第二预定运算,获得第二待定合成因子;
[0206] 第二服务端因子更新单元,用于若获得的第二待定合成因子为合数,则选取下一个未进行过所述第二预定运算的第二服务端素数因子作为所述当前待合成第二服务端素数因子,并调用所述第二合成因子获取单元,直至获得的第二待定合成因子为素数;
[0207] 所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
[0208] 在另一个实施例中,所述第一素数因子对包括第一服务端素数因子和第二服务端素数因子,所述第二素数因子对包括第一客户端素数因子和第二客户端素数因子,且所述第一素数因子对的数目为一。此时,所述素数对合成模块706,可以包括:第三合成因子获取单元,用于对所述第一服务端素数因子和所述第一客户端素数因子进行第一预定运算,获得第一待定合成因子;
[0209] 第一属性检测单元,用于检测所述第一待定合成因子的第一属性,所述第一属性包括合素性;
[0210] 第一合成因子更新单元,用于在所述第一待定合成因子为合数时,获取第一调整值,并基于所述第一调整值更新所述第一待定合成因子,以及调用所述第一属性检测单元,直至更新获得的所述第一待定合成因子为素数;
[0211] 第四合成因子获取单元,用于对所述第二服务端素数因子和所述第二客户端素数因子进行第二预定运算,获得第二待定合成因子;
[0212] 第二属性检测单元,用于检测所述第二待定合成因子的第二属性,所述第二属性包括合素性;
[0213] 第二合成因子更新单元,用于当所述第二待定合成因子为合数时,获取第二调整值,并基于所述第二调整值更新所述第二待定合成因子,以及调用所述第二属性检测单元,直至更新获得的所述第二待定合成因子为素数;
[0214] 所述合成素数对包括为素数的所述第一待定合成因子和为素数的所述第二待定合成因子。
[0215] 在一个实施例中,所述第一属性和所述第二属性均还包括奇偶性;
[0216] 此时,所述第一属性检测单元,还可以包括:
[0217] 第一奇偶性检测子单元,用于检测所述第一待定合成因子的奇偶性,并在所述第一待定合成因子为偶数时,将所述第一待定合成因子调整为奇数;
[0218] 另外,所述第二属性检测单元,还可以包括:
[0219] 第二奇偶性检测子单元,用于检测所述第二待定合成因子的奇偶性,并在所述第二待定合成因子为偶数时,将所述第二待定合成因子调整为奇数。
[0220] 在一个实施例中,所述RSA密钥获取模块710,可以包括:
[0221] 第一公钥指数模块,用于获取公钥指数;
[0222] 私钥指数计算模块,用于基于所述公钥指数及所述欧拉函数值计算私钥指数;
[0223] 第一客户端/所述服务端份额获取模块,用于获取所述客户端/所述服务端的私钥指数份额;
[0224] 第一服务端/所述客户端份额计算模块,用于基于所述私钥指数、所述客户端/所述服务端的私钥指数份额以及所述欧拉函数值计算所述服务端/所述客户端的私钥指数份额;
[0225] 所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
[0226] 在一个实施例中,所述第一密钥生成请求还包括第一私钥因子,所述第二密钥生成请求还包括第二私钥因子。此时,所述RSA密钥获取模块710,可以包括:
[0227] 第二公钥指数模块,用于获取公钥指数;
[0228] 第一参数生成模块,用于基于所述欧拉函数值、所述第一私钥因子、所述第二私钥因子、所述公钥指数生成第一参数;
[0229] 参数对计算模块,用于当所述第一参数与所述公钥指数互质时,基于所述第一参数和所述公钥指数计算公开参数对;
[0230] 私钥份额获取模块,用于获取基于所述公开参数对生成的所述服务端的私钥指数份额及所述客户端的私钥指数份额;
[0231] 所述RSA密钥包括所述RSA模数、所述客户端的私钥指数份额和所述服务端的私钥指数份额。
[0232] 在一个实施例中,上述私钥份额获取模块,可以包括:
[0233] 第一私钥份额获取单元,用于基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
[0234] 在另一个实施例中,上述私钥份额获取模块,可以包括:
[0235] 第二私钥份额获取单元,用于将所述公开参数对发送至所述服务端和所述客户端,以使所述服务端基于所述第一私钥因子及所述公开参数对生成所述服务端的私钥指数份额,并使得所述客户端基于所述第二私钥因子及所述公开参数对生成所述客户端的私钥指数份额。
[0236] 图8示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的可信服务端130。如图8所示,该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现RSA密钥的生成方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行RSA密钥的生成方法。
[0237] 本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0238] 在一个具体的示例中,本申请的各实施例提供的RSA密钥的生成装置可以实现为一种计算机程序的形式,计算机程序可在如图8所示的计算机设备上运行。计算机设备的存储器中可存储组成该RSA密钥的生成装置的各个程序模块,比如,图5所示的第一请求接收模块702、第二请求接收模块704、素数对合成模块706、RSA参数计算模块708和RSA密钥获取模块710。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的RSA密钥的生成方法中的步骤。
[0239] 例如,图8所示的计算机设备可以通过如图7所示的RSA密钥的生成装置中的第一请求接收模块702执行步骤S202,可通过第二请求接收模块704执行步骤S204,可通过素数对合成模块706执行步骤S206,以及可通过RSA密钥获取模块710执行步骤S210等。
[0240] 为此,一个实施例中还提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行本申请提供的任一实施例中的RSA密钥的生成方法的步骤。
[0241] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
[0242] 为此,一个实施例中还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行本申请提供的任一实施例中的RSA密钥的生成方法的步骤。
[0243] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0244] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
QQ群二维码
意见反馈