一种在嵌入式系统中生成密钥对的实现方法和装置与流程

文档序号:14993325发布日期:2018-07-20 22:56阅读:232来源:国知局

本发明涉及信息安全领域,尤其涉及一种在嵌入式系统中生成密钥对的实现方法和装置。



背景技术:

在rsa密码系统中,系统的安全性基于如下难题:将两个大素数相乘很容易,但是反过来将它们的积再因式分解则变得非常困难,因此,rsa密码系统的安全性与素数判定、大数分解密切相关,且rsa密码体系的安全性关键在于大素数p和q的选择,经密码分析(如pollard的p-1方法、williams的p+1方法、循环攻击方法等)发现有一类素数存在某些弱特性,根据这些弱特性,攻击者可以通过分解n(两个大素数的乘积)而直接得到有用信息甚至完全破解密码系统。因此,由于对抗密码分析的需要,在比较安全的场合下,必须使用强素数或者确定性素数,来达到抵抗常用的攻击方法的目的。

现有的安全密码体制中,rsa生成密钥对通常采取的方法为:(1)生成两个大的随机奇数;(2)对这两个随机数做初步筛选预处理,如小素数试除处理等;(3)使用概率素性判断方法(如miller-rabin素性测试方法等)对这两个随机数进行素性测试,若通不过测试,则返回(1)重新开始,直到通过素性测试得到素数p和q;(4)通过公钥指数e,素数p和q计算rsa密钥对的其他参数如公钥模数n、私钥d。

通过上述方法产生的rsa密钥对,由于涉及到的大素数仅仅为概率素数,即该素数很大概率上为真正的素数,但是也有很小的概率不是真正的素数。另一方面,通过上述方法产生的rsa密钥对,由于使用的大素数是概率素数,不能抵抗常用的pollard的p-1攻击方法。在安全性要求比较高的场合,上述方法会存在一定的隐患,因此,亟待需要提供一种使用确定性素数生成密钥对的实现方法。



技术实现要素:

本发明的目的是为了克服现有技术的不足,提供一种在嵌入式系统中生成密钥对的实现方法和装置。

本发明提供了一种在嵌入式系统中生成密钥对的实现方法,包括:

步骤s1:当cpu接收到生成密钥对指令时,从所述生成密钥对指令中获取rsa公钥指数、rsa模长、rsa密钥对类型;

步骤s2:所述cpu调用随机数生成接口生成与所述rsa模长的安全性相匹配的第一种子;

步骤s3:所述cpu分别根据所述rsa模长、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数;

步骤s4:所述cpu检测所述rsa密钥对类型,如为第一预设类型则执行步骤s5,如为第二预设类型则执行步骤s6;

步骤s5:所述cpu根据所述rsa模长、所述rsa公钥指数、所述第一确定性素数和所述第二确定性素数调用大数乘法接口、大数模逆接口、模乘接口、模减接口生成第一预设类型的rsa公钥模数和rsa私钥,根据所述rsa公钥模数和所述rsa公钥指数组成rsa公钥,保存所述rsa公钥和所述rsa私钥;

步骤s6:所述cpu根据所述rsa模长、所述rsa公钥指数、所述第一确定性素数和所述第二确定性素数调用大数乘法接口、大数除法接口、模乘接口、大数模逆接口生成第二预设类型的rsa公钥模数和rsa私钥,根据所述rsa公钥模数和所述rsa公钥指数组成rsa公钥,保存所述rsa公钥和所述rsa私钥。

进一步地,所述步骤s2包括:

步骤s21:所述cpu根据所述rsa模长计算rsa算法的安全比特强度;

步骤s22:所述cpu调用随机数生成接口生成对应于所述rsa算法的安全比特强度的第一种子。

进一步地,所述步骤s3包括:

步骤s31:所述cpu判断所述rsa模长、所述rsa公钥指数、所述第一种子是否满足预定条件,是则执行步骤s32,否则报错;

步骤s32:所述cpu分别根据所述rsa模长、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数,更新所述第一种子;

步骤s33:所述cpu判断所述第一确定性素数和所述第二确定性素数的差值是否在预设范围内,是则返回步骤s32,否则执行步骤s4。

进一步地,所述步骤s3包括:

步骤s3-1:所述cpu根据所述rsa模长计算第一确定性素数比特长度,并获取第一辅助素数比特长度和第二辅助素数比特长度,根据所述第一确定性素数比特长度、所述第一辅助素数比特长度、所述第二辅助素数比特长度、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数;

步骤s3-2:所述cpu根据所述rsa模长计算第二确定性素数比特长度,并获取第四辅助素数比特长度、第五辅助素数比特长度,根据所述第二确定性素数比特长度、所述第四辅助素数比特长度、所述第五辅助素数比特长度、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二确定性素数。

进一步地,所述步骤s3-1中的所述cpu根据所述rsa模长计算得到第一确定性素数比特长度,具体为:所述cpu将所述rsa模长的一半作为第一确定性素数比特长度。

进一步地,所述步骤s3-1中的所述根据所述第一确定性素数比特长度、所述第一辅助素数比特长度、所述第二辅助素数比特长度、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数,包括:

步骤a1:所述cpu根据所述第一确定性素数比特长度、所述第一辅助素数比特长度、所述第二辅助素数比特长度和所述第一种子调用哈希算法接口、大数加法接口、模乘接口、模加接口、模幂接口产生满足第一预设条件的第二备用素数;

步骤a2:所述cpu调用大数减法接口、计算最大公因子接口判断所述第二备用素数减去第一设定数据的结果与所述rsa公钥指数的最大公因子是否均为1,是则执行步骤a3,否则返回步骤a1;

步骤a3:所述cpu调用素性检测接口对所述第二备用素数进行素性检测,并判断素性检测是否通过,是则执行步骤a4,否则返回步骤a1;

步骤a4:所述cpu将第二备用素数作为第一确定性素数,更新所述第一种子。

进一步地,所述步骤a1包括:

步骤a1-1:所述cpu判断所述第一确定性素数比特长度、所述第一辅助素数比特长度和所述第二辅助素数比特长度是否满足预定条件,是则执行步骤a1-2,否则报错;

步骤a1-2:所述cpu判断所述第一辅助素数比特长度是否为第一预设数据,是则执行步骤a1-3,否则执行步骤a1-4;

步骤a1-3:所述cpu控制所述协处理器生成第一辅助素数和第一中间种子,执行步骤a1-5;

步骤a1-4:所述cpu根据所述第一辅助素数比特长度和所述第一种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一辅助素数和第一中间种子,执行步骤a1-5;

步骤a1-5:所述cpu判断所述第二辅助素数比特长度是否为第一预设数据,是则执行步骤a1-6,否则执行步骤a1-7;

步骤a1-6:所述cpu控制所述协处理器生成第二辅助素数和第二中间种子,执行步骤a1-8;

步骤a1-7:所述cpu根据所述第二辅助素数比特长度和所述第一中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二辅助素数和第二中间种子,执行步骤a1-8;

