运行时程序安全关键数据的完整性验证方法及装置制造方法及图纸

技术编号:8323748 阅读:233 留言:0更新日期:2013-02-14 02:38
本发明专利技术公开了一种运行时程序安全关键数据的完整性验证方法及装置,方法步骤如下:1)在程序中指明安全关键变量,在编译时生成安全关键数据集合,加载程序时将程序的虚拟地址空间分为保护区域和非保护区域、将安全关键数据集合加载至保护区域内,为程序保护区域的虚拟页构造完整性验证树;2)在向内存写入程序数据时,更新根验证值;在从内存中读取程序数据时,生成新的根验证值,并将新的根验证值与原根验证值进行比较,如果两者相等则判定安全关键数据集合未被篡改,否则判定安全关键数据集合已经被篡改;装置包括数据完整性验证电路、根验证值存储模块、比较器。本发明专利技术具有安全性能高、防攻击性能强、运算量小、占用存储空间少的优点。

【技术实现步骤摘要】

本专利技术涉及计算机安全领域,具体涉及一种运行时程序安全关键数据的完整性验证方法及装置
技术介绍
在计算机系统中,可假设处理器芯片可以防御各类物理攻击,是安全可信的。但是位于处理器之外的内存和片外总线可能遭受物理攻击。攻击者可以破坏内存中的数据,也可以破坏在总线上传输的数据。例如其他连接在片外总线上,可以直接对内存进行读写的主设备,都可以成为攻击者。如图I所示,位于处理器之外的内存和片外总线可能遭受物理攻击的攻击类型主要有三类欺骗攻击(a),换位攻击(b)和重放攻击(C)。欺骗攻击指的是攻击者将某个内存数据块用伪造的数据块(被篡改的数据)代替;换位攻击指的是攻击者使 用地址A的数据块〈Data §2>替换地址B的数据块〈Data §4> ;重放攻击指的是攻击者用地址A之前的旧数据〈Data (@4,tl) >替换地址A当前存储的数据〈Data (@4,t2) >。针对单处理器的内存完整性验证,国际上有很多研究,现有工作都是基于上述假设,认为处理器是可信的,信任边界包括处理器内部的计算和存储单元,即处理器和片上cache。现有技术的内存完整性保护方法主要有如下几种 I、最直接的内存完整性保护方法的步骤如下 第一步,对整个片外存储器的内容计算摘要值。第二步,将计算得到的摘要值存储在可信区域中(如处理器芯片中)。第三步,当从内存中读出数据块的时候,重新计算整个内存的摘要值,和处理器上保存的摘要值进行比较,如果相等,数据完整性未被篡改,如果不相等,则数据已被篡改。第四步,当数据写入内存时,如果经过处理器确认修改合法,则可以执行,同时重新计算整个内存芯片的摘要值,并更新处理器芯片中保存的摘要值。但是此类方法的摘要运算量和访存带宽太大,可用性差。2、另外一类内存完整性保护方法的步骤如下 第一步,将内存分块,为每个内存块计算一个摘要值。第二步,将所有的内存数据块的摘要值保存在可信区域中(如处理器芯片中)。第三步,当处理器读取数据块的时候,计算数据块的摘要值,和处理器上保存的对应摘要值进行比较,如果相等,数据完整性未被篡改,如果不相等,则数据已被篡改。第四步,当数据写入内存时,如果经过处理器确认修改合法,则可以执行,同时重新计算所涉及内存块的摘要值,并更新处理器芯片中保存的摘要值。这类方法减少了每次计算的内存块的大小,并且可以通过在片上cache缓存内存块的摘要值减少对访存带宽的占用,但是这样会占用片上存储宝贵的存储空间。3、针对方法I和方法2所存在的问题,很多研究者提出了基于树结构的内存完整性保护方法,包括Merkle Tree、可并行验证树PAT(the Parallelization AuthenticationTree)和防篡改计数树 TEC Tree (the Tamper-Evident Counter Tree)。基于树结构的内存完整性保护方法的步骤如下 第一步,将要保护的数据分块,作为验证树的叶子节点,逐级向上计算,直到获得根节点的值。将根节点的值存储在可信区域(如处理器芯片中)。第二步,读取数据的时候,通过计算被读取数据的完整性验证值,并且结合之前计算的其余完整性验证值,计算获得根验证值,和存储在可信区域的根验证值进行比较。如果相等,则表明数据没有被篡改,如果不相等,则表明数据被篡改。第三步,写入数据的时候,如果写入合法,则以写入数据为输入,重新计算完整性验证树,计算根验证值,更新保存在可信区域的完整性验证树根验证值。目前基于这种树形结构的内存完整性保护机制,分为基于物理地址和基于虚拟地址两类。基于物理地址的保护机制,对整个物理地址空间进行保护。基于虚拟地址的保护机制,对程序的整个虚拟地址空间进行保护。基于物理地址的保护机制无法预防攻击者通过修改虚实地址映射,用未被篡改的数据块顶替被篡改的数据块进行完整性验证而实施的·攻击。基于虚拟地址的保护机制,由于程序的虚拟地址空间过大,构造树结构耗费巨大而很难实用。
技术实现思路
本专利技术要解决的技术问题是提供一种能够检测到程序运行时安全关键数据的篡改、安全性能高、防攻击性能强、完整性运算量小、占用存储空间少的运行时程序安全关键数据的完整性验证方法及装置。为了解决上述技术问题,本专利技术采用的技术方案为 一种运行时程序安全关键数据的完整性验证方法,其实施步骤如下 1)在程序中指明待保护的安全关键变量,在编译程序时为安全关键变量生成对应的安全关键数据集合,在加载程序时将程序的虚拟地址空间分为保护区域和非保护区域、将安全关键数据集合加载至所述保护区域内,为所述程序的保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中; 2)当处理器发出读写操作向内存写入程序数据时,更新保存在处理器中的根验证值;在处理器片上高速缓存的读写操作从内存中读取程序数据时,生成新的完整性验证树的根验证值,并将新的根验证值与保存在处理器中的根验证值进行比较,如果两者相等则判定安全关键数据集合未被篡改,否则判定安全关键数据集合已经被篡改。作为本专利技术运行时程序安全关键数据的完整性验证方法的进一步改进 所述步骤I)的详细执行步骤如下 I.I)编程时在程序中通过编译指导语句显式指明待保护的安全关键变量; I.2)初始化安全关键数据集合为空,将编译指导语句显式指明的安全关键变量加入所述安全关键数据集合,对所述安全关键数据集合中的每一个安全关键变量进行引用-定值分析,然后将每一个安全关键变量的定值集合合并到所述安全关键数据集合中,直至所述安全关键数据集合中不再增加新的安全关键变量为止; I.3)在生成可执行文件时构造用于存放安全关键数据集合的新数据段; I.4)在操作系统加载程序的可执行文件时,将程序对应的虚拟地址空间分为保护区域和非保护区域,为所述新数据段在保护区域内分配虚拟页,并将所述安全关键数据集合分别加载至程序的保护区域内的虚拟页中; I. 5)为程序对应保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中。所述步骤I. 5)的详细执行步骤如下 I. 5. I)将程序对应保护区域中的每一个虚拟页以缓存行大小或者缓存行大小的2倍划分为多个数据块,使每一个虚拟页按照缓存行对齐,其中η为整数; I. 5. 2)对多个数据块采用哈希函数生成一级哈希值,然后根据预设的完整性验证树的叶子节点数量对多个一级哈希值作为一组进行合并生成二级哈希值、对多个二级哈希值作为一组进行合并生成三级哈希值,依次类推进行迭代,最终得到哈希树的根哈希值即为完整性验证树的根验证值; 1.5. 3)将所述完整性验证树的根验证值保存在处理器中。所述步骤I. 5. 3)中将完整性验证树的根验证值保存在处理器中时,每一个根验证值的地址ADDR为ADDR=BA+S* (N-I),其中BA为程序的虚拟地址空间中保护区域的基地址,S为每一个根验证值所占用的存储空间大小,N为根验证值在处理器中的存储编号。所述处理器中的每一项根验证值的纪录包括进程编号、虚拟内存中的虚拟页编号和根验证值。所述步骤2)的详细步骤如下 2.I)获取处理器片上高速缓存的读写操作,如果读写操作的目的地址属于虚拟地址空间保护区域内,则跳转执行步骤本文档来自技高网
...

