存储器数据完整性保护的方法

文档序号:6636390阅读:1300来源:国知局
存储器数据完整性保护的方法
【专利摘要】本发明提出一种内存数据完整性的保护方法。当系统需要将一个数据块写回内存时,首先产生新的counter分配给这个数据块;然后应用计数器模式加密方法对数据块加密;随后将得到的密文数据块和数据块的地址输入到带密钥的MAC函数中,MAC函数会产生一个输出;最后根据MAC函数的输出确定counter在内存中的存储位置。本发明与传统的内存数据完整性保护方案相比,它能够以更低的存储空间消耗、更小的计算资源占用,提供相同或者更高级别的内存数据完整性保护。
【专利说明】存储器数据完整性保护的方法

【技术领域】
[0001]本发明属于计算机数据存储保护【技术领域】,涉及一种存储器数据完整性保护的方法。

【背景技术】
[0002]科技的不断发展,使得越来越多的数据存储在内存中,特别是一些机密信息。攻击者可以对内存发动多种王动攻击,破坏存储在内存中的数据的完整性,使系统运彳丁出现错误的结果。所以,需要对这些数据的完整性进行保护。目前保护内存数据完整性的常见方案是构建完整性保护树,对从内存中取到的数据进行完整性验证。但是,采用完整性保护树进行完整性保护需要耗费大量的存储空间存储树的内部节点,并且需要花费大量的时间对从内存中取到的数据块进行完整性验证,这会占用大量的系统计算资源。


【发明内容】

[0003]本发明提供一种隐藏数据块和系统为这个数据块分配的counter的地址间的映射关系的方法,以较低的存储开销和计算资源占用为内存数据提供完整性保护。
[0004]本发明的技术方案包括以下两个部分:
[0005]当CPU将一个数据块写回内存时:
[0006]1.11首先,系统使用的counter自动增长,给这个数据块分配新的counter,然后应用计数器模式加密方法对数据块加密,以获得相应的密文;
[0007]1.12将得到的密文形式的数据块写回内存;
[0008]1.13使用加密后的数据块和这个数据块的地址作为带密钥的MAC函数的输入产生相应的输出,根据这个输出确定这个数据块对应的counter在内存的最新存储位置,如
(I);
[0009]1.14如果counter在缓存中不需要写回内存,则不写回;如果需要写回内存,则将其写回到根据1.13计算得出的结果确定的内存位置上,并且数据块与它所对应的counter不是同时写回内存。当counter需要写回内存时,可以将多个counter批量写回,使攻击者无法分析出数据与counter的对应关系。使用的数据块的地址是数据块的物理地址。
[0010]addrco窗ter = Hkey (block I Iaddrblock) (I);
[0011]当CPU从内存中读取一个数据块时:
[0012]1.21直接从内存中读取数据块;
[0013]1.22同时,如果这个数据块对应的counter在缓存中,贝U直接使用这个counter解密1.21中取到的数据块;如果这个counter不在缓存中,则根据(I)计算系统为这个数据块分配的counter在内存中的存储位置,读取这个counter,使用读取到的counter对1.21中取到的数据块进行解密;
[0014]将数据块和数据块的地址的连接作为带密钥的MAC函数的输入,确保每次的输入都是不同的,产生不同的输出。如果产生冲突,采用通用的冲突消解方法处理。
[0015]可以在(I)中添加另一个非常短的输入counterj,进一步消除MAC函数的输入发生重复的可能性,counter」可以与数据以明文方式连接起来存储,如(2)所示。相应的,在验证数据完整性的步骤中,计算counter的存储地址时也按照(2)计算:
addrcounter = Hkey (block | | counter」| | addrblock) (2)
[0016]系统使用计数器模式加密方法保护数据的机密性。
[0017]带密钥的MAC函数的输入是密文形式的数据块和数据块的物理地址的连接。
[0018]本发明可以显著的降低系统的存储空间消耗。现存的完整性保护方法都需要在内存中存储完整性验证树的内部节点,会消耗大量的存储空间。本发明只需要将系统为数据块分配的counter存储到内存。
[0019]本发明可以隐藏数据块和counter的存储地址间的映射关系。因为带密钥的MAC函数的输出是均匀分布的,只要输入不同,产生的输出也是不同的。如果产生冲突,采用通用的冲突消除方法处理。
[0020]本发明可以显著降低完整性保护方法导致的系统性能下降。当系统从内存中读取一个数据块时,如果对应的counter在片上,则直接使用这个counter ;如果对应的counter需要从内存中读取,则计算counter在内存中的位置;不需要进行完整性检查,直接解密即可,对系统的性能产生的负面影响较小。
[0021]本发明可以将一个非常短的辅助counter」引入带密钥的MAC函数的输入中,进一步的降低MAC函数的输入产生重复的可能,提高系统的安全性,counterj可以与明文数据连接起来存储,如等式2。相应的,在验证数据完整性的步骤中,计算counter的存储地址也按照等式2计算。
[0022]addrcounter = Hkey (block | | counter」| | addrblock) (2)
[0023]本发明提出一种内存数据完整性的保护方法。当系统需要将一个数据块写回内存时,首先产生新的counter分配给这个数据块;然后应用计数器模式加密方法对数据块加密;随后将得到的密文数据块和数据块的地址输入到带密钥的MAC函数中,MAC函数会产生一个输出;最后根据MAC函数的输出确定counter在内存中的存储位置。本发明与传统的内存数据完整性保护方案相比,它能够以更低的存储空间消耗、更小的计算资源占用,提供相同或者更高级别的内存数据完整性保护。