步骤a1-8:所述cpu根据所述第一确定性素数比特长度得到第三长度,根据第三长度和第二中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第三辅助素数和第三中间种子;

步骤a1-9:所述cpu根据所述第三中间种子调用哈希算法接口、大数加法接口生成第三随机数,将所述第三随机数的最高两个比特位均置为1;

步骤a1-10:所述cpu调用大数乘法接口、计算最大公因子接口判断所述第三辅助素数与所述第一辅助素数的乘积与所述第二辅助素数的最大公因子是否为1,是则执行步骤a1-11,否则报错;

步骤a1-11:所述cpu根据所述第一确定性素数比特长度、所述第三随机数、所述第一辅助素数、所述第二辅助素数、所述第三辅助素数调用哈希算法接口、大数加法接口产生满足第一预设条件的第二备用素数。

进一步地,所述步骤a1-4包括:

步骤a1-41:所述cpu判断第一辅助素数比特长度是否小于第二预设数据,是则报错,否则将所述第一辅助素数比特长度值赋值给第一比特长度,执行步骤a1-42;

步骤a1-42:所述cpu判断所述第一比特长度是否小于第一预设值,是则执行步骤a1-44,否则执行步骤a1-43;

步骤a1-43:所述cpu更新所述第一比特长度,返回步骤a1-42;

步骤a1-44:所述cpu根据所述第一比特长度和所述第一种子调用哈希算法接口、大数加法接口、大数除法接口生成对应长度的第一随机整数,并将所述第一随机整数的最低比特位置为1,更新所述第一种子;

步骤a1-45:所述cpu对所述第一随机整数进行确定性素性检测,并判断素性检测是否通过,是则执行步骤a1-46,否则返回步骤a1-44;

步骤a1-46:所述cpu根据所述第一比特长度调用哈希算法接口生成对应长度的第二随机数,更新所述第一种子;

步骤a1-47:所述cpu根据所述第一随机整数和所述第二随机数调用哈希算法接口、模乘接口、模加接口、模幂接口生成中间素数;

步骤a1-48:所述cpu将所述中间素数作为第一辅助素数,将当前第一种子作为第一中间种子。

进一步地,所述步骤a1-43包括:所述cpu将所述第一比特长度右移一位得到第一数值,取所述第一比特长度的最低比特位得到第二数值,将所述第一数值、所述第二数值和第一设定数据相加得到的结果作为更新后的第一比特长度。

进一步地,所述步骤a1-47包括:

步骤b1:所述cpu调用大数移位接口、大数除法接口将所述第一随机整数左移一位得到第一临时数据,用所述第二随机数除以第一临时数据的商取上界值得到第二临时数据;

步骤b2:所述cpu调用大数乘法接口、大数加法接口将所述第二临时数据与所述第一随机整数之和左移一位的结果再加上第一设定数据得到第三临时数据;所述cpu判断所述第三临时数据的比特长度是否大于第一辅助素数比特长度,是则执行步骤b3,否则所述cpu调用大数乘法接口、大数加法接口将所述第一临时数据与所述第二临时数据的积再加第一设定数据的和作为中间素数,执行步骤a1-48;

步骤b3:所述cpu调用大数移位接口、大数除法接口将2作为底数,第一辅助素数比特长度减去第一设定数据的结果作为指数进行幂运算得到第四临时数据,用所述第四临时数据除以所述第一临时数据得到的商取上界值得到第五临时数据;

步骤b4:所述cpu调用大数乘法接口、大数加法接口将所述第一临时数据与所述第五临时数据的乘积再加第一设定数据得到的结果作为中间素数;

步骤b5:所述cpu调用素性检测接口对所述中间素数进行素性检测,并判断素性检测是否通过,是则执行步骤a1-48,否则更新所述第二临时数据的值,返回步骤b2。

进一步地,所述步骤a1-6具体包括:所述cpu将所述第二辅助素数的值赋为1,将所述第一中间种子的值赋值给所述第二中间种子。

进一步地,所述步骤a1-8中的所述cpu根据所述第一确定性素数比特长度得到第三长度具体为:所述cpu将所述第一确定性素数比特长度的一半与第一设定数据的和作为第三长度。

进一步地,所述步骤a1-9包括:

步骤a1-9-1:所述cpu调用哈希算法接口对所述第三中间种子进行计算得到第一中间哈希值,更新所述第三中间种子,判断所述第一确定性素数比特长度是否小于第一中间哈希值的长度,是则执行步骤a1-9-4,否则执行步骤a1-9-2;

步骤a1-9-2:所述cpu调用哈希算法接口对当前第一种子进行计算得到第二中间哈希值,更新第三中间种子;将所述第一中间哈希值与所述第二中间哈希值进行拼接并将拼接结果作为当前拼接值,判断所述第一确定性素数比特长度是否小于当前拼接值的长度,是则执行步骤a1-9-5,否则执行步骤a1-9-3;

步骤a1-9-3:所述cpu调用哈希算法接口对当前第三中间种子进行计算得到第三中间哈希值,更新第三中间种子;将所述当前拼接值和所述第三中间哈希值进行拼接,并用拼接结果更新当前拼接值;

步骤a1-9-4:所述cpu判断所述第一确定性素数比特长度是否小于当前拼接值的长度,是则执行步骤a1-9-5,否则返回步骤a1-9-3;

步骤a1-9-5:所述cpu从所述当前拼接值的起始位置起取第一确定性素数比特长度的数据作为第三随机数,将所述第三随机数的最高两个比特位均置为1。

本发明又提供了一种在嵌入式系统中生成密钥对的实现装置,包括:

第一获取模块,用于当接收到生成密钥对指令时,从所述生成密钥对指令中获取rsa公钥指数、rsa模长、rsa密钥对类型;

第一生成模块,用于调用随机数生成接口生成与所述rsa模长的安全性相匹配的第一种子;

第二生成模块,用于分别根据所述rsa模长、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数;

检测模块,用于检测所述第一获取模块获取的所述rsa密钥对类型,如为第一预设类型则触发第一生成保存模块,如为第二预设类型则触发第二生成保存模块;

所述第一生成保存模块,用于根据所述rsa模长、所述rsa公钥指数、所述第一确定性素数和所述第二确定性素数调用大数乘法接口、大数模逆接口、模乘接口、模减接口生成第一预设类型的rsa公钥模数和rsa私钥,根据所述rsa公钥模数和所述rsa公钥指数组成rsa公钥,保存所述rsa公钥和所述rsa私钥;

所述第二生成保存模块,用于根据所述rsa模长、所述rsa公钥指数、所述第一确定性素数和所述第二确定性素数调用大数乘法接口、大数除法接口、模乘接口、大数模逆接口生成第二预设类型的rsa公钥模数和rsa私钥,根据所述rsa公钥模数和所述rsa公钥指数组成rsa公钥,保存所述rsa公钥和所述rsa私钥。

进一步地,所述第一生成模块包括:

第一计算子模块,用于根据所述rsa模长计算rsa算法的安全比特强度;

