一种面向边信道安全防护的循环语句执行方法及装置制造方法及图纸

技术编号:29155867 阅读:13 留言:0更新日期:2021-07-06 22:54
本发明专利技术公开了一种面向边信道安全防护的循环语句执行方法及装置,本发明专利技术面向边信道安全防护的循环语句执行方法包括预先识别目标程序的源代码或目标代码中的循环体,为每一段循环体前插入一条基于可扩展指令集体系结构编码规范的扩展循环指令,得到使用扩展循环指令的目标程序;在执行使用扩展循环指令的目标程序时,若遇到扩展循环指令,则基于扩展循环指令确定性执行该扩展循环指令后的循环体。本发明专利技术能够抵御分支预测攻击,不仅保证了安全,还消除了由现有防御措施给循环带来的巨大性能损失,和循环展开相比也将代码量的增加控制在了每个循环仅一条,对现有程序修改量少。

【技术实现步骤摘要】
一种面向边信道安全防护的循环语句执行方法及装置
本专利技术属于处理器体系结构安全领域,具体涉及一种面向边信道安全防护的循环语句执行方法及装置。
技术介绍
分支预测技术是现代处理器用于提高程序执行效率的关键性技术,大大降低了由分支指令带来的流水线延迟,高准确度的分支预测可以给处理器带来极大的性能提升。但是近年来曝光出了幽灵(Spectre)系列的漏洞族,显示出典型现代处理器体系结构的设计存在严重的安全问题,对处理器用户产生了极大的安全威胁。幽灵漏洞族利用了对分支预测技术的误导训练,使得处理器推测执行攻击者精心构造的代码序列,非授权访问由各种处理器和操作系统安全机制保护的数据,进而利用高速缓存等侧信道泄露数据。防御这类攻击最根本的是从源头进行防护,也就是防止被恶意触发推测执行,攻击者就无法成功瞬态执行非授权访问的代码。现有在源头层面对幽灵漏洞进行防御的措施为防止对所有分支指令进行分支预测,在硬件层面主要方法是禁用分支预测,在软件层面主要方法是编译时在分支指令后插入fence指令。这类防御措施等效于在处理器执行到分支指令后暂停流水线,等到确定分支指令分支结果后再执行,这样处理器相当于未采用分支预测技术,导致程序执行效率大大下降,牺牲了由分支预测技术带来的巨大性能提升,代价很大。程序中包含很多的循环语句,这也是攻击者利用来构造“幽灵”攻击的必要条件,现有的措施通过完全禁用分支预测保证了处理器安全,但在执行分支指令尤其是循环中的分支指令时会带来巨大的开销。
技术实现思路
本专利技术要解决的技术问题:针对现有技术的上述问题,提供一种面向边信道安全防护的循环语句执行方法及装置,本专利技术能够抵御分支预测攻击,不仅保证了安全,还消除了由现有防御措施给循环带来的巨大性能损失,减少了执行分支指令尤其是循环中的分支指令的开销,和循环展开相比也将代码量的增加控制在了每个循环仅一条,对现有程序修改量少。为了解决上述技术问题,本专利技术采用的技术方案为:一种面向边信道安全防护的循环语句执行方法,包括:1)预先识别目标程序的源代码或目标代码中的循环体,为每一段循环体前插入一条基于可扩展指令集体系结构编码规范的扩展循环指令,得到使用扩展循环指令的目标程序;2)在执行使用扩展循环指令的目标程序时,若遇到扩展循环指令,则基于扩展循环指令确定性执行该扩展循环指令后的循环体。可选地,步骤1)中的扩展循环指令的编码信息包括该扩展循环指令后循环体的循环迭代次数和循环体内指令条数。可选地,所述扩展循环指令最大支持的循环体内指令条数为2a-1条,其中a为扩展循环指令中循环体内指令条数的位宽。可选地,步骤1)中预先识别目标程序的源代码或目标代码中的循环体是指:通过编译器针对目标程序的源代码识别其中各个循环体的循环迭代次数和循环体内指令条数,根据循环迭代次数和循环体内指令条数生成一条基于可扩展指令集体系结构编码规范的扩展循环指令并插入对应的各段循环体前,最终得到使用扩展循环指令的目标程序;或者,通过优化器针对目标程序的目标代码识别其中各个循环体的循环迭代次数和循环体内指令条数,根据循环迭代次数和循环体内指令条数生成一条基于可扩展指令集体系结构编码规范的扩展循环指令并插入对应的各段循环体前,最终得到使用扩展循环指令的目标程序。可选地,步骤2)中基于扩展循环指令确定性执行该扩展循环指令后的循环体时还包括基于指定的循环指令缓冲区LIB缓存扩展循环指令的步骤。可选地,步骤2)中基于扩展循环指令确定性执行该扩展循环指令后的循环体时还包括基于循环状态寄存器组来记录循环体执行状态的步骤,所述循环状态寄存器组包括:剩余迭代次数寄存器loop_counter,用于存放当前执行循环的剩余迭代次数;循环体内指令条数寄存器inst_counter,用于存放循环体的循环体内指令条数;已加载指令条数寄存器load_counter,用于存放已加载到循环指令缓冲区的指令条数;当前执行指令地址寄存器inst_pointer,用于存放当前执行循环指令的指令地址,当前执行循环指令的指令地址包括两个部分,一部分为循环体首条指令地址,另一部分为当前执行指令地址相对循环体首条指令地址的偏移量。可选地,步骤2)中执行使用扩展循环指令的目标程序的步骤包括:2.1)判断循环指令缓冲区的剩余迭代次数寄存器loop_counter是否为0,若为0则判定上一个循环已经运行完毕或未执行过循环,跳转执行下一步;跳转执行步骤2.5);2.2)从指令缓存I-Cache中抓取指令I;2.3)判断抓取的指令I是否为扩展循环指令,若为扩展循环指令,则首先译码识别出扩展循环指令的循环迭代次数k和循环体内指令条数n,然后执行循环状态寄存器组的初始化:初始化设置剩余迭代次数寄存器loop_counter为扩展循环指令的循环迭代次数k,循环体内指令条数寄存器inst_counter为扩展循环指令的循环体内指令条数n,已加载指令条数寄存器load_counter为0、当前执行指令地址寄存器inst_pointer为0;2.4)更新程序计数器PC的值为下一条指令的地址,跳转执行步骤2.1);2.5)判断循环指令缓冲区的已加载指令条数寄存器load_counter小于循环体内指令条数寄存器inst_counter是否成立,若成立则判定当前处于循环体的第一轮迭代的执行过程中、且循环体的指令尚未加载完毕,继续从指令缓存I-Cache中抓取指令I;若不成立,则判定当前处于循环体的第二轮迭代或后续轮迭代的执行过程中,跳转执行步骤2.7);2.6)抓取的指令I进入流水线,并将抓取的指令I写入循环指令缓冲区LIB的第load_counter个缓冲区槽位,并将已加载指令条数寄存器load_counter的值加1,跳转执行步骤2.4);2.7)从循环指令缓冲区LIB中抓取指令I[inst_pointer],其中inst_pointer为当前执行指令地址寄存器inst_pointer的偏移量;2.8)抓取的指令I[inst_pointer]进入流水线,并更新当前执行指令地址寄存器inst_pointer的值为:(inst_pointer+1)%inst_counter,其中inst_pointer为当前执行指令地址寄存器inst_pointer的偏移量,inst_counter为循环体内指令条数寄存器inst_counter的值;2.9)判断循环体内指令条数寄存器inst_counter的值为0是否成立,若成立,在将剩余迭代次数寄存器loop_counter的值减1;跳转执行步骤2.1)。此外,本专利技术还提供一种面向边信道安全防护的循环语句执行装置,包括:指令缓存I-Cache,用于缓存普通指令;循环指令缓冲区LIB,用于缓存循环体的指令;循环状态寄存器组,用于记录循环体的指令执行状态,包括剩余迭代次数寄存器loop_counter,用于存放当前执行循环的剩余迭代次数;循环体内指令条数寄存器inst_coun本文档来自技高网...

