[发明专利]运行时程序安全关键数据的完整性验证方法及装置有效
申请号: | 201210494049.8 | 申请日: | 2012-11-28 |
公开(公告)号: | CN102930185A | 公开(公告)日: | 2013-02-13 |
发明(设计)人: | 王蕾;邓宇;王永文;窦强;李姗姗;孙彩霞;张承义;高军;黄立波;倪晓强;隋兵才;陈微;赵天磊 | 申请(专利权)人: | 中国人民解放军国防科学技术大学 |
主分类号: | G06F21/10 | 分类号: | G06F21/10 |
代理公司: | 湖南兆弘专利事务所 43008 | 代理人: | 赵洪;谭武艺 |
地址: | 410073 湖南省长沙市砚瓦池正*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 运行 程序 安全 关键 数据 完整性 验证 方法 装置 | ||
1.一种运行时程序安全关键数据的完整性验证方法,其特征在于实施步骤如下:
1)在程序中指明待保护的安全关键变量,在编译程序时为安全关键变量生成对应的安全关键数据集合,在加载程序时将程序的虚拟地址空间分为保护区域和非保护区域、将安全关键数据集合加载至所述保护区域内,为所述程序的保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中;
2)当处理器发出读写操作向内存写入程序数据时,更新保存在处理器中的根验证值;在处理器片上高速缓存的读写操作从内存中读取程序数据时,生成新的完整性验证树的根验证值,并将新的根验证值与保存在处理器中的根验证值进行比较,如果两者相等则判定安全关键数据集合未被篡改,否则判定安全关键数据集合已经被篡改。
2.根据权利要求1所述的运行时程序安全关键数据的完整性验证方法,其特征在于,所述步骤1)的详细执行步骤如下:
1.1)编程时在程序中通过编译指导语句显式指明待保护的安全关键变量;
1.2)初始化安全关键数据集合为空,将编译指导语句显式指明的安全关键变量加入所述安全关键数据集合,对所述安全关键数据集合中的每一个安全关键变量进行引用-定值分析,然后将每一个安全关键变量的定值集合合并到所述安全关键数据集合中,直至所述安全关键数据集合中不再增加新的安全关键变量为止;
1.3)在生成可执行文件时构造用于存放安全关键数据集合的新数据段;
1.4)在操作系统加载程序的可执行文件时,将程序对应的虚拟地址空间分为保护区域和非保护区域,为所述新数据段在保护区域内分配虚拟页,并将所述安全关键数据集合分别加载至程序的保护区域内的虚拟页中;
1.5)为程序对应保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中。
3.根据权利要求2所述的运行时程序安全关键数据的完整性验证方法,其特征在于,所述步骤1.5)的详细执行步骤如下:
1.5.1)将程序对应保护区域中的每一个虚拟页以缓存行大小或者缓存行大小的2n倍划分为多个数据块,使每一个虚拟页按照缓存行对齐,其中n为整数;
1.5.2)对多个数据块采用哈希函数生成一级哈希值,然后根据预设的完整性验证树的叶子节点数量对多个一级哈希值作为一组进行合并生成二级哈希值、对多个二级哈希值作为一组进行合并生成三级哈希值,依次类推进行迭代,最终得到哈希树的根哈希值即为完整性验证树的根验证值;
1.5.3)将所述完整性验证树的根验证值保存在处理器中。
4.根据权利要求3所述的运行时程序安全关键数据的完整性验证方法,其特征在于:所述步骤1.5.3)中将完整性验证树的根验证值保存在处理器中时,每一个根验证值的地址ADDR为ADDR=BA+S*(N-1),其中BA为程序的虚拟地址空间中保护区域的基地址,S为每一个根验证值所占用的存储空间大小,N为根验证值在处理器中的存储编号。
5.根据权利要求4所述的运行时程序安全关键数据的完整性验证方法,其特征在于:所述处理器中的每一项根验证值的纪录包括进程编号、虚拟内存中的虚拟页编号和根验证值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国人民解放军国防科学技术大学,未经中国人民解放军国防科学技术大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210494049.8/1.html,转载请声明来源钻瓜专利网。