第一生成子模块,用于调用随机数生成接口生成对应于所述rsa算法的安全比特强度的第一种子。

进一步地,所述第二生成模块包括:

第一判断子模块,用于判断所述第一获取模块获取的所述rsa模长、所述rsa公钥指数和所述第一生成模块生成的所述第一种子是否满足预定条件,是则触发生成更新子模块,否则报错;

所述生成更新子模块,用于分别根据所述rsa模长、所述第一种子和所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数,更新所述第一种子;

第二判断子模块,用于判断所述生成更新子模块生成的所述第一确定性素数和所述第二确定性素数的差值是否在预设范围内,是则触发所述生成更新子模块,否则触发所述检测模块。

进一步地,所述第二生成模块包括:

第一确定子模块,用于根据所述rsa模长计算第一确定性素数比特长度;

第一获取子模块,用于获取第一辅助素数比特长度和第二辅助素数比特长度;

第二生成子模块,用于根据所述第一确定子模块确定的所述第一确定性素数比特长度、所述第一获取子模块获取的所述第一辅助素数比特长度和所述第二辅助素数比特长度、所述第一生成模块生成的所述第一种子、所述第一获取模块获取的所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数;

第二确定子模块,用于根据所述rsa模长计算第二确定性素数比特长度;

第二获取子模块,用于获取第四辅助素数比特长度、第五辅助素数比特长度;

第三生成子模块,用于根据所述第二确定子模块确定的所述第二确定性素数比特长度、所述第二获取子模块获取的所述第四辅助素数比特长度和所述第五辅助素数比特长度、所述第一生成模块生成的所述第一种子、所述第一获取模块获取的所述rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二确定性素数。

进一步地,所述第一确定子模块具体用于将所述rsa模长的一半作为第一确定性素数比特长度。

进一步地,所述第二生成子模块包括:

第一产生单元,用于根据所述第一确定性素数比特长度、所述第一辅助素数比特长度、所述第二辅助素数比特长度和所述第一种子调用哈希算法接口、大数加法接口、模乘接口、模加接口、模幂接口产生满足第一预设条件的第二备用素数;

第一判断单元,用于调用大数减法接口、计算最大公因子接口判断所述第一产生单元产生的第二备用素数减去第一设定数据的结果与所述rsa公钥指数的最大公因子是否均为1,是则触发检测判断单元,否则触发所述第一产生单元;

所述检测判断单元,用于调用素性检测接口对所述第二备用素数进行素性检测,并判断素性检测是否通过,是则触发作为更新单元,否则触发所述第一产生单元;

所述作为更新单元,用于将第二备用素数作为第一确定性素数,更新所述第一种子。

进一步地,所述第一产生单元包括:

第一判断子单元,用于判断所述第一确定性素数比特长度、所述第一辅助素数比特长度和所述第二辅助素数比特长度是否满足预定条件,是则触发第二判断子单元,否则报错;

所述第二判断子单元,用于判断所述第一辅助素数比特长度是否为第一预设数据,是则触发第一生成子单元,否则触发第二生成子单元;

所述第一生成子单元,用于控制所述协处理器生成第一辅助素数和第一中间种子,触发第三判断子单元;

所述第二生成子单元,用于根据所述第一辅助素数比特长度和所述第一种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一辅助素数和第一中间种子,触发第三判断子单元;

所述第三判断子单元,用于判断所述第二辅助素数比特长度是否为第一预设数据,是则触发第三生成子单元,否则触发第四生成子单元;

所述第三生成子单元,用于控制所述协处理器生成第二辅助素数和第二中间种子,触发第五生成子单元;

所述第四生成子单元,用于根据所述第二辅助素数比特长度和所述第一中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二辅助素数和第二中间种子,触发第五生成子单元;

所述第五生成子单元,用于根据所述第一确定性素数比特长度得到第三长度,根据第三长度和第二中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第三辅助素数和第三中间种子;

生成置位子单元,用于根据所述第五生成单元生成的第三中间种子调用哈希算法接口、大数加法接口生成第三随机数,将所述第三随机数的最高两个比特位均置为1;

第四判断子单元,用于调用大数乘法接口、计算最大公因子接口判断所述第三辅助素数与所述第一辅助素数的乘积与所述第二辅助素数的最大公因子是否为1,是则触发第一产生子单元,否则报错;

所述第一产生子单元,用于根据所述第一确定性素数比特长度、所述第三随机数、所述第一辅助素数、所述第二辅助素数、所述第三辅助素数调用哈希算法接口、大数加法接口产生满足第一预设条件的第二备用素数。

进一步地,所述第一生成子单元包括:

第一判断组件,用于判断第一辅助素数比特长度是否小于第二预设数据,是则报错,否则将所述第一辅助素数比特长度值赋值给第一比特长度,触发第二判断组件;

所述第二判断组件,用于判断所述第一比特长度是否小于第一预设值,是则触发生成置位组件,否则触发第一更新组件;

所述第一更新组件,用于更新所述第一比特长度,触发所述第二判断组件;

所述生成置位组件,用于根据所述第一比特长度和所述第一种子调用哈希算法接口、大数加法接口、大数除法接口生成对应长度的第一随机整数,并将所述第一随机整数的最低比特位置为1,更新所述第一种子;

检测判断组件,用于对所述生成置位组件得到的第一随机整数进行确定性素性检测,并判断素性检测是否通过,是则触发生成更新组件,否则触发所述生成置位组件;

所述生成更新组件,用于根据所述第一比特长度调用哈希算法接口生成对应长度的第二随机数,更新所述第一种子;

第一生成组件,用于根据所述第一随机整数和所述第二随机数调用哈希算法接口、模乘接口、模加接口、模幂接口生成中间素数;

作为组件,用于将所述第一生成组件生成的中间素数作为第一辅助素数,将当前第一种子作为第一中间种子。

进一步地,所述第一更新组件具体用于将所述第一比特长度右移一位得到第一数值,取所述第一比特长度的最低比特位得到第二数值,将所述第一数值、所述第二数值和第一设定数据相加得到的结果作为更新后的第一比特长度。

进一步地,所述第一生成组件包括:

第一得到子组件,用于调用大数移位接口、大数除法接口将所述第一随机整数左移一位得到第一临时数据,用所述第二随机数除以第一临时数据的商取上界值得到第二临时数据;

判断子组件,用于调用大数乘法接口、大数加法接口将所述第二临时数据与所述第一随机整数之和左移一位的结果再加上第一设定数据得到第三临时数据;判断所述第三临时数据的比特长度是否大于第一辅助素数比特长度,是则触发第二得到子组件,否则调用大数乘法接口、大数加法接口将所述第一临时数据与所述第二临时数据的积再加第一设定数据的和作为中间素数,触发所述作为组件;

所述第二得到子组件,用于调用大数移位接口、大数除法接口将2作为底数,第一辅助素数比特长度减去第一设定数据的结果作为指数进行幂运算得到第四临时数据,用所述第四临时数据除以所述第一临时数据得到的商取上界值得到第五临时数据;

