1.基于片上硬件的嵌入式程序完整性多粒度验证系统,其特征在于,包括程序完整性多粒度验证模块、处理器流水线、片上存储器、闪存控制器;
其中,程序完整性验证粒度设置为指令级、基本块级、函数级和混合级;
程序完整性多粒度验证模块包括:
指令分析器,用于负责程序完整性多粒度验证模块与处理器流水线的交互,内置同步译码器、粒度寄存器及其设定电路和敏感指令类型寄存器组;
轻量哈希计算器,使用海绵结构的哈希函数计算各粒度的实际哈希值;
哈希表存储器,以函数为基本单位,用于存储关于各参考标签的存储信息,辅助一次性定位隶属于当前函数的粒度的参考标签在闪存中的位置;
其中,参考标签由参考采样值、参考随机值和偏移值组成;
哈希表映射器,用于将敏感指令地址或函数的入口地址映射到哈希表存储器的对应地址;
元数据缓存,用于存储当前粒度的参考标签,采用栈结构管理参考标签;
以及校验器,用于比较参考标签和实际标签,检测出程序完整性被破坏的粒度,校验器内置随机数发生器、采样位图、采样值寄存器以及异常代码地址寄存器。
2.根据权利要求1所述的基于片上硬件的嵌入式程序完整性多粒度验证系统,其特征在于,所述指令分析器通过识别写指令或检测外部专用按键电路的信号,将粒度寄存器设置为指示指令级、基本块级、函数级别和混合级四种级别程序完整性验证粒度的数值;
指令分析器根据写指令或外部专用按键电路的信号,将能够刻画敏感指令的特征写入到敏感指令类型寄存器组中的一个寄存器;
其中,能够刻画敏感指令的特征是根据指令集选择的机器码字段;
同步译码器根据粒度寄存器的数值,执行和设定粒度相匹配的分析策略,同步分析进入流水线译码阶段的指令;
当同步译码器识别出和敏感指令类型寄存器组中记录的一种指令类型相匹配的指令时,即刻发出流水线暂停信号,直至完成对该指令完整性的验证。
3.根据权利要求1所述的基于片上硬件的嵌入式程序完整性多粒度验证系统,其特征在于,所述轻量哈希计算器内置T+1个通道,每个通道都是独立吸收指令、挤压哈希值的流水线;轻量哈希计算器每吸收一条分支指令,都会备份各通道的状态;
当指令分析器检测到分支预测失败信号时,各通道恢复到备份状态,继续吸收后续指令;
其中,T为轻量哈希计算器完成一次吸收或挤压需要的时钟周期数。
4.根据权利要求1所述的基于片上硬件的嵌入式程序完整性多粒度验证系统,其特征在于,随机数发生器以各粒度的地址为随机数种子生成随机数序列,以各通道相邻两次输出哈希值的均值或已经生成随机数的均值为随机数种子,生成对应各粒度的实际随机数;
校验器根据随机数发生器生成的随机数序列,对轻量哈希计算器各通道挤压出的第一个部分哈希值进行采样,使用采样位图记录采样进程,使用采样值寄存器记录采样过程中获取的实际采样值,同时将获取的实际采样值和参考采样值的对应比特位作比较,并将各随机数在采样位图中的比特位置1;
当实际采样值和参考采样值完全一致,校验器进一步比较最终生成的实际随机数和参考随机值;校验器内置的异常代码地址寄存器由程序完整性被破坏粒度的地址和状态异常标志位两部分组成,状态异常标志位在检测到程序完整性被破坏时置1。
5.基于片上硬件的嵌入式程序完整性多粒度验证方法,基于权利要求1至4任一项所述的基于片上硬件的嵌入式程序完整性多粒度验证系统实现,其特征在于,包括如下步骤:步骤1. 选择程序完整性验证粒度,模拟用户程序的执行过程;
获取用户程序的路径信息,构建调用关系树状图和程序完整性验证所需要的元数据;
其中,元数据包括各粒度的参考标签及其存储信息;
步骤2. 上电初始化;
步骤3. 流水线继续运行,轻量哈希计算器吸收进入译码阶段的指令;
步骤4. 指令分析器根据设定的程序完整性验证粒度,分析译码阶段指令的性质;
当检测到敏感指令,暂停流水线,执行步骤5;当检测到函数调用指令,直接执行步骤5;
当检测到函数返回指令或跳转指令,执行步骤6;其余情况执行步骤3;
步骤5. 哈希表映射器将敏感指令的地址或被调用函数的入口地址映射到其参考标签的存储信息在哈希表存储器中的地址,提取参考标签到元数据缓存;同时随机数发生器以敏感指令的地址或被调用函数的入口地址为随机数种子,生成随机数序列;
步骤6. 轻量哈希计算器进入挤压阶段,校验器使用随机数发生器生成的随机数序列采样轻量哈希计算器各通道输出的第一个部分哈希值,比较实际采样值和参考采样值;
若一致,随机数发生器以相邻两次挤压出的部分哈希值均值与其中较早挤压出的第一个部分哈希值之和为随机数种子生成随机数,否则执行步骤9;
步骤7. 随机数发生器以生成顺序相邻的两个随机数的均值与其中较早生成的第一个随机数之和为随机数种子,继续生成随机数,如此迭代,直至生成最后一个随机数;
步骤8. 校验器清空采样位图,判断生成的实际随机数和参考随机值是否一致;
如果一致,则执行步骤3,否则执行步骤9;
步骤9. 校验器将程序完整性被破坏的函数/基本块的入口地址或敏感指令的地址,写入异常代码地址寄存器。
6.根据权利要求5所述的基于片上硬件的嵌入式程序完整性多粒度验证方法,其特征在于,所述步骤1中,程序完整性验证粒度分为指令级、基本块级、函数级、混合级4种;
其中,指令级、基本块级、函数级分别代表在处理器流水线每完成对一条敏感指令、一个基本块、一个函数的译码时对程序完整性进行验证;
指令级粒度、基本块级粒度和函数级粒度三者或者其中两者组合得到混合级粒度:由指令级粒度参与组合而成的混合级粒度表示在译码一个基本块或函数过程中,如果发现预先设定的敏感指令,需要优先完成对该敏感指令程序完整性的验证;
同时由基本块级和函数级粒度参与组合而成的混合级粒度表示不仅要在流水线每完成对一个基本块或函数的译码时验证程序完整性,还要将先被验证的基本块作为验证后续基本块程序完整性的参数,从而在验证程序完整性的同时,验证程序控制流完整性。
7.根据权利要求5所述的基于片上硬件的嵌入式程序完整性多粒度验证方法,其特征在于,所述步骤3中,轻量哈希计算器在计算由函数级粒度参与组合成的混合级粒度的哈希值时,需要将上一轮的吸收结果作为下一轮吸收的初始状态,每开始新一轮的吸收都恢复初始状态;轻量哈希计算器每吸收一条分支指令需要备份此时的吸收状态;当后续检测到分支预测失败信号时,轻量哈希计算器恢复到备份的吸收状态,重新吸收后续进入译码阶段的指令。
8.根据权利要求5所述的基于片上硬件的嵌入式程序完整性多粒度验证方法,其特征在于,所述步骤4中,指令分析器内部的同步译码器首先根据粒度寄存器的数值,确定设定的程序完整性验证粒度,选择相应的代码分析策略:对于指令级粒度,同步译码器通过比较指令的特征和指令类型寄存器组记录的特征,判断该指令是否为敏感指令,并在检测到敏感指令时发出流水线控制信号,暂停流水线;对于基本块级粒度,同步译码器只需要通过能够刻画指令特征的机器码字段,判断该指令是否为跳转指令;对于函数级粒度,同步译码器需要判断指令是否为函数调用或返回指令;对于混合级粒度,其中包含粒度的指令分析策略,同步译码器都需要执行。
9.根据权利要求5所述的基于片上硬件的嵌入式程序完整性多粒度验证方法,其特征在于,所述步骤5中,最新读取到的参考标签始终处于元数据缓存的栈顶,已被执行完粒度的参考标签经退栈操作弹出;提取参考标签到元数据缓存的具体过程是:通过对敏感指令的地址或函数的入口地址做哈希表映射得到参考标签的索引,确定参考标签的存储信息在哈希表存储器中的地址,读取参考标签的存储信息,最终根据存储信息记录的参考标签在闪存的存储地址,通过闪存控制器读取存储在闪存的参考标签;将最新读取到的参考标签压入元数据缓存的栈顶。
10.根据权利要求5所述的基于片上硬件的嵌入式程序完整性多粒度验证方法,其特征在于,所述步骤6中,校验器使用随机数发生器生成的随机数序列采样轻量哈希计算器各通道输出的第一个部分哈希值,比较实际采样值和参考采样值的具体过程是:获取参考标签:如果是系统启动后首次获取参考标签,则直接提取从元数据缓存栈顶开始的第一个参考标签;否则,如果上一个被执行的粒度以分支指令结尾,根据是否跳转选取该粒度参考标签中的偏移值与元数据缓存栈指针相加;如果上一个被执行的粒度以非分支指令结尾,元数据缓存栈指针直接加上该粒度参考标签中的偏移值即可;
获取实际采样值:用 … 表示轻量哈希计算器各通道挤压出的第一个部分哈希值,从右往左,从0开始对各通道挤压出的第一个部分哈希值的拼接 的各个比特位标号,用[ ]表示生成的随机数序列,则依次将 第 个比特位的值写入校验器的采样值寄存器,0 ,并将采样位图的第i位置1,超出
标号范围的随机数跳过;
每完成对一个部分哈希值的采样,采样位图按位与参考采样值后再和采样值寄存器按位异或,如果结果中某些比特位为1,则判定程序完整性被破坏,提前结束采样。