【技术保护点】
一种运行时程序安全关键数据的完整性验证方法,其特征在于实施步骤如下:1)在程序中指明待保护的安全关键变量,在编译程序时为安全关键变量生成对应的安全关键数据集合,在加载程序时将程序的虚拟地址空间分为保护区域和非保护区域、将安全关键数据集合加载至所述保护区域内,为所述程序的保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中;2)当处理器发出读写操作向内存写入程序数据时,更新保存在处理器中的根验证值;在处理器片上高速缓存的读写操作从内存中读取程序数据时,生成新的完整性验证树的根验证值,并将新的根验证值与保存在处理器中的根验证值进行比较,如果两者相等则判定安全关键数据集合未被篡改,否则判定安全关键数据集合已经被篡改。

【技术特征摘要】
1.一种运行时程序安全关键数据的完整性验证方法,其特征在于实施步骤如下 1)在程序中指明待保护的安全关键变量,在编译程序时为安全关键变量生成对应的安全关键数据集合,在加载程序时将程序的虚拟地址空间分为保护区域和非保护区域、将安全关键数据集合加载至所述保护区域内,为所述程序的保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中; 2)当处理器发出读写操作向内存写入程序数据时,更新保存在处理器中的根验证值;在处理器片上高速缓存的读写操作从内存中读取程序数据时,生成新的完整性验证树的根验证值,并将新的根验证值与保存在处理器中的根验证值进行比较,如果两者相等则判定安全关键数据集合未被篡改,否则判定安全关键数据集合已经被篡改。2.根据权利要求I所述的运行时程序安全关键数据的完整性验证方法,其特征在于,所述步骤I)的详细执行步骤如下 I. I)编程时在程序中通过编译指导语句显式指明待保护的安全关键变量; I. 2)初始化安全关键数据集合为空,将编译指导语句显式指明的安全关键变量加入所述安全关键数据集合,对所述安全关键数据集合中的每一个安全关键变量进行引用-定值分析,然后将每一个安全关键变量的定值集合合并到所述安全关键数据集合中,直至所述安全关键数据集合中不再增加新的安全关键变量为止; I.3)在生成可执行文件时构造用于存放安全关键数据集合的新数据段; I.4)在操作系统加载程序的可执行文件时,将程序对应的虚拟地址空间分为保护区域和非保护区域,为所述新数据段在保护区域内分配虚拟页,并将所述安全关键数据集合分别加载至程序的保护区域内的虚拟页中; I.5)为程序对应保护区域中的每一个虚拟页构造完整性验证树,并将所述完整性验证树的根验证值保存在处理器中。3.根据权利要求2所述的运行时程序安全关键数据的完整性验证方法,其特征在于,所述步骤I. 5)的详细执行步骤如下 I.5. I)将程序对应保护区域中的每一个虚拟页以缓存行大小或者缓存行大小的2倍划分为多个数据块,使每一个虚拟页按照缓存行对齐,其中η为整数; I.5. 2)对多个数据块采用哈希函数生成一级哈希值,然后根据预设的完整性验证树的叶子节点数量对多个一级哈希值作为一组进行合并生成二级哈希值、对多个二级哈希值作为一组进行合并生成三级哈希值,依次类推进行迭代,最终得到哈希树的根哈希值即为完整性验证树的根验证值; I.5. 3)将所述完整性验证树的根验证值保存在处理器中。4.根据权利要求3所述的运行时程序安全关键数据的完整性验证方法,其特征在于所述步骤I. 5. 3)中将完整性验证树的根验证值保存在处理器中时,每一个根验证值的地址ADDR为ADDR=BA+S*(N-I),其中BA为程序的虚拟地址空间中保护区域的基地址,S为每一个根验证值所占用的存储空间大小,N为根验证值在处理器中的存储编号。5.根据权利要求4所述的运行时程序安全关键数据的完整性验证方法,其特征在于...

【专利技术属性】
技术研发人员:王蕾邓宇王永文窦强李姗姗孙彩霞张承义高军黄立波倪晓强隋兵才陈微赵天磊
申请(专利权)人:中国人民解放军国防科学技术大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1