第三得到子组件,用于调用大数乘法接口、大数加法接口将所述第一临时数据与所述第五临时数据的乘积再加第一设定数据得到的结果作为中间素数;

检测判断子组件,用于调用素性检测接口对所述第三得到子组件得到的中间素数进行素性检测,并判断素性检测是否通过,是则触发所述作为组件,否则更新所述第二临时数据的值,触发所述判断子组件。

进一步地,所述第三生成子单元具体用于将所述第二辅助素数的值赋为1,将所述第一中间种子的值赋值给所述第二中间种子。

进一步地,所述第五生成子单元具体用于将所述第一确定性素数比特长度的一半与第一设定数据的和作为第三长度,根据第三长度和第二中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第三辅助素数和第三中间种子。

进一步地,所述生成置位子单元包括:

计算判断组件,用于调用哈希算法接口对所述第三中间种子进行计算得到第一中间哈希值,更新所述第三中间种子,判断所述第一确定性素数比特长度是否小于第一中间哈希值的长度,是则触发第三判断组件,否则触发拼接判断组件;

所述拼接判断组件,用于调用哈希算法接口对当前第一种子进行计算得到第二中间哈希值,更新第三中间种子;将所述第一中间哈希值与所述第二中间哈希值进行拼接并将拼接结果作为当前拼接值,判断所述第一确定性素数比特长度是否小于当前拼接值的长度,是则触发作为置位组件,否则触发计算更新组件;

所述计算更新组件,用于调用哈希算法接口对当前第三中间种子进行计算得到第三中间哈希值,更新第三中间种子;将所述当前拼接值和所述第三中间哈希值进行拼接,并用拼接结果更新当前拼接值;

所述第三判断组件,用于判断所述第一确定性素数比特长度是否小于当前拼接值的长度,是则触发作为置位组件,否则触发所述计算更新组件;

所述作为置位组件,用于从所述当前拼接值的起始位置起取第一确定性素数比特长度的数据作为第三随机数,将所述第三随机数的最高两个比特位均置为1。

本发明与现有技术相比,具有以下优点:

本发明提供的一种在嵌入式系统中生成密钥对的实现方法和装置,其中密钥对生成过程中涉及到的第一确定性素数、第二确定性素数均为可证明的素数,通过该发明产生的rsa密钥对可成功抵抗pollard的p-1方法、williams的p+1方法、循环攻击方法等,提高了生成密钥对的安全性。

附图说明

图1为本发明实施例一提供的一种生成密钥对的实现方法流程图;

图2为本发明实施例一中步骤103的细化流程图;

图3为本发明实施例一中步骤103-1的细化流程图;

图4为本发明实施例一中步骤401的细化流程图;

图5为本发明实施例一中步骤401-4的细化流程图;

图6为本发明实施例二提供的一种生成密钥对的实现装置方框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本实施例中涉及接口中一些接口(比如大数乘法接口、大数加法接口、大数减法接口、模乘接口、模加接口、模减接口、大数移位接口)是由协处理器提供的,而其他接口(如哈希算法接口、模幂接口、大数模逆接口、大数除法接口、素性检测接口、计算最大公因子接口)是基于协处理器封装的接口。

实施例一

本发明实施例一提供一种生成密钥对的实现方法,如图1所示,包括:

步骤101:当cpu接收到生成密钥对指令时,从生成密钥对指令中获取rsa公钥指数、rsa模长、rsa密钥对类型;

例如,本实施例中的rsa模长为1024,rsa公钥指数为0x010001,rsa密钥对类型为crt类型;

步骤102:cpu调用随机数生成接口生成与rsa模长的安全性相匹配的第一种子;

例如,本实施例中生成的第一种子为0x1111111111111111111111111111111111111111;

在本实施例中,步骤102包括:

步骤201:cpu根据rsa模长计算rsa算法的安全比特强度;

例如,本实施例中的安全比特强度为80;

步骤202:cpu调用随机数生成接口生成对应于rsa算法的安全比特强度的第一种子;

具体的,在本实施例中,在随机数生成接口中预先设置好与rsa算法的安全比特强度对应的种子长度,并且生成长度大于等于与rsa算法的安全比特强度对应的种子长度的种子;例如,本实施例中生成的第一种子为0x1111111111111111111111111111111111111111;

步骤103:cpu分别根据rsa模长、第一种子和rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数;

例如,在本实施例中,根据rsa模长1024、rsa公钥指数0x010001和第一种子0x1111111111111111111111111111111111111111生成的第一确定性素数为:0xf39a2a9e8e3afe96b5064cbd3718166d03470557c50b654149b4acffebfd7a371efb469e4ab81332bba9a861295ef339a80786be3c5b672751c8bbe97e6c4d0f;第二确定性素数为:0xc8eb83ebbf3213e0d0cbdf1b3ccaa14f52d4dfcfd5b232be408214775e8daadac13d85ad6547f511734509e2706c0cf44ee7f81bbf9180c458be612d6455bcbb;

具体的,在本实施例中,步骤103的实现过程如图2所示,包括:

步骤301:cpu判断rsa模长、rsa公钥指数、第一种子是否满足预设条件,是则执行步骤302,否则报错;

在本实施例中,预设条件包括:rsa公钥指数为奇数且rsa公钥指数的长度符合预设长度、种子的长度不小于rsa模长的安全比特强度;例如,本实施例中的预设条件为:(1)rsa模长为1024或者2048;(2)rsa公钥指数为奇数;(3)rsa公钥指数字节长度小于等于32;(4)种子的长度不小于rsa模长的安全比特强度;

步骤302:cpu分别根据rsa模长、第一种子和rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数,更新第一种子;

步骤303:cpu判断第一确定性素数和第二确定性素数的差值是否在预设范围内,是则返回步骤302,否则执行步骤104。

例如,本实施例中的第一确定性素数和第二确定性素数的差值为0x15e0d7a8c05232d26dc965df37657a896712b09dfdad661b0f7ea70aba77d033d66696395a930f8c8d2322ac01f30bb064e9eb2ab02db92c7e804371a1482bdc;预设范围为0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000;则步骤303判断为否获取的第一确定性素数为0xf14b8d06a63dd2df1b3bf901930fa7c2b40f7b4dfd012757cfde82975aa65635896ea4f56766b612a7114acad15f744fd802cb0d9ac2aece7bae037546669c21;第二确定性素数为0xdb6ab55de5eba00cad7293225baa2d394cfccaafff53c13cc05fdb8ca02e8601b3080ebc0cd3a68619ee281ecf6c689f7318dfe2ea94f5a1fd2dc003a51e7045;

可选的,本实施例中步骤103包括:

步骤103-1:cpu根据rsa模长计算第一确定性素数比特长度,获取第一辅助素数比特长度和第二辅助素数比特长度,根据第一确定性素数比特长度、第一辅助素数比特长度、第二辅助素数比特长度、第一种子和rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数;