【技术保护点】
1.一种面向边信道安全防护的循环语句执行方法,其特征在于,包括:/n1)预先识别目标程序的源代码或目标代码中的循环体,为每一段循环体前插入一条基于可扩展指令集体系结构编码规范的扩展循环指令,得到使用扩展循环指令的目标程序;/n2)在执行使用扩展循环指令的目标程序时,若遇到扩展循环指令,则基于扩展循环指令确定性执行该扩展循环指令后的循环体。/n

【技术特征摘要】
1.一种面向边信道安全防护的循环语句执行方法,其特征在于,包括:
1)预先识别目标程序的源代码或目标代码中的循环体,为每一段循环体前插入一条基于可扩展指令集体系结构编码规范的扩展循环指令,得到使用扩展循环指令的目标程序;
2)在执行使用扩展循环指令的目标程序时,若遇到扩展循环指令,则基于扩展循环指令确定性执行该扩展循环指令后的循环体。


2.根据权利要求1所述的面向边信道安全防护的循环语句执行方法,其特征在于,步骤1)中的扩展循环指令的编码信息包括该扩展循环指令后循环体的循环迭代次数和循环体内指令条数。


3.根据权利要求1所述的面向边信道安全防护的循环语句执行方法,其特征在于,所述扩展循环指令最大支持的循环体内指令条数为2a-1条,其中a为扩展循环指令中循环体内指令条数的位宽。