【专利附图】

【附图说明】
[0024]图1是本发明的系统体系框架图。
[0025]图2是CPU从内存中读取一个数据块的流程图。
[0026]图3是CPU将一个数据块写回内存的流程图。

【具体实施方式】
[0027]下面结合附图对本发明做进一步的说明。具体实现过程如下,结合图1、2和3:
[0028]当CPU从内存中读取一个数据块时:
[0029]①系统从内存中读取密文形式的数据块;
[0030]②如果这个数据块的counter在片上counter缓存中,转到④;
[0031]③如果这个数据块的counter不在片上counter缓存中,计算counter在内存中的位置,从内存中读取counter ;
[0032]④应用计数器模式加密方法解密数据块;
[0033]⑤程序结束。
[0034]当CPU将一个数据块写回内存时:
[0035]①系统为需要写回的数据块分配最新的counter ;
[0036]②应用计数器模式加密方法,加密数据块;
[0037]③计算counter在内存中的存储位置;
[0038]④将数据块写回内存;
[0039]⑤检查这个最新的counter是否需要写回内存?
[0040]⑥如果不需要写回内存,则暂不写回,转到⑧;
[0041]⑦如果需要写回内存,将多个counter —起写回内存;
[0042]⑧程序结束。
[0043]如上面描述的那样,当CPU从内存中读取数据块时,如果这个数据块的counter在counter缓存中,则直接应用计数器模式加密方法进行解密;如果counter不在counter缓存中,则计算这个counter在内存中的存储位置,从内存中读取,然后再应用计数器模式加密方法进行解密。不需要在内存中存储其他的额外数据,也不会在数据的关键路径上添加完整性验证延迟,降低了完整性保护方案导致的计算资源大量占用。
【权利要求】
1.一种保护内存存储器数据完整性的方法,其特征在于隐藏数据块和系统为这个数据块分配的最新的counter的存储地址之间的映射关系;具体包括以下两个部分: 当CPU将一个数据块写回内存时:首先,系统使用的counter自动增长,给这个数据块分配新的counter,然后应用计数器模式加密方法对数据块加密,以获得相应的密文;将得到的密文形式的数据块写回内存;使用加密后的数据块和这个数据块的地址作为带密钥的MAC函数的输入产生相应的输出,根据这个输出确定这个数据块对应的counter在内存的最新存储位置,如式(I);如果counter在缓存中不需要写回内存,则不写回;如果需要写回内存,则将其写回到根据1.13计算得出的结果确定的内存位置上,并且数据块与它所对应的counter不是同时写回内存;当counter需要写回内存时,可以将多个counter批量写回,使攻击者无法分析出数据与counter的对应关系;使用的数据块的地址是数据块的物理地址:
addrcounter = Hkey (block addrblock) (I); 当CPU从内存中读取一个数据块时:直接从内存中读取数据块;同时,如果这个数据块对应的counter在缓存中,则直接使用这个counter解密取到的数据块;如果这个counter不在缓存中,则根据计算系统为这个数据块分配的counter在内存中的存储位置,读取这个counter,使用读取到的counter对取到的数据块进行解密。
2.如权利要求1所述的保护存储器数据完整性的方法,其特征在于将数据块和数据块的地址的连接作为带密钥的MAC函数的输入,确保每次的输入都是不同的,产生不同的输出;如果产生冲突,采用通用的冲突消解方法处理。
3.如权利要求1或2所述的保护存储器数据完整性的方法,其特征在于,添加另一个非常短的输入counter_i,进一步消除MAC函数的输入发生重复的可能性,counter_i与数据以明文方式连接起来存储;相应的,在验证数据完整性的步骤中,计算counter的存储地址时也按照式(2)计算:
addrcounter = Hkey (block | | counter_i | | addrblock) (2)。
【文档编号】G06F12/06GK104463020SQ201410707362
【公开日】2015年3月25日 申请日期:2014年11月27日 优先权日:2014年11月27日
【发明者】姚念民, 徐文霞, 谭国真, 战福瑞, 陈炳才 申请人:大连理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1