一种非平衡哈希树的存储器完整性保护方法

文档序号:9417311阅读:220来源:国知局
一种非平衡哈希树的存储器完整性保护方法
【技术领域】
[0001] 本发明涉及的是内存完整性校验领域,具体为一种非平衡哈希树的存储器完整性 保护方法。 技术背景
[0002] 随着科技的发展,计算机的应用越来越普及,由于计算机处理的数据会涉及很多 的机密,因此,保证计算机在处理这些数据的安全成了当前研究的热点。数据的安全性包括 机密性和完整性。在这里本发明只涉及如何确保数据的完整性。攻击者可以对总线上流动 的数据进行欺骗、重组、重放攻击。完整性保护就是要保证能够检测到攻击者对数据所实施 的恶意篡改行为,如硬件搭载攻击。重点在于保护信息使之免受重放攻击。重放攻击是指攻 击者把以前存储在某个地址单元中的数据替换现在的数据。目前防范重放攻击主要通过使 用树形校验机制。根据认证单元采用的方法与构建树过程的不同,又可分为Merkle Tree、 并行校验树PAT tree和TEC-Tree三种方案。
[0003] Merkle Tree又称Hash Tree,是一种最早用于完整性校验的树机制。由Merkle 在1980年提出主要用于公钥系统中的有效计算问题。Blum等人修改后将其用于存储器内 容的完整性校验中。它通过对内存数据块进行迭代哈希计算建立一棵树,在CPU上保存根 结点从而可以确保数据的完整性,尤其是可以抵抗重放攻击。缺点是数据块更新时不能并 行计算,因此延迟比较大。针对这个缺点提出了并行校验树PAT,由于该方法每次进行哈希 计算时都对应一个随机数,高层结点的计算不直接依赖于低层结点,上层结点通过将子结 点的随机数连接后计算MAC,因此它实现了数据更新时的并行计算。但是Merkle Tree和 PAT树只能够保证数据的完整性,即它们的完整性保护和机密性保护方案是分开的,针对这 个缺点提出了 TEC-Tree,它通过往数据中添加冗余数据,在保证数据完整性的同时也保证 了数据的机密性。
[0004] 这三种树的一个共同的特点是它们建立的树都是平衡树,所有数据块的校验路径 长度都相同。虽然已经提出了缓存哈希树CHTree,把Merkle Tree的部分上层结点保存在 缓存中,这种方法虽然能够有效缩短校验长度,但是访问频率高的和访问频率低的数据块 的校验路径长度依然相同,因此平均看来数据块进行哈希计算时延迟仍然很大。

【发明内容】