例如,在本实施例中,第一确定性素数比特长度为512,第一辅助比特长度为105,第二辅助素数比特长度为122,第一种子为0x1111111111111111111111111111111111111111,第一确定性素数为0xf14b7665478b21a7bc0d2f8c6c6386717f1c70a6e7a035e7dbe2abd5bc52e2def52731840412c44a9f9f3c1aacf485ee2f16e7c34fe2fece8955c4a66018be1f;

在本实施例中,步骤103-1的实现过程如图3所示,包括:

步骤400:cpu根据rsa模长计算得到第一确定性素数比特长度,获取第一辅助素数比特长度和第二辅助素数比特长度;

具体的,根据rsa模长计算得到第一确定性素数比特长度包括:将rsa模长的一半作为第一确定性素数比特长度;其中第一辅助素数和第二辅助素数的比特长度可预先设定,可以是某个固定的值,也可以是在某个范围之内;

例如,在本实施例中,第一确定性素数比特长度为512,第一辅助素数比特长度为105;第二辅助素数比特长度为122;

步骤401:cpu根据第一确定性素数比特长度、第一辅助素数比特长度、第二辅助素数比特长度和第一种子调用哈希算法接口、大数加法接口、模乘接口、模加接口、模幂接口产生满足第一预设条件的第二备用素数;

具体的,在本实施例中,如图4所示,步骤401包括:

步骤401-1:cpu判断第一确定性素数比特长度、第一辅助素数比特长度和第二辅助素数比特长度是否满足预定条件,是则执行步骤401-2,否则报错;

具体的,在本实施例中,预定条件为:第一辅助素数比特长度的最小值为l1,第二辅助素数比特长度的最小值为l2,第一辅助素数和第二辅助素数的比特长度之和的最大值为l3;第一确定性素数比特长度为l4;其中l1、l2、l3、l4可根据实际需要进行设置;例如:l1=101,l2=101,l3=238,l4=512;

步骤401-2:cpu判断第一辅助素数比特长度是否为第一预设数据,是则执行步骤401-3,否则执行步骤401-4;

例如,第一预设数据为1,本实施例中的第一辅助素数比特长度为105不为1则执行步骤401-4;

步骤401-3:cpu控制协处理器生成第一辅助素数和第一中间种子,执行步骤401-5;

在本实施例中,步骤401-3具体包括:将第一辅助素数赋值1,将种子的值赋值给第一中间种子;

步骤401-4:cpu根据第一辅助素数比特长度和第一种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一辅助素数和第一中间种子,执行步骤401-5;

例如,在本实施例中,第一辅助素数为0x01898c3cc8ab7e585adfb7009799,第一中间种子为0x1111111111111111111111111111111111111160;

具体的,本实施例中步骤401-4的实现过程如图5所示,包括:

步骤501:cpu判断第一辅助素数比特长度是否小于第二预设数据,是则报错,否则将第一辅助素数比特长度的值赋值给第一比特长度,执行步骤502;

本实施例中,第一比特长度初始值为105;第二预设数据为2;

步骤502:cpu判断第一比特长度是否小于第一预设值,是则执行步骤504,否则执行步骤503;

例如,本实施例中的第一预设值为33;

步骤503:cpu更新第一比特长度,返回步骤502;

具体的,步骤503包括:将第一比特长度右移一位得到第一数值,取第一比特长度的最低比特位得到第二数值(例如将第一比特长度与1进行与运算得到第二数值),将第一数值、第二数值和第一设定数据相加得到的结果作为更新后的第一比特长度;优选的,第一设定数据为1;

例如,本实施例中更新后的第一比特长度为28;

步骤504:cpu根据第一比特长度和第一种子调用哈希算法接口、大数加法接口、大数除法接口生成对应长度的第一随机整数,并将第一随机整数的最低比特位置为1,更新第一种子;

在本实施例中,步骤504具体为:使用哈希算法对第一种子进行计算得到生成第一比特长度的第一随机整数,并置其最低比特为1,将第一种子的值加1;

例如,第一随机整数为0x09985861;更新后的种子为0x1111111111111111111111111111111111111119;

步骤505:cpu对第一随机整数进行确定性素性检测,并判断素性检测是否通过,是则执行步骤506,否则返回步骤504;

步骤506:cpu根据第一比特长度调用哈希算法接口生成对应长度的第二随机数,更新第一种子;

在本实施例中,步骤506具体为:使用哈希算法对第一种子进行计算生成第一辅助素数比特长度的第二随机数,将第一种子的值加1;例如,第二随机数为0x01898c3cc8ab7e585ada8768f949;更新后的第一种子为0x111111111111111111111111111111111111111a;

步骤507:cpu根据第一随机整数和第二随机数调用哈希算法接口、模乘接口、模加接口、模幂接口生成中间素数;

具体的,步骤507包括:

步骤507-1:cpu调用大数移位接口、大数除法接口将第一随机整数左移一位(例如第一随机整数乘以2)得到第一临时数据,用第二随机数除以第一临时数据的商取上界值得到第二临时数据;

例如,第一临时数据为0x1330b0c2,第二临时数据为0x1481fc0862a4e8746f07;

步骤507-2:cpu调用大数乘法接口、大数加法接口将第二临时数据和第一随机整数之和左移一位(例如将第二临时数据和第一随机整数之和与2相乘)的结果再加上第一设定数据得到第三临时数据;cpu判断第三临时数据的比特长度是否大于第一辅助素数比特长度,是则执行步骤507-3,否则cpu调用大数乘法接口、大数加法接口将第一临时数据与第二临时数据的积再加第一设定数据的和作为中间素数,执行步骤508;

优选的,第一设定数据为1;例如,第三临时数据为0x01898c3cc8ab7e585ada8ae0f34f;第三临时数据的比特长度为105,不大于第一辅助素数比特长度105,执行步骤508;

步骤507-3:cpu调用大数移位接口、大数除法接口将2作为底数,第一辅助素数比特长度减去第一设定数据的结果作为指数进行幂运算得到第四临时数据,用第四临时数据除以第一临时数据得到的商取上界值得到第五临时数据;

步骤507-4:cpu调用大数乘法接口、大数加法接口将第一临时数据与第五临时数据的乘积再加第一设定数据得到的结果作为中间素数;

例如,备用素数为0x01898c3cc8ab7e585ada8ae0f34f;

步骤507-5:cpu调用素性检测接口对中间素数进行素性检测,并判断素性检测是否通过,是则执行步骤508,否则更新第二临时数据的值,返回步骤507-2;

具体的,更新第二临时数据值的方法为:将第二临时数据加1。

例如,更新后的第二临时数据为0x1481fc0862a4e8746f08;

步骤508:cpu将中间素数作为第一辅助素数,将当前第一种子作为第一中间种子;

例如,通过素性检测的第一辅助素数为0x01898c3cc8ab7e585adfb7009799,第一中间种子为0x1111111111111111111111111111111111111160;

步骤401-5:cpu判断第二辅助素数比特长度是否为第一预设数据,是则执行步骤401-6,否则执行步骤401-7;

例如,第二辅助素数比特长度为122,不为第一预设数据,401-5判断之后执行步骤401-7;

