一种基于写计数器的存储器完整性保护方法
【技术领域】
[0001]本发明涉及的是内存完整性校验领域,具体为一种基于写计数器的存储器完整性保护方法。
技术背景
[0002]随着科技的发展,计算机的应用越来越普及,许多计算机会处理很多机密信息,因此如何保证这些数据的安全成了当前研究的热点。完整性保护就是要保证能够检测到攻击者对数据所实施的恶意篡改行为,如硬件搭载攻击。攻击者可以对总线上流动的数据进行欺骗、重组、重放攻击。保护的重点在于抵抗重放攻击。重放攻击是指攻击者把以前存储在某个地址单元中的数据替换现在的数据。目前防范重放攻击主要通过使用树形校验机制。根据认证单元采用的方法与构建树过程的不同,又可分为Merkle Tree、并行校验树PAT和TEC-Tree这三种方案。
[0003]哈希树通过对内存数据块进行迭代哈希计算建立一棵树,在CPU上保存根结点从而可以确保数据的完整性,尤其是可以抵抗重放攻击。
[0004]树机制的缺点是校验路径长,进行哈希计算时延迟大。
【发明内容】
[0005]本发明的目的在于提供一种效率更高的基于写计数器的存储器完整性保护方法。
[0006]本发明的目的是这样实现的:
[0007]—种基于写计数器的存储器完整性保护方法,数据块分2种,一种数据块有相对应的写计数器,记录处理器向该地址内存块的写次数,写计数器保存在处理器芯片内一个专用的写计数器缓存中,并且写计数器缓存与L2缓存处于同一层级;在写计数器缓存中,还为数据块分配一个私有密钥;在进行完整性验证时使用该密钥进行MAC计算;对于有写计数器的内存数据块用消息验证码来进行完整性验证;另一种数据块没有写计数器,在没有写计数器的内存数据块上构建哈希校验树,并且在L2缓存中保留该哈希树的根节点,校验完整性;
[0008](I)当处理器对外部存储器进行写操作时要查看计数器缓存是否命中,如果不命中,对计数器缓存进行替换,处理器向地址为addr的内存块写入数据content,具体的操作如下:
[0009](1.1)查看写计数器缓存中是否含有地址为addr的内存块的写计数器;
[0010](1.2)如果写计数器缓存命中,则表明该内存块已采用MAC进行完整性保护,已配备的相应写计数器为counter,将counter增加I ;
[0011](1.3)如果counter增加I后没有发生溢出,那么将content、addr以及counter相连后,使用相应的密钥k进行MAC计算,得到相应的Tag,然后将content和相应的Tag写入外部存储器;
[0012](1.4)如果counter增加I后发生了溢出,则counter需要重新从O开始计数并且将相应的密钥更换为kl ;再将content、地址addr以及counter相连后在新的密钥kl下进行MAC计算,得到Tag,将数据content和Tag写入至外部存储器;
[0013](1.5)如果写计数器缓存未命中,则检查写计数器缓存是否已满;
[0014](1.6)如果写计数器缓存未命中且缓存空间未满,则为该内存块分配一个初始值为O的写计数器counter,并分配一个密钥k ;将content、地址addr以及counter相连后在密钥k下进行MAC计算得到Tag ;将数据content和Tag都存放到外部存储器中;
[0015](1.7)如果写计数器缓存未命中且此时缓存空间已满,则采用置换算法将某个内存数据块的相应写计数器替换出去;然后为地址为addr的内存块分配一个初始值为O的counter和初始密钥k,将数据content及地址addr并上counter后在密钥k下进行MAC运算得到Tag J^Tag和数据内容content写入外部存储器;对于被替换写计数器的内存数据块,采用Hash树来保护完整性;
[0016](2)当处理器从外部存储器进行读操作时要对数据块进行完整性检查,处理器从地址为addr的内存块读数据content,具体的操作如下:
[0017](2.1)检查写计数器缓存,查看是否含有该内存块的写计数器;
[0018](2.2)如果写计数器缓存命中,则表示该内存数据块采用MAC进行完整性校验;处理器读取该内存块的数据内容和相应的Tag ;取的数据内容与地址addr和相应的写计数器counter相连后进行计算得到一个新的认真标签Tagl,将其与读取的Tag相比较;若两者匹配,则验证通过,处理器可以使用该数据内容;否则,数据失效;
[0019](2.3)如果写计数器存未命中,则表示该内存数据块在Hash校验树的保护下;按照Hash校验树的验证过程进行校验即可;当验证通过则可以使用该数据;否则,数据失效。
[0020]当写计数器发生溢出时,更换其相应的密钥后再次进行MAC计算。
[0021]本发明的有益效果在于:
[0022]采用消息验证码进行完整性验证与哈希校验树相比,其最大的优势在于它的验证开销小得多。哈希校验树进行完整性验证时,需要从叶子节点一直迭代到根节点计算哈希值。而消息验证码只需进行一次MAC计算即可,也就是说只需要进行哈希树中的一层操作即可。
【附图说明】
[0023]图1为WCIP的存储器写操作流程
[0024]图2为WCIP的存储器读操作流程
[0025]图3为WCIP结构
[0026]图4为写计数器缓存
[0027]图5为片外存储器
【具体实施方式】
[0028]下面结合附图对本发明做进一步描述。
[0029]本发明涉及的是内存完整性校验领域,具体为一种基于写计数器的存储器完整性保护方法。目前在内存完整性方面主要采用树结构,如Merkle Tree,PAT, TEC-Tree来保护内存,数据更新时需要从叶子结点递归到根结点,延迟非常的大。本发明对存储器上的数据采用不同的完整性验证机制。一种数据块有写计数器,用它记录处理器向该地址内存块的写次数,写入数据时将内存块地址、写计数器和数据内容进行连接后进行MAC函数计算得到相应的认证标签进行完整性验证;有的数据块没有写计数器,没有写计数器的数据块则通过构建哈希树来保护完整性,即以这些数据块为叶子节点,通过构建一棵哈希树进行完整性验证。这些数据块之间所采用的完整性验证方法是根据一定的规则而改变的。数据块地址代表数据块在空间上的唯一性,写计数器可以表示数据块在时间上的唯一性。因此可以有效的抵抗重放攻击。并且由于在校验时只需要进行一次哈希计算,因此校验代价非常小。
[0030]为了减少数据校验时的延迟,本发明提出一种基于写计数器的存储器完整性保护方法。为了抵抗重组攻击,可以为数据块分配一个写计数器,用它记录处理器向该地址内存块的写次数,写入数据时将内存块地址、写计数器和数据内容进行连接后进行MAC函数计算得到相应的认证标签。如果说数据块地址代表数据块在空间上的唯一性,那么写计数器则可以表示数据块在时间上的唯一性。
[0031]数据块分2种,一种数据块有与之相对应的一定长度的写计数器,用它记录处理器向该地址内存块的写次数,写计数器保存在处理器芯片内一个专用的写计数器缓存中,并且写计数器缓存与L2缓存处于同一层级。在写计数器缓存中,还为数据块分配一个私有密钥。在进行完整性验证时使用该密钥进行MAC计算。对于有写计数器的内存数据块用消息验证码来进行完整性验证。另一种数据块没有写计数器,在没有写计数器的内存数据块上构建哈希校验树,并且在L2缓存中保留该哈希树的根节点,用以完整性校验。当写计数器发生溢出时,更换其相应的密钥后再次进行MAC计算,以此来防止重放攻击。
[0032]通过以下过程实现发明的内存完整性校验方法:
[0033]1、写操作
[0034]处理器对外部存储器进行写操作的流程如附图1所示。当处理器对外部存储器进行写操作时要查看计数器缓存是否命中,如果不命中,还要对计数器缓存进行替换,假设处理器向地址为addr的内存块写入数据content,具体的操作步骤如下:
[0035](I)查看写计数器缓存中是否含有地址为addr的内存块的写计数器。
[0036](2)如果写计数器缓存命中,则表明该内存块已采用MAC进行完整性保护,假设其已配备的相应写计数器为counter。此时,将counter增加I。
[0037](3)如果counter增加I后没有发生溢出,那么将content、addr以及counter相连后,使用相应的密钥k进行MAC计算,得到相应的Tag,然后将content和相应的Tag写入外部存储器。
[0038](4)如果counter增加I后发生了溢出,则counter需要重新从O开始计数并且将相应的密钥更换为kl。然后,再将content、地址addr以及counter相连后在新的密钥kl下进行MAC计算,得到Tag,然后将数据content和Tag写入至外部存储器。
[0039](5)如果写计数器缓存未命中,则检查写计数器缓存是否已满。
[0040](6)如果写计数器缓存未命中且缓存空间未满,则为该内存块分配一个初始值为O的写计数器counter,并分配一个密钥k。然后,将content、地址addr以及counter相连后在密钥k下进行MAC计算得到Tag。最后,将数据content和Tag都存放到外部存储器中。
[0041](7)如果写计数器缓存未命中且此时缓存空间已满,则采用一定的置换算法(如FIFO置换算法)将某个内存数据块的相应写计数器替换出去。然后为地址为addr的内存块分配一个初始值为O的counter和初始密钥k,将数据content及地址addr并上counter后在密钥k下进行MAC运算得到Tag。将Tag和数据内容content写入外部存储器。对于被替换写计数器的内存数据块,此时采用Hash树来保护其完整性。
[0042]2、读操作
[0043]处理器对外部存储器进行写操作的流程如图2所示。当处理器从外部存储器进行读操作时要对数据块进行完整性检查,假设处理器从地址为addr的内存块读数据content,具体的操作步骤如下:
[0044](I)首先检查写计数器缓存,查看是否含有该内存块的写计数器。
[0045](2)如果写计数器缓存命中,则表示该内存数据块采用MAC进行完整性校验。此时,处理器读取该内存块的数据内容和相应的Tag。然后,把读取的数据内容与地址