1.一种基于多目标粒子群算法的程序控制流证明方法,其特征在于:Step1:对目标程序的函数进行分析,获取目标程序的各个函数调用次数和控制流事件总数,将其输入到多目标粒子群算法中,进行安全性和性能开销优化,得到最优函数插桩方案;Step2:根据最优函数插桩方案,对目标程序进行粗细粒度结合的插桩处理,然后分析目标程序,确定函数的输入范围,根据所确定的输入范围,在设备运行处理后的目标程序,得到所有的控制流数据,对控制流数据进行累积哈希运算,得到预期哈希值,将预期哈希值和输入范围以键值对的形式存储到服务器的数据库中;Step3:服务器向设备发起认证请求,设备收到认证请求后,根据认证请求中的程序输入运行处理后的目标程序,得到动态程序控制流数据,输入到可信执行环境中进行累积哈希运算,得到哈希值,并对哈希值和认证请求进行签名生成认证报告,最后将报告发送给服务器;Step4:服务器收到认证报告后,首先对报告进行验签,确定报告的提交者是合法的,然后检查报告中的认证请求是否合法的,最后将哈希值和认证请求中的输入的预期哈希值进行对比,得到认证结果,如果认证成功,说明设备上的目标程序并没有被攻击,反之,则说明目标程序受到了控制流劫持攻击;所述目标程序的各个函数调用次数和控制流事件总数均是多条运行路径的平均值,控制流事件是程序汇编代码中的跳转指令;所述多目标粒子群算法具体为:优化目标:max{safety(Y)} min{spending(Y)}约束条件:safety(Y)>Safety thresholdspending(Y)<Spending threshold控制变量:Y={y 1 ,y 2 ,y 3 ,...,y n }参数意义:Safety(Y)指在函数插桩方案Y下的安全性;spending(Y)指在函数插桩方案Y下的性能开销;Safety threshold 指函数插桩方案全是边缘函数时的安全性;Spending threshold 指函数插桩方案全是核心函数时的性能开销;所述的控制流数据是由多个跳转节点组成,每一个跳转节点都是唯一的,如果在运行过程中出现多次同样的跳转节点,插桩得到的控制流数据中仅会记录一次,后续再次出现只会在跳转节点数据中的跳转指令执行次数中进行记录,跳转节点的数据包括跳转指令的源地址、跳转目的地址和跳转指令执行的次数,其中跳转指令包括直接跳转指令、间接跳转指令、条件跳转指令、函数调用指令、函数返回指令。
2.根据权利要求1所述的基于多目标粒子群算法的程序控制流证明方法,其特征在于:哈希算法使用的是中国商用密码算法标准中的SM3密码杂凑算法,累积哈希运算的递推公式为其中,H表示一次哈希运算,N n 表示第n个跳转节点。
3.根据权利要求1所述的基于多目标粒子群算法的程序控制流证明方法,其特征在于:所述的认证请求中包括随机数,目标程序标识和目标程序的输入值。
4.根据权利要求1所述的基于多目标粒子群算法的程序控制流证明方法,其特征在于:签名算法使用的是中国商用密码算法标准中的SM2椭圆曲线公钥密码算法中的数字签名算法。