步骤401-6:cpu控制协处理器生成第二辅助素数和第二中间种子,执行步骤401-8;

在本实施例中,步骤401-6具体包括:将第二辅助素数的值赋为1,将第一中间种子的值赋值给第二中间种子;

步骤401-7:cpu根据第二辅助素数比特长度和第一中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二辅助素数和第二中间种子,执行步骤401-8;

例如,第二辅助素数比特长度为122,第一中间种子为0x1111111111111111111111111111111111111160;生成的第二辅助素数为0x025387372385a6067e66dd5ae4c7840d;第二中间种子为0x11111111111111111111111111111111111111c1;

具体的,本实施例中步骤401-7的实现过程与步骤401-4相同,在此不再赘述;

步骤401-8:cpu根据第一确定性素数比特长度得到第三长度,根据第三长度和第二中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第三辅助素数和第三中间种子;

在本实施例中,根据第一确定性素数比特长度得到第三长度具体为:将第一确定性素数比特长度的一半与第一设定数据的和作为第三长度;根据第三长度和第三中间种子生成第三辅助素数和第三中间种子的实现过程与步骤401-4相同,在此不再赘述;

例如,第三辅助素数为0x01ad502c428905e79f136cf504645c8133f1f6f69cf307f1ee0db8ddd90f6dc24f;第三中间种子为0x0x1111111111111111111111111111111111111247;

步骤401-9:cpu根据第三中间种子调用哈希算法接口、大数加法接口生成第三随机数,将第三随机数的最高两个比特位均置为1;

例如,第三随机数为0xf14b765d4d6919391e94c1cf41541f895fcee111a52713f0b8e02e905fa3e89d0f7b51daca05101754e01a275ae2e69bde4bd023140fc60e57c8f91242d4a146;

具体的,步骤401-9包括:

步骤401-9-1:cpu调用哈希算法接口对第三中间种子进行计算得到第一中间哈希值,更新第三中间种子,cpu判断第一确定性素数比特长度是否小于第一中间哈希值的长度,是则执行步骤401-9-4,否则执行步骤401-9-2;

例如,第一中间哈希值为0x0f7b51daca05101754e01a275ae2e69bde4bd023140fc60e57c8f91242d4a146;更新后的第三中间种子为0x1111111111111111111111111111111111111248;

步骤401-9-2:cpu调用哈希算法接口对当前第一种子进行计算得到第二中间哈希值,更新第三中间种子;将第一中间哈希值与第二中间哈希值进行拼接并将拼接结果作为当前拼接值,判断第一确定性素数比特长度是否小于当前拼接值的长度,是则执行步骤401-9-4,否则执行步骤401-9-3;

例如,第二中间哈希结果为0xf14b765d4d6919391e94c1cf41541f895fcee111a52713f0b8e02e905fa3e89d;更新后的第三中间结果为0x1111111111111111111111111111111111111249;

步骤401-9-3:cpu调用哈希算法接口对当前第三中间种子进行计算得到第三中间哈希值,更新第三中间种子;将当前拼接值和第三中间哈希值进行拼接,并用拼接结果更新当前拼接值;判断第一确定性素数比特长度是否小于当前拼接值的长度,是则执行步骤401-9-4,否则执行步骤401-9-3;

例如,当前拼接值为0xf14b765d4d6919391e94c1cf41541f895fcee111a52713f0b8e02e905fa3e89d0f7b51daca05101754e01a275ae2e69bde4bd023140fc60e57c8f91242d4a146;

步骤401-9-4:cpu从当前拼接值的起始位置起取第一确定性素数比特长度的数据作为第三随机数,将第三随机数的最高两个比特位均置为1;

具体的,本实施例中的第三随机数长度为第一确定性素数比特长度,更新第三中间种子具体为:第三中间种子自加1;例如,第三随机数为0xf14b765d4d6919391e94c1cf41541f895fcee111a52713f0b8e02e905fa3e89d0f7b51daca05101754e01a275ae2e69bde4bd023140fc60e57c8f91242d4a146;

步骤401-10:cpu调用大数乘法接口、计算最大公因子接口判断第三辅助素数与第一辅助素数的乘积与第二辅助素数的最大公因子是否为1,是则执行步骤401-11,否则报错;

例如,第三辅助素数与第一辅助素数的乘积为0x293fb41b9a9579b187d8fad87bcc7e977082759659a3adabe17cb4551a047f67c54f2218d981c731d8b6f35ba37,第二辅助素数为0x025387372385a6067e66dd5ae4c7840d;最大公因子为1;

步骤401-11:cpu根据第一确定性素数比特长度、第三随机数、第一辅助素数、第二辅助素数、第三辅助素数调用哈希算法接口、大数加法接口产生一个满足第一预设条件的第二备用素数;

具体的,在本实施例中,第一预设条件包括:2与第三辅助素数、第一辅助素数的乘积可以整除第二备用素数减1的差值;第二辅助素数可以整除第二备用素数加1的和;例如,第二备用素数为0xf14b7665478b21a7bc0d2f8c6c6386717f1c70a6e7a035e7dbe2abd5bc52e2def52731840412c44a9f9f3c1aacf485ee2f16e7c34fe2fece8955c4a66018be1f;步骤402:cpu调用大数减法接口、计算最大公因子接口判断第二备用素数减去第一设定数据的结果与rsa公钥指数的最大公因子是否均为1,是则执行步骤403,否则返回步骤401;

优选的,本实施例中的第一设定数据为1;在本实施例的具体数据实例中,第二备用素数减1的差与rsa公钥指数的最大公因子为1;

步骤402:cpu调用素性检测接口对第二备用素数进行素性检测,并判断素性检测是否通过,是则执行步骤403,否则返回步骤401;

具体的,本实施例的该步骤中素性检测未通过,第二备用素数不是素数,返回401;

步骤401到步骤402是一个循环寻找素数的过程,由于循环次数较多,此处省略循环过程涉及到的实施例数据,循环结束时的第二备用素数为0xf14b8d06a63dd2df1b3bf901930fa7c2b40f7b4dfd012757cfde82975aa65635896ea4f56766b612a7114acad15f744fd802cb0d9ac2aece7bae037546669c21;

步骤403:cpu将第二备用素数作为第一确定性素数,更新第一种子;

例如,第一确定性素数为0xf14b8d06a63dd2df1b3bf901930fa7c2b40f7b4dfd012757cfde82975aa65635896ea4f56766b612a7114acad15f744fd802cb0d9ac2aece7bae037546669c21;更新后的种子为0x1111111111111111111111111111111111111611;

步骤103-2:cpu根据rsa模长计算第二确定性素数比特长度,获取第四辅助素数比特长度和第五辅助素数比特长度,根据第二确定性素数比特长度、第四辅助素数比特长度、第五辅助素数比特长度、第一种子和rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二确定性素数、第四辅助素数、第五辅助素数和种子;

