一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种flash密钥存储管理方法与流程

2022-05-27 01:43:42 来源:中国专利 TAG:


1.本发明涉及硬件加密领域,尤其是硬件加密中的密钥存储,具体是一种flash密钥存储管理方法。


背景技术:

2.在独立的硬件加密领域,从外部导入的加密所用密钥往往存储在flash介质中。存储方式是在flash中创建文件系统用于存储密钥。这种方式无法有效提供存储空间利用率和利用效率。除此之外,传统的密钥存储往往以明文的形式存放到存储介质中,一旦存储介质丢失,密钥将面临泄露的风险。


技术实现要素:

3.针对现有技术的缺陷,本发明提供一种flash密钥存储管理方法,密钥加密存放,保障密钥在生成、存储以及使用过程中的安全,同时通过创建密钥存放map的方式,可以有效的提高存储空间利用率以及密钥存取效率。
4.为了解决所述技术问题,本发明采用的技术方案是:一种flash密钥存储管理方法,本方法包括密钥加解密和密钥存储管理两部分,密钥加解密是指密钥在生成过程中经过加密处理、在存储时以加密状态存储、在使用时经过解密处理;密钥存储管理是将生成的密钥以页的形式存储在加密设备的spi-norflash中,spi-norflash中设有密钥管理页和密钥存储页,密钥管理页包括密钥管理map1、密钥管理map2、s_id、wl和num,密钥管理map1用于记录加密用密钥是否已使用,密钥管理map2用于记录解密用密钥是否已使用,s_id用于记录密钥解密信息,wl用于记录block的使用次数,num用于记录密钥的总数,密钥存储页用于存储密钥,基于管理页实现密钥管理。
5.进一步的,密钥加解密包括密钥生成及加密过程、密钥导入到spi-norflash过程、密钥解密和使用过程:密钥生成及加密过程具体为:第一步:调用ukey的随机数接口,生成多组密钥;第二步:ukey产生加密用的主密钥;第三步:密钥管理软件调用ukey的加密算法,用主密钥将生成的密钥逐一加密,并存放到ukey的安全存储区;密钥导入到spi-norflash过程具体为:第一步:将ukey插入到加密设备中,密钥服务软件对ukey进行身份认证;第二步:第一步通过后,获取ukey的密钥分量r1并读取ukey的设备uid进行hmac运算,得到hmac运算值,将r1和hmac运算值存放到s_id的位置;第三步:将所有密钥逐一写入到密钥存储页,并更新map,map包括map1和map2;密钥解密和使用过程具体为:第一步:密钥服务软件获取一条密钥skey’;
第二步:读取s_id记录的数据,并解析出r1;第三步:从ukey中读取主密钥的密钥分量r2,通过r1和r2计算出主密钥;第四步:通过出主密钥调用解密算法对skey’进行解密得到skey;第五步:将skey发送至硬件加密模块。
6.进一步的,密钥使用时进行ukey合法性验证,验证过程为:当使用密钥时,加密装置在系统开机时,插入ukey,从ukey中读取主密钥的密钥分量r2并放到内存中,并对ukey的设备id进行hmac运算,与之前存入的hmac运算值进行对比,如果对比一致,证明ukey合法。
7.进一步的,基于密钥管理页实现获取密钥的流程为:1、首先读取wl值,如果wl为0xffff说明当前存储区域擦写次数已经超过5w次,从偏移为33
×
page_size*n的位置再去获得wl值,n从1累加,直到wl值不为0xffff,记录page偏移n;2、获取num值,读取对应长度的map值;3、根据map值确定已经使用的密钥数量;4、读取一条新的密钥;5、更新map值,将对应位置的密钥标记为已用。
8.进一步的,密钥管理map1和密钥管理map2按bit位记录密钥是否已经使用,bit位为1表示该密钥没有使用,bit位为0表示该密钥已经使用,读取一条密钥后更新map时,不需要擦除page后重新写入,只需要把对应的bit位由1置为0。
9.进一步的,基于密钥管理页更新密钥的流程为:1、获取当前wl值;2、读取密钥管理页的s_id,将其存取指定区域;3、擦除密钥管理页;4、更新密钥管理页,map全写1,s_id取步骤2读取的s_id,wl = wl 1,num 写入实际密钥数量;5、将密钥写入密钥存储页。
10.进一步的,基于密钥管理页销毁密钥的流程为:1、获取当前wl值;2、擦除密钥管理页;3、擦除密钥存储页。
11.进一步的,生成2000组密钥,每条密钥长度最大为64字节,设有32个4k密钥存储页,另外增加一个密钥管理页。
12.本发明的有益效果:本发明提出一种flash密钥存储管理方法,通过创建密钥存放map的方式,可以有效的提高存储空间利用率以及密钥存取效率,同时也可以降低flash擦写次数,提高flash的使用寿命。针对现有密钥面临泄露风险的问题,本方法提出一种密钥的加密存放的方法,保证密钥以密文的形式存放到flash中,在实际使用时,将密钥在内存中解密,保障密钥在生成、存储以及使用过程中的安全。
附图说明
13.图1为密钥管理页的示意图;
图2为密钥存储的示意图。
具体实施方式
14.下面结合附图和具体实施方式对本发明作进一步的说明。
15.实施例1本实施例公开一种flash密钥存储管理方法,本方法包括密钥加解密和密钥存储管理两部分,密钥加解密是指在密钥在生成过程中经过加密处理、在存储时以加密状态存储、在使用时经过解密处理,保障密钥在生成、存储以及使用过程中的安全。
16.本实施例中,密钥加解密包括密钥生成及加密过程、密钥导入到spi-norflash过程、密钥解密和使用过程。
17.密钥生成及加密过程具体为:第一步:调用ukey的随机数接口,生成多组密钥;第二步:ukey产生加密用的主密钥;第三步:密钥管理软件调用ukey的加密算法,用主密钥将生成的密钥逐一加密,并存放到ukey的安全存储区;密钥导入到spi-norflash过程具体为:第一步:将ukey插入到加密设备中,密钥服务软件对ukey进行身份认证;第二步:第一步通过后,获取ukey的密钥分量r1并读取ukey的设备uid进行hmac运算,得到hmac运算值,将r1和hmac运算值存放到s_id的位置;第三步:将所有密钥逐一写入到密钥存储页,并更新map,map包括map1和map2。
18.密钥解密和使用过程具体为:第一步:密钥服务软件获取一条密钥skey’;第二步:读取s_id记录的数据,并解析出r1;第三步:从ukey中读取主密钥的密钥分量r2,通过r1和r2计算出主密钥;第四步:通过出主密钥调用解密算法对skey’进行解密得到skey;第五步:将skey发送至硬件加密模块。
19.密钥使用时进行ukey合法性验证,验证过程为:当使用密钥时,加密装置在系统开机时,插入ukey,从ukey中读取主密钥的密钥分量r2并放到内存中,并对ukey的设备id进行hmac运算,与之前存入的hmac运算值进行对比,如果对比一致,证明ukey合法。
20.本实施例中,采用sm4加解密算法对密钥进行加解密。
21.本方案中,密钥存储的载体是spi-flash。
22.根据flash的容量最多设计存储n(n=2000)组密钥,每条密钥长度最大64字节,因此需要32个4k page去存储所有的密钥,额外增加一个page用于存储密钥管理(即管理page)。
23.由于flash特性,0在flash中是以1存储的, 1是以0存储的,由于flash中的值只能由1设为0,不能从0设为1,因此先向一个字节写入1[0 0 0 0 0 0 0 1],再写入2(因为只能从1置为0,所以写入2之后[0 0 0 0 0 0 0 1 0],该字节变为[0 0 0 0 0 0 0 0]),读取的值是0,如果先向一个字节写入~1[1 1 1 1 1 1 1 0], 再写入~2[1 1 1 1 1 1 0 0], 读取的值是~3, 利用这个特点可以减少擦写次数。即当更新map时,不需要擦除page后重新
写入,只需要把对应的bit位由1置为0即可。
[0024]
除此之外,flash擦除的最小单位是4096个字节(一个page),可靠擦写次数10万次,擦除完成后读出的数据是全ff。
[0025]
密钥存储管理是将生成的密钥以页的形式存储在加密设备的spi-norflash中设有密钥管理页和密钥存储页,如图1所示,密钥管理页包括密钥管理map1、密钥管理map2、s_id、wl和num:密钥管理map1:2000/8=250个字节(按bit位记录密钥是否已使用,加密用密钥)密钥管理map2:2000/8=250个字节(按bit位记录密钥是否已使用,解密用密钥)s_id:记录ukey的id的hmac运算值和密钥分量r1,48个字节。
[0026]
wl:记录block使用次数2个字节。超过5万次更换存储位置,将次数记为0xffff。
[0027]
num:记录key的总数,最大2000个,2个字节。
[0028]
密钥存储页用于存储密钥,如图2所示,第一个page是管理页,后32个page存储2000组密钥。
[0029]
基于密钥管理页实现获取密钥的流程为:1、首先读取wl值,如果wl为0xffff说明当前存储区域擦写次数已经超过5w次,从偏移为33
×
page_size*n的位置再去获得wl值,n从1累加,直到wl值不为0xffff,记录page偏移n;注:33的值是指包含1个密钥管理page和32个密钥存储page。
[0030]
2、获取num值,读取对应长度的map值;3、根据map值确定已经使用的密钥数量;4、读取一条新的密钥;5、更新map值,将对应位置的密钥标记为已用。
[0031]
读取一条密钥后,更新map的方法:1.获取当前的map:charcurrentmap;this-》getkeymap(&currentmap,1,(int)(usedkeynum/8));假如当前已用65条密钥,记录key的map偏移应该是65/8=8,第8个字节偏移。
[0032]
2.获取一条密钥后重新计算map:currentmap&=~(1《《(usedkeynum%8));说明:usedkeynum%8的值为1,1左移1位取反的值是1111...1101而currentmap当前值是1111...1110,进行上述操作后变为1111...1100,该操作是把第66位的字节清0,也就是获取密钥后,将该密钥所在的66bit位置为0。
[0033]
3.更新map值this-》setkeymap(&currentmap,1,(int)(usedkeynum/8))。
[0034]
基于密钥管理页更新密钥的流程为:1、获取当前wl值;
2、读取密钥管理页的s_id,将其存取指定区域;3、擦除密钥管理页;4、更新密钥管理页,map全写1,s_id取步骤2读取的s_id,wl = wl 1,num 写入实际密钥数量;5、将密钥写入密钥存储页。
[0035]
基于密钥管理页销毁密钥的流程为:1、获取当前wl值;2、擦除密钥管理页;3、擦除密钥存储页。
[0036]
本实施例中,生成2000组密钥,每条密钥长度最大为64字节,本实施例为16字节长度,设有32个4k密钥存储页,另外增加一个密钥管理页。
[0037]
本实施例通过实现一种加解密机制,保障密钥在生成、存储以及使用过程中的安全。采用的密钥管理方式,提高了密钥存储安全和效率,节省了flash存储空间,减少flash擦写次数,从而提升了flash寿命以及利用效率。
[0038]
以上描述的仅是本发明的基本原理和优选实施例,本领域技术人员根据本发明做出的改进和替换,属于本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献