4.根据权利要求2所述的面向边信道安全防护的循环语句执行方法,其特征在于,步骤1)中预先识别目标程序的源代码或目标代码中的循环体是指:通过编译器针对目标程序的源代码识别其中各个循环体的循环迭代次数和循环体内指令条数,根据循环迭代次数和循环体内指令条数生成一条基于可扩展指令集体系结构编码规范的扩展循环指令并插入对应的各段循环体前,最终得到使用扩展循环指令的目标程序;或者,通过优化器针对目标程序的目标代码识别其中各个循环体的循环迭代次数和循环体内指令条数,根据循环迭代次数和循环体内指令条数生成一条基于可扩展指令集体系结构编码规范的扩展循环指令并插入对应的各段循环体前,最终得到使用扩展循环指令的目标程序。


5.根据权利要求2所述的面向边信道安全防护的循环语句执行方法,其特征在于,步骤2)中基于扩展循环指令确定性执行该扩展循环指令后的循环体时还包括基于指定的循环指令缓冲区LIB缓存扩展循环指令的步骤。


6.根据权利要求5所述的面向边信道安全防护的循环语句执行方法,其特征在于,步骤2)中基于扩展循环指令确定性执行该扩展循环指令后的循环体时还包括基于循环状态寄存器组来记录循环体执行状态的步骤,所述循环状态寄存器组包括:剩余迭代次数寄存器loop_counter,用于存放当前执行循环的剩余迭代次数;循环体内指令条数寄存器inst_counter,用于存放循环体的循环体内指令条数;已加载指令条数寄存器load_counter,用于存放已加载到循环指令缓冲区的指令条数;当前执行指令地址寄存器inst_pointer,用于存放当前执行循环指令的指令地址,当前执行循环指令的指令地址包括两个部分,一部分为循环体首条指令地址,另一部分为当前执行指令地址相对循环体首条指令地址的偏移量。


7.根据权利要求6所述的面向边信道安全防护的循环语句执行方法,其特征在于,步骤2)中执行使用扩展循环指令的目标程序的步骤包括:
2.1)判断循环指令缓冲区的剩余迭代次数寄存器loop_counter是否为0,若为0则判定上一个循环已经运行完毕或未执行过循环,跳转执行下一步;跳转执行步骤2.5);
2.2)从指令缓存I-Cache中抓取指令I;
2.3)判断抓取的指令I是否为扩展循环指令,若为扩展循环指令,则首先译码识别出扩展循环指令的循环迭代次数k和循环体内指令条数n,然后执行循环状态寄存器组的初始化:初始化设置剩余迭代次数寄存器loop_counter为扩展循环指令的循环迭代次数k,循环体内指令条数寄存器inst_counter为扩展循环指令的循环体内指令条数n,已加载指令条数寄存器load_counter为0、当前执行指令地址寄存器inst_pointer为0;
2.4)更新程序计数器PC的值为下一条指...

【专利技术属性】
技术研发人员:黄立波童敢郭辉郑重邓全倪晓强郭维雷国庆王俊辉隋兵才孙彩霞王永文
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:湖南;43

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

1