例如,第二确定性素数比特长度为512,第四辅助素数比特长度为110,第五辅助素数比特长度为102,第一种子为0x1111111111111111111111111111111111111611,rsa公钥指数为0x010001,第二确定性素数为0xdb6ab55de5eba00cad7293225baa2d394cfccaafff53c13cc05fdb8ca02e8601b3080ebc0cd3a68619ee281ecf6c689f7318dfe2ea94f5a1fd2dc003a51e7045,第四辅助素数为0x20cfb2dc5112296dc54194026039,第五辅助素数为0x20b78cc71c37986d64afd21e4f,种子为0x11111111111111111111111111111111111116ae;

具体的,本步骤的实现过程与步骤103-1相同,在此不再赘述;其中第四辅助素数和第五辅助素数的比特长度可预先设定,可以是某个固定的值,也可以是在某个范围之内;

例如,本实施例中的第四辅助素数比特长度为110,第五辅助素数比特长度为102,第一种子为0x1111111111111111111111111111111111111611,rsa公钥指数为0x010001,生成的第二确定性素数为0xdb6ab55de5eba00cad7293225baa2d394cfccaafff53c13cc05fdb8ca02e8601b3080ebc0cd3a68619ee281ecf6c689f7318dfe2ea94f5a1fd2dc003a51e7045,第四辅助素数为0x20cfb2dc5112296dc54194026039,第五辅助素数为0x0178bb9e6ccd17fa67ac8fb8bd5f7a1c768c2575306fe75ac843a6354be408ffb3;

步骤104:cpu检测rsa密钥对类型,如为第一预设类型则执行步骤105,如为第二预设类型则执行步骤106;

具体的,本实施例中的预设类型为rsa-crt(中文名称:中国剩余定理);

步骤105:cpu根据rsa模长、rsa公钥指数、第一确定性素数和第二确定性素数调用大数乘法接口、大数模逆接口、模乘接口、模减接口生成第一预设类型的rsa公钥模数和rsa私钥,根据rsa公钥模数和rsa公钥指数组成rsa公钥,保存rsa公钥和rsa私钥;

具体的,本实施例中的第一预设类型为rsa-crt,包括一个模数(n)和三个私(dp,dq,qinv)钥;

例如,本实施例中的模数为0xced035e000d6544eda35a76163e0721fd3217a9b801ad69c55d2a5265c21224468b6d4a052c671d89ff49aeb4ac4ed588a2bcd24bb6b2731a35e91d1a94914175533f137c97587bfe4f9290ddf7cbf27df749dfc6a2928a4823ef2a4ab6fdac6063920681933d19aa36af0423b58f988226c6756d3b7a7a64ca234736ed484e5;三个私钥dp=0xdb49f6189cec82c0105828acada204ac8647ab9fecd727923e6fd1ef0b8b2fbde7f08e2a1896d7d18bd3c34d1f8ac881e7a6623332facb330c63d0f0bbd27501;dq=0x65443796b1b1f0f948e7f35e4d1e1aa732900d5ff3208db3e3399a93a9ae2f2d039af969f3258fda9e871b3f350e5caf12a8ed53c65e9f8b76d531a4bd05725d;qinv=0x04dfef83eb50623c6f471327a48b949b84cca14ec0d01ad08e40be690830799e175cd30a7254fa7d4fd4bc90b59c6738c124f6176d97782c8d5be75313ab4f2a;

步骤106:cpu根据rsa模长、rsa公钥指数、第一确定性素数和第二确定性素数调用大数乘法接口、大数除法接口、模乘接口、大数模逆接口生成第二预设类型的rsa公钥模数和rsa私钥,根据rsa公钥模数和rsa公钥指数组成rsa公钥,保存rsa公钥和rsa私钥。

具体的,本实施例中的第二预设类型为rsa-nd,包括一个模数(n)和一个私钥(d)。

实施例二

本发明实施例二提供一种在嵌入式系统中生成密钥对的实现装置,如图6所示,包括:

第一获取模块601,用于当接收到生成密钥对指令时,从生成密钥对指令中获取rsa公钥指数、rsa模长、rsa密钥对类型;

第一生成模块602,用于调用随机数生成接口生成与rsa模长的安全性相匹配的第一种子;

具体的,本实施例中的第一生成模块602包括:

第一计算子模块,用于根据rsa模长计算rsa算法的安全比特强度;

第一生成子模块,用于调用随机数生成接口生成对应于rsa算法的安全比特强度的第一种子。

第二生成模块603,用于分别根据rsa模长、第一种子和rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数;

检测模块604,用于检测第一获取模块601获取的rsa密钥对类型,如为第一预设类型则触发第一生成保存模块605,如为第二预设类型则触发第二生成保存模块606;

第一生成保存模块605,用于根据rsa模长、rsa公钥指数、第一确定性素数和第二确定性素数调用大数乘法接口、大数模逆接口、模乘接口、模减接口生成第一预设类型的rsa公钥模数和rsa私钥,根据rsa公钥模数和第一获取模块601获取的rsa公钥指数组成rsa公钥,保存rsa私钥和rsa公钥;

第二生成保存模块606,用于根据rsa模长、rsa公钥指数、第一确定性素数和第二确定性素数调用大数乘法接口、大数除法接口、模乘接口、大数模逆接口生成第二预设类型的rsa公钥模数和rsa私钥,根据rsa公钥模数和第一获取模块601获取的rsa公钥指数组成rsa公钥,保存rsa私钥和rsa公钥。

可选的,本实施例中的第二生成模块603包括:

第一判断子模块,用于判断第一获取模块601获取的rsa模长、rsa公钥指数和第一生成模块生成602的第一种子是否满足预定条件,是则触发生成更新子模块,否则报错;

生成更新子模块,用于分别根据rsa模长、第一种子和rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数和第二确定性素数,更新第一种子;

第二判断子模块,用于判断生成更新子模块生成的第一确定性素数和第二确定性素数的差值是否在预设范围内,是则触发生成更新子模块,否则触发检测模块604。

优选的,本实施例中的第二生成模块603包括:

第一确定子模块,用于根据rsa模长计算第一确定性素数比特长度;

在本实施例中,第一确定子模块具体用于将rsa模长的一半作为第一确定性素数比特长度。

第一获取子模块,用于获取第一辅助素数比特长度和第二辅助素数比特长度;

第二生成子模块,用于根据第一确定子模块确定的第一确定性素数比特长度、第一获取子模块获取的第一辅助素数比特长度和第二辅助素数比特长度、第一生成模块601生成的第一种子、第一获取模块601获取的rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一确定性素数;

第二确定子模块,用于根据rsa模长计算第二确定性素数比特长度;

第二获取子模块,用于获取第四辅助素数比特长度、第五辅助素数比特长度;

第三生成子模块,用于根据第二确定子模块确定的第二确定性素数比特长度、第二获取子模块获取的第四辅助素数比特长度和第五辅助素数比特长度、第一生成模块602生成的第一种子、第一获取模块601获取的rsa公钥指数调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二确定性素数。

在本实施例中,第二生成子模块包括:

第一产生单元,用于根据第一确定性素数比特长度、第一辅助素数比特长度、第二辅助素数比特长度和第一种子调用哈希算法接口、大数加法接口、模乘接口、模加接口、模幂接口产生满足第一预设条件的第二备用素数;