[0005] 本发明的目的在于提供一种缩短树中叶子节点的平均校验路径长度的非平衡哈 希树的存储器完整性保护方法。
[0006] 本发明的目的是这样实现的:
[0007] (1)初始化
[0008] (I. 1)把内存分成相同大小的数据块data_block[i],每个数据块有一个计数器 counter [i]来记录对该数据块的读/写次数;初始时,counter [i] = 0,当处理器读写数据 块data_block[i]时,计数器值counter[i] = counter[i]+l ;数据块结构采用3链表式:
[0009] (I. 2)设置一个定时器Time ;当定时器到达设定的时间后,构建一棵非平衡二叉 树,同时把所有数据块data_block的计数器counter全部清零,重新计数;
[0010] (2)构建非平衡二叉树
[0011] (2. 1)把内存中η个数据块的读/写次数作为权值,则得到η个权值 (W1, W2, W3, W4, W5,......WrJ,每个权值构成一棵只有根节点的树Ti,则得到有η棵树的集合F = (Ti, T2, T3, T4, T5,......Τη};
[0012] (2. 2)从集合F中选取权值最小的两棵树1\和T j,作为左右孩子构建一棵新的树 T,新树T节点的权值为两个孩子节点权值之和;从集合F中删除1\和T j,并把树T加入集 合F中;
[0013] (2. 3)重复步骤(2. 2),直到集合F中只剩下一棵树;
[0014] ⑶写操作
[0015] (3. 1)当CPU向内存写入数据块data_block[i]时,更新计数器counter[i]= counter[i]+1 ;
[0016] (3. 2)找到数据块data_block[i]的相应叶子节点的指针;
[0017] (3. 3)连接数据块和兄弟结点所对应的数据块,重新计算数据块连接之后的哈希 值hash,更新父节点的哈希值,重复(3. 1) -(3. 3)直到根节点;
[0018] (3.4)检查定时器Time是否到达设定时间,如果已经到达设定时间,则重新建立 非平衡哈希树,否则,写操作结束;
[0019] ⑷读操作
[0020] (4. 1)当CPU读内存数据块data_block[i]时,更新它的计数器counter [i]= counter[i]+1 ;
[0021] (4· 2)找到数据块data_block[i]的相应叶子节点的指针;
[0022] (4. 3)连接数据块和兄弟结点所对应的数据块,然后计算数据块连接之后的哈希 值hash,把哈希结果与父节点的哈希值进行比较,重复这个过程直到根节点,如果最后计算 的根节点的哈希值与CPU中存储的根节点的哈希值相同,则说明数据是正确的,没有被篡 改,CPU可以使用数据;反之,则说明数据被篡改,发出警报;
[0023] (4.4)检查定时器Time是否到达设定时间,如果已经到达设定时间,则重新建立 非平衡哈希树,否则,读操作结束。
[0024] 本发明的有益效果在于:
[0025] 本发明从整体上缩短了数据认证时的路径长度。
[0026] 在构建非平衡二叉树的过程中,会出现3种情况,第一种是附图1中列举的一般情 况,在这种情况下,已经证明,本文的方法比普通的平衡二叉树平均校验长度小。除一般情 况外,在构建非平衡二叉树的过程中还会出现两种极端情况,分别是:
[0027] (1)构建的树和原先的平衡二叉树相同。这种情况下它们的校验代价相同。
[0028] (2)构建的非平衡二叉树是单支二叉树。在这种情况下非平衡二叉树的校验代价 要小于普通平衡二叉树的校验代价。
[0029] 综上所述,本方法在一般情况下,校验代价要低于普通的平衡二叉树的校验代价, 即使在最坏情况下,本方法的性能也不会高于普通的平衡二叉树的校验代价,而是与它的 校验代价相同。
【附图说明】
[0030] 图1为平衡二叉树和非平衡二叉树。
[0031] 图2为构建非平衡二叉树步骤。
[0032] 图3为向内存中写入数据步骤。
[0033] 图4为从内存中读数据步骤。
【具体实施方式】
[0034] 下面结合附图对本发明做进一步描述。
[0035] 本发明涉及的是内存完整性校验领域,是一种基于局部性原理的非平衡哈希树的 存储器完整性保护方法。为了防止重放攻击,目前大多采用树结构保护数据的完整性。目 前使用的树都是平衡N叉树,所有的叶子节点在树中的层次都相同,即所有数据块的校验 路径长度是相同的。根据程序的局部性原理,在一段时间内某些数据访问频率高,某一些数 据访问频率低。因此本发明对哈希树进行改进,建立一棵非平衡二叉树,使那些访问频率高 的节点离根节点近,使那些访问频率低的节点离根节点远。这样访问频率高的数据块校验 路径短,访问频率低的数据块校验路径长。从整体上来缩短校验路径,减少延迟。
[0036] 为了缩短树中叶子节点的平均校验路径长度,本发明提出一种非平衡哈希树的存 储器完整性保护方法。根据程序的局部性原理,内存中的数据在一段时间内的访问频率是 不相同的,有些数据的访问频率要高,有些数据的访问频率要低。因此,本发明提出的方法 是建立一棵非平衡二叉树,把那些最近访问频率很高的数据块放在离根节点近的地方,相 反,那些不经常使用到的数据块放在离根节点远的地方。缩短数据块的平均校验路径长度。 如附图1所示(其中叶子节点上的数字为访问次数)。
[0037] 本发明把内存划分成相同大小的数据块data_block[i],并且为每个数据块都设 置一个计数器counter [i],用来记录对数据块的读/写次数。在内存中存储数据块的同时 存储相应的叶子节点的指针,叶子节点为数据块的哈希值。设置一个定时器Time,当定时 器Time到达设定时间后,以内存数据块的哈希值作为叶子节点构建非平衡哈希树,每次移 动叶子节点时,要改变相应叶子节点的指针,并且在CPU中保留该哈希树的根节点,用于完 整性校验。
[0038] 构建非平衡哈希树的具体操作如下:
[0039] (1)把内存中η个数据块的读/写次数作为权值,则得到η个权值 (W1, W2, W3, W4, W5,......WrJ,每个权值构成一棵只有根节点的树Ti,则得到有η棵树的集合F = (Ti, T2, T3, T4, T5,......TrJ 〇
[0040] (2)从集合F中选取权值最小的两棵树1\和T j,以它们作为左右孩子构建一棵新 的树T,新树T节点的权值为两个孩子节点权值之和。从集合F中删除1\和T j,并把树T加 入集合F中。
[0041] (3)重复步骤(2),直到集合F中只剩下一棵树。
[0042] 当处理器向内存中写入数据块data_block[i]时,更新数据块的访问次数 counter [i]和整个哈希树。具体的操作如下:
[0043] (1)当CPU向内存写入数据块data_block[i]时,更新它的计数器counter [i]= counter[i]+1 ο
[0044] ⑵然后找到数据块data_block[i]的相应叶子节点的指针。
[0045] (3)连接数据块和兄弟结点所对应的数据块,重新计算数据块连接之后的哈希值 hash,更新父节点的哈希值,重复这个过程直到根节点。
[0046] (4)检查定时器Time是否到达设定时间,如果已经到达设定时间,则重新建立非 平衡哈希树,否则,写操作结束。
[0047] 当处理器从内存中读数据块data_block[i]时,更新它的计数器counter [i],同 时对数据进行完整性检验。具体的操作如下:
[0048] (1)当CPU读内存数据块data_block[i]时,更新它的计数器counter[i]= counter[i]+1〇
[0049] ⑵然后找到数据块data_block[i]的相应叶子节点的指针。
[0050] (3)连接数据块和兄弟结点所对应的数据块,然后计算数据块连接之后的哈希值 hash,把哈希结果与父节点的哈希值进行比较,重复这个过程直到根节点,如果最后计算的 根节点的哈希值与CPU中存储的根节点的哈希值相同,则说明数据是正确的,没有被篡改, CHJ可以使用数据;反之,则说明数据被篡改,发出警报。
[0051] (4)检查定时器Time是否到达设定时间,如果已经到达设定时间,则重新建立非 平衡哈希树,否则,读操作结束。
[0052] 使用树的带权校验长度(树中所有叶子节点的带权校验长度之和)作为性能比较 的标准,用WPL表示,S[
。其中权值W1为每个叶子节点的读/写次数,I 1 为叶子节点的校验长度,即路径上分支数目。η为节点的数目。
[0053] 根据数据块的读写频率,而不是读写次数来重建哈希树。
[0054] 在介绍本发明的内容前先给出以下定义:
[0055] 权值:数据块的读/写次数,用w表示。
[0056] 节点的带权校验长度:从节点到树根节点之间的校验长度与节点上权的乘积,用 WPL 表示,即 WPLi= w i*Ii。
[0057] 树的带权校验长度:树中所有叶子节点的带权校验长度之和,用WPL表示,即
[0058] 把内存划分成相同大小的数据块data_block[i],并且为每个数据块都设置一个 计数器counter [i],用来记
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1