第一判断单元,用于调用大数减法接口、计算最大公因子接口判断第一产生单元产生的第二备用素数减去第一设定数据的结果与rsa公钥指数的最大公因子是否均为1,是则触发检测判断单元,否则触发第一产生单元;

检测判断单元,用于调用素性检测接口对第二备用素数进行素性检测,并判断素性检测是否通过,是则触发作为更新单元,否则触发第一产生单元;

作为更新单元,用于将第二备用素数作为第一确定性素数,更新第一种子。

具体的,在本实施例中,第一产生单元包括:

第一判断子单元,用于判断第一确定性素数比特长度、第一辅助素数比特长度和第二辅助素数比特长度是否满足预定条件,是则触发第二判断子单元,否则报错;

第二判断子单元,用于判断第一辅助素数比特长度是否为第一预设数据,是则触发第一生成子单元,否则触发第二生成子单元;

第一生成子单元,用于控制协处理器生成第一辅助素数和第一中间种子,触发第三判断子单元;

第二生成子单元,用于根据第一辅助素数比特长度和第一种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第一辅助素数和第一中间种子,触发第三判断子单元;

第三判断子单元,用于判断第二辅助素数比特长度是否为第一预设数据,是则触发第三生成子单元,否则触发第四生成子单元;

第三生成子单元,用于控制协处理器生成第二辅助素数和第二中间种子,触发第五生成子单元;

其中,本实施例中的第三生成子单元具体用于将第二辅助素数的值赋为1,将第一中间种子的值赋值给第二中间种子。

第四生成子单元,用于根据第二辅助素数比特长度和第一中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第二辅助素数和第二中间种子,触发第五生成子单元;

第五生成子单元,用于根据第一确定性素数比特长度得到第三长度,根据第三长度和第二中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第三辅助素数和第三中间种子;

可选的,在本实施例中,第五生成子单元具体用于将第一确定性素数比特长度的一半与第一设定数据的和作为第三长度,根据第三长度和第二中间种子调用哈希算法接口、模乘接口、模加接口、模幂接口生成第三辅助素数和第三中间种子。

生成置位子单元,用于根据第五生成单元生成的第三中间种子调用哈希算法接口、大数加法接口生成第三随机数,将第三随机数的最高两个比特位均置为1;

第四判断子单元,用于调用大数乘法接口、计算最大公因子接口判断第三辅助素数与第一辅助素数的乘积与第二辅助素数的最大公因子是否为1,是则触发第一产生子单元,否则报错;

第一产生子单元,用于根据第一确定性素数比特长度、第三随机数、第一辅助素数、第二辅助素数、第三辅助素数调用哈希算法接口、大数加法接口产生满足第一预设条件的第二备用素数。

其中,第一生成子单元包括:

第一判断组件,用于判断第一辅助素数比特长度是否小于第二预设数据,是则报错,否则将第一辅助素数比特长度值赋值给第一比特长度,触发第二判断组件;

第二判断组件,用于判断第一比特长度是否小于第一预设值,是则触发生成置位组件,否则触发第一更新组件;

第一更新组件,用于更新第一比特长度,触发第二判断组件;

在本实施例中,第一更新组件具体用于将所述第一比特长度右移一位得到第一数值,取所述第一比特长度的最低比特位得到第二数值,将所述第一数值、所述第二数值和第一设定数据相加得到的结果作为更新后的第一比特长度。

生成置位组件,用于根据第一比特长度和第一种子调用哈希算法接口、大数加法接口、大数除法接口生成对应长度的第一随机整数,并将第一随机整数的最低比特位置为1,更新第一种子;

检测判断组件,用于对生成置位组件得到的第一随机整数进行确定性素性检测,并判断素性检测是否通过,是则触发生成更新组件,否则触发生成置位组件;

生成更新组件,用于根据第一比特长度调用哈希算法接口生成对应长度的第二随机数,更新第一种子;

第一生成组件,用于根据第一随机整数和第二随机数调用哈希算法接口、模乘接口、模加接口、模幂接口生成中间素数;

作为组件,用于将第一生成组件生成的中间素数作为第一辅助素数,将当前第一种子作为第一中间种子。

具体的,本实施例中的第一生成组件包括:

第一得到子组件,用于调用大数移位接口、大数除法接口将第一随机整数左移一位得到第一临时数据,用第二随机数除以第一临时数据的商取上界值得到第二临时数据;

判断子组件,用于调用大数乘法接口、大数加法接口将第二临时数据与第一随机整数之和左移一位的结果再加上第一设定数据得到第三临时数据;判断第三临时数据的比特长度是否大于第一辅助素数比特长度,是则触发第二得到子组件,否则调用大数乘法接口、大数加法接口将第一临时数据与第二临时数据的积再加第一设定数据的和作为中间素数,触发作为组件;

第二得到子组件,用于调用大数移位接口、大数除法接口将2作为底数,第一辅助素数比特长度减去第一设定数据的结果作为指数进行幂运算得到第四临时数据,用第四临时数据除以第一临时数据得到的商取上界值得到第五临时数据;

第三得到子组件,用于调用大数乘法接口、大数加法接口将第一临时数据与第五临时数据的乘积再加第一设定数据得到的结果作为中间素数;

检测判断子组件,用于调用素性检测接口对第三得到子组件得到的中间素数进行素性检测,并判断素性检测是否通过,是则触发作为组件,否则更新第二临时数据的值,触发判断子组件。

其中,本实施例中的生成置位子单元包括:

计算判断组件,用于调用哈希算法接口对第三中间种子进行计算得到第一中间哈希值,更新第三中间种子,判断第一确定性素数比特长度是否小于第一中间哈希值的长度,是则触发第三判断组件,否则触发拼接判断组件;

拼接判断组件,用于调用哈希算法接口对当前第一种子进行计算得到第二中间哈希值,更新第三中间种子;将第一中间哈希值与第二中间哈希值进行拼接并将拼接结果作为当前拼接值,判断第一确定性素数比特长度是否小于当前拼接值的长度,是则触发作为置位组件,否则触发计算更新组件;

计算更新组件,用于调用哈希算法接口对当前第三中间种子进行计算得到第三中间哈希值,更新第三中间种子;将当前拼接值和第三中间哈希值进行拼接,并用拼接结果更新当前拼接值;

第三判断组件,用于判断第一确定性素数比特长度是否小于当前拼接值的长度,是则触发作为置位组件,否则触发计算更新组件;

作为置位组件,用于从当前拼接值的起始位置起取第一确定性素数比特长度的数据作为第三随机数,将第三随机数的最高两个比特位均置为1。

本发明提供的一种在嵌入式系统中生成密钥对的实现方法和装置,其中密钥对生成过程中涉及到的第一确定性素数、第二确定性素数均为可证明的素数,通过该发明产生的rsa密钥对可成功抵抗pollard的p-1方法、williams的p+1方法、循环攻击方法等,提高了生成密钥对的安全性。

以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

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