首页> 中国专利> 基于冲突检测的执行端口时间信道安全防护系统及方法

基于冲突检测的执行端口时间信道安全防护系统及方法

摘要

本发明提供了一种基于冲突检测的执行端口时间信道安全防护系统,包括端口冲突矩阵和策略修改器;调度器在对就绪的微操作进行调度时,识别端口冲突并将其记录于端口冲突矩阵,根据记录判断出双线程导致的端口冲突并相应发送端口冲突向量;策略修改器输出策略类型、优先级向量和策略使能信号;分配模块在接收到端口分割策略和策略端口使能向量时,改为端口分割算法;调度器在接收到端口分时策略、策略端口使能向量、优先级向量时,改为基于优先级向量的算法。本发明还提供相应的安全防护方法。本发明的系统及方法有效防护SMT环境下通过持续使用执行端口冲突指令进而构建时间信道的攻击。

著录项

  • 公开/公告号CN113810171A

    专利类型发明专利

  • 公开/公告日2021-12-17

    原文格式PDF

  • 申请/专利权人 中国科学院上海高等研究院;

    申请/专利号CN202111088243.1

  • 发明设计人 岳晓萌;杨秋松;李明树;

    申请日2021-09-16

  • 分类号H04L9/00(20060101);H04L29/06(20060101);G06F21/57(20130101);

  • 代理机构31002 上海智信专利代理有限公司;

  • 代理人杨怡清

  • 地址 201210 上海市浦东新区张江高科技园区海科路99号

  • 入库时间 2023-06-19 13:43:30

说明书

技术领域

本发明属于系统安全技术领域,涉及一种基于冲突检测的执行端口时间信道安全防护系统及方法。

背景技术

在超标量处理器微架构设计中,指令集架构中描述的宏指令会经过取指、译码的流程形成对应的微操作。微操作在进行指令执行前,会通过指令解析完成对应执行端口的绑定。在关闭同时多线程(Simultaneous Multi-Threading,SMT)技术的情况下,处理器流水线内部只有一个线程,利用分配模块完成端口绑定的微操作会通过对应的端口进入执行单元;在开启SMT技术的情况下,处理器解码系统和乱序执行系统交互过程中,因为在重命名和分配模块的微架构设计中约束了同一时刻只能处理来自于同一个线程的微操作,因此,同一时刻也只有一个线程的微操作可以进入调度器。在调度器的微架构设计中为了更快地调度和分发微操作,其并不关心微操作的线程信息,只考虑其是否就绪(“就绪”指的是某条微操作已满足被选择并发射到执行端口的条件),如果有同时就绪的微操作则年龄更老的优先发射,因此,调度器可以同时在不同执行端口发射两个线程的微操作。

如果两个线程在调度器内的微操作指向同一个端口,那么由于分配时的先后关系,两个线程的微操作会自然携带不同的年龄信息。调度器中有两个关键数据结构,一个是依赖矩阵(即就绪矩阵),另一个是年龄矩阵,就绪矩阵和年龄矩阵用于维护调度器中的各项微操作的状态和关系。其中,就绪矩阵用于判断微操作是否就绪从而得到就绪的微操作所组成的就绪向量,虽然两个线程的微操作即使都处于就绪状态,依赖于年龄矩阵的先后关系,调度器的调度器选择模块会先选择发射年龄更“老”的线程的微操作进入相应端口,那么已经就绪但由于较“年轻”导致无法发射到相同端口的另外线程的微操作就产生了延迟,此时就叫做出现了线程间的端口冲突。

如图1所示,SMT环境下的多端口调度微架构主要包括分配模块(AllocationModule)10、以及位于调度器20内部的依赖矩阵(Scheduler Dependency Matrix)21、年龄矩阵(Scheduler Age Matrix)22和调度器选择模块(Scheduler Selection Module)23。

分配模块10主要负责对重命名之后的微操作进行乱序执行资源的分配,主要包括执行端口的分配、重排序队列分配、调度器分配、内存排序缓冲分配等功能;调度器的依赖矩阵21主要负责解决调度器内的各个数据项对应的微操作及正在执行中微操作的依赖状态观察和传递,依赖解决后的微操作则被认为是就绪的,就绪的微操作组成了就绪向量;调度器的年龄矩阵22主要负责对调度器20内的各数据项对应的微操作进行年龄状态的统计和排序,保证年龄老的微操作会优先被选择;调度器选择模块23主要负责对具有年龄信息和就绪信息的待选择微操作进行端口30和执行单元40的选择,进而可以将其发射出去。

目前针对执行端口时间信道的防护研究主要通过在时间信道传递阶段增加噪声或者直接关闭SMT技术的方式。前者通过将噪声添加到与进程相关的所有时间信息中,达到降低时序信道带宽的目的进行防护,可以通过修改RDTSC或RDTSCP指令,将噪声加入到指令执行的返回值中,就可以达到降低攻击者获取时间信息精度的目的,但这种方式也会直接影响相应被修改指令的功能准确性,影响正常程序的使用;而后者比较简单的方式是通过软件或硬件的方式禁用SMT来防范此类问题,其可以彻底解决执行端口双线程共享产生的时间侧信道问题,但这种方式失去了SMT技术本身带来的收益,会导致产生相应的性能损失,其他的防护手段均是从关闭或动态关闭SMT技术来解决此问题,没有通过微架构的方式来防护执行端口时间信道问题的方法。

发明内容

本发明的目的在于提供一种基于冲突检测的执行端口时间信道安全防护系统及方法,用于有效防护SMT环境下通过持续使用执行端口冲突指令进而构建时间信道的攻击。

为了实现上述目的,本发明提供了一种基于冲突检测的执行端口时间信道安全防护系统,其基于SMT环境下的多端口调度微架构,所述多端口调度微架构包括分配模块、调度器、以及乱序执行资源;所述分配模块设置为执行端口绑定算法以将每个与指令对应的微操作与乱序执行资源中的其中一个端口绑定;所述调度器的调度器选择模块设置为执行调度选择算法,以为每个端口选择就绪的微操作,进而将所述微操作发射至端口;所述执行端口时间信道安全防护系统包括在调度器的内部的端口冲突矩阵和策略修改器;所述调度器还设置为在对就绪的微操作进行调度时,识别端口冲突的发生和解除并将其记录于端口冲突矩阵,随后根据端口冲突矩阵的记录,判断出双线程所导致的端口冲突并相应发送对应的端口的端口冲突向量;所述策略修改器设置为输出策略类型、优先级向量和策略使能信号;所述策略类型包括端口分割策略和端口分时策略;所述策略使能信号策略使能信号根据是否收到对应端口的端口冲突向量来生成;所述策略类型包括端口分割策略和端口分时策略;所述分配模块设置为在接收到策略修改器发送的端口分割策略的策略类型和策略端口使能向量时,在端口绑定算法的基础上将多端口执行的微操作所采用的公平性算法改为端口分割算法;所述调度器设置为在接收到端口分时策略的策略类型、策略端口使能向量以及优先级向量时,将原始的选择算法改变为基于优先级向量进行优先级选择的算法。

优选地,所述端口冲突矩阵由一个对应于两个彼此独立的线程的二维数组组成,所述二维数组的每一行是对应于其中一个端口的两位的饱和计数器,所述饱和计数器的每一个位元表示单个端口的其中一个线程。

优选地,所述饱和计数器的初始值为0;当某线程因为其绑定的端口同另一个线程相同并且导致该线程的微操作的延迟发射时,所述端口冲突矩阵中对应于该端口的饱和计数器中对应于所述线程的位元的计数值加1;当某端口在连续两次收到同一个线程发射的微操作且均没有发生端口冲突时,端口冲突矩阵中对应于该端口的这一行的饱和计数器中对应于所述线程的位元的计数值减1。

优选地,当端口冲突矩阵中存在饱和计数器的2个位元的值均为1时,则判断出所述饱和计数器所对应的端口存在双线程所导致的端口冲突,相应发送对应的端口的端口冲突向量。

优选地,所述对应的端口的端口冲突向量为对应的端口的索引值的独热码形式。

优选地,多端口执行的微操作所默认采用的公平性算法采用基于Round-Robin原则的循环选择算法;所述端口分割算法是指多个端口资源平分给两个线程使用。

所述优先级向量是在对应于某个端口的饱和计数器的位元值均为0之后,在首次判定出该端口的端口冲突的发生后同步生成的;在首次判定出端口冲突的发生后,饱和计数器的计数值为1的位元所对应的线程的优先级高于另一个线程的优先级。

优选地,原始的选择算法默认采用Ping-Pong原则;在基于优先级向量进行优先级选择的算法中,优先基于优先级进行高优先级选择,在优先级相同的情况下再按照年龄矩阵的选择算法进行选择,所述年龄矩阵位于所述调度器中。

优选地,所述策略修改器还设置为接收来自于提交单元的刷新信号,在提交单元刷新时,策略修改器重置,将分配模块和调度器的算法恢复为原始的公平性算法和选择算法。

另一方面,本发明提供一种基于冲突检测的执行端口时间信道安全防护方法,其基于冲突检测的执行端口时间信道安全防护系统,其在执行SMT环境下的多端口调度微架构时执行,包括:

步骤S1:端口冲突识别;

所述步骤S1包括:

步骤S11:在调度器在对就绪的微操作进行调度时,识别端口冲突的发生和解除并将其记录于端口冲突矩阵,随后根据端口冲突矩阵的记录判断出双线程所导致的端口冲突并相应发送对应的端口的端口冲突向量;

步骤S12:利用策略修改器向分配模块和调度器输出对应于该端口的策略类型、策略使能信号以及优先级向量;所述策略类型包括端口分割策略和端口分时策略;所述策略使能信号策略使能信号根据是否收到对应端口的端口冲突向量来生成;

步骤S2:在分配模块接收到端口分割策略的策略类型和策略使能信号时,在端口绑定算法的基础上将多端口执行的微操作所采用的公平性算法改为端口分割算法;

步骤S3:在调度器在接收到端口分时策略的策略类型、策略端口使能向量以及优先级向量时,会将原始的选择算法改变为基于优先级向量进行优先级选择的算法。

本发明的基于冲突检测的执行端口时间信道安全防护系统包含2个子模块,分别是端口冲突矩阵及策略修改器。在整个防护设计中,通过对端口冲突的连续检测形成端口冲突向量;然后通过策略修改器进行分配单元及调度器选择算法的算法策略修改,消除由于执行端口冲突产生的时间信道,进而防护SMT环境下利用双线程共享执行端口进行的时间信道攻击。

本发明的基于冲突检测的执行端口时间信道安全防护方法,首次针对SMT环境下执行端口时间信道攻击给出防护方法设计及微架构组件的实现。基于冲突检测将SMT技术对数据结构分割和分时处理的方式应用到SMT环境下执行端口时间信道安全防护中,通过对数据结构共享策略和算法的改进来达到防护效果,可以在SMT技术合理利用共享数据结构的同时达到安全防护的目的,对利用连续端口冲突指令持续产生执行端口时间信道的攻击方式有很好的防护效果。

附图说明

图1是现有技术中的多端口调度微架构的结构示意图。

图2是本发明的基于冲突检测的执行端口时间信道安全防护系统的微架构原理图。

图3A和图3B是标准的多端口调度算法及增加防护设计的算法的对比图,其中图3A示出了标准的多端口调度算法,图3B示出了标准的多端口调度算法与本发明的基于冲突检测的执行端口时间信道安全防护方法的结合。

具体实施方式

下面结合附图,给出本发明的一个实施例,对本发明的方案做进一步详细的解释和说明。

图2是本发明的基于冲突检测的执行端口时间信道安全防护系统的微架构原理图。如图2所示,本发明的基于冲突检测的执行端口时间信道安全防护系统基于现有的处理器的多端口调度微架构并且增加了防护设计。如图1所示,现有处理器的SMT环境下的多端口调度微架构包括分配模块10、调度器20、设于调度器20内部的依赖矩阵21、年龄矩阵22和调度器选择模块23、以及乱序执行资源。乱序执行资源包括与调度器20依次相连的端口30(即执行端口)、执行单元40、提交单元60以及与提交单元60连接的存储单元50等结构。

其中,分配模块10设置为执行端口绑定算法,主要负责对由指令译码得到的微操作进行乱序执行资源的分配,主要包括执行端口的分配、重排序队列分配、调度器分配、内存排序缓冲分配等功能,以将每个微操作与乱序执行资源中的其中一个端口30绑定(即微操作发射至哪一个端口30)。微操作由指令译码得到,且其需要在乱序执行资源中进行运算或处理。调度器的依赖矩阵21主要负责解决调度器内的各个数据项对应的微操作及正在执行中微操作的依赖状态观察和传递,依赖解决后的微操作则被认为是就绪的,就绪的微操作组成了就绪向量;调度器的年龄矩阵22主要负责对调度器20内的各数据项对应的微操作进行年龄状态的统计和排序,保证年龄老的微操作会优先被选择;调度器选择模块23设置为执行调度选择算法,以对具有的就绪信息(来自于依赖矩阵21)和年龄信息(来自于年龄矩阵22)的就绪的微操作进行选择,进而将选择将哪一个就绪的微操作发射至端口30和执行单元40(即优先发射哪一个微操作至端口30)。

本发明的基于冲突检测的执行端口时间信道安全防护系统通过在现有的多端口调度微架构的基础上,通过在调度器20内新增端口冲突矩阵24和策略修改器25这两个调度器子模块并且利用策略修改器25对分配模块10和调度器20进行修改,从而实现执行端口时间信道安全防护。

(一)端口冲突矩阵24

端口冲突矩阵24设置为记录端口冲突的发生和解除。相应地,调度器20设置为在对就绪的微操作进行调度时,识别端口冲突的发生和解除并将其记录于端口冲突矩阵24,随后根据端口冲突矩阵24的记录判断出SMT技术的双线程所导致的端口冲突,并在判断出双线程所导致的端口冲突时发送对应端口的端口冲突向量。其中,调度器20根据每个端口所绑定的两个线程的微操作的状态和通过调度器选择模块23的选择结果来识别端口冲突的发生和解除。

端口冲突矩阵24由一个对应于两个彼此独立的线程的二维数组组成,二维数组内部的每一行代表其中一个端口30,两列则分别表示两位的饱和计数器的两个位元,同一行的两列可以当作一个饱和计数器的整体看待,且两位的饱和计数器的每一位对应于其中一个线程。例如,如存在6个端口,分别是P0到P5,每一个端口都对应于一个两位(2bit)的饱和计数器(即通用的bimodel计数器),所述饱和计数器的每一个位元(即端口冲突矩阵的一列)表示单个端口的其中一个线程。该饱和计数器的初始值为0。当某线程因为其绑定的端口同另一个线程相同并且导致该线程的微操作的延迟发射时(即某个线程的微操作就绪了但由于其微操作的年龄先后的原因,调度器选择模块23选择了另外的线程的微操作来发射),端口冲突矩阵24中对应于该端口的这一行的饱和计数器中对应于该线程的这一个位元的计数值加1,以记录端口冲突的发生;当某端口在连续两次收到同一个线程发射的微操作且均没有发生端口冲突时,则端口冲突矩阵24中对应于该端口的这一行的饱和计数器中对应于所述线程的位元的计数值减1,以记录端口冲突的解除,由于线程平衡性的原因,对应于该端口的这一行的饱和计数器的两个位元的计数值最终会交替减1。这是硬件设计的一般性做法,2bit的饱和计数器比1bit的饱和计数器非0即1有明显的优势,就是倾向性更加明确,从而规避偶发现象。

因为SMT技术的公平性设计,在端口30上出现的端口冲突会导致端口30所绑定的2个线程交替出现延迟发射的情况(即第一次冲突会导致某个端口所绑定第1个线程出现延迟发射,第二次冲突就会导致同一个端口所绑定第2个线程中出现延迟发射)。

因此,当某个端口所对应的饱和计数器的2个位元(对应于2个线程)的值全为1时,则判断出该端口30存在双线程所导致的端口冲突,发送对应的端口30的端口冲突向量。在一个端口发生冲突时,对应的端口30的索引值(即具体是第几个端口)会以独热码的形式作为端口冲突向量发送给到策略修改器25。冲突向量的长度等于端口30的数量。也就是说,在本实施例中,端口30的数量6个时,冲突向量的长度也是6位。在其他实施例中,冲突向量可以用其他形式替代。

其中,调度器20利用端口冲突延迟发射判定算法(算法1)来判定出端口冲突的发生并将其记录于端口冲突矩阵24,并且利用端口冲突取消算法(算法2)来判定出端口冲突的解除并将其记录于端口冲突矩阵24。

算法1:端口冲突延迟发射判定算法

端口冲突延迟发射判定算法由调度器20来执行,用于判定出端口冲突的发生(即某线程由于其绑定的端口同另一个线程相同而导致其微操作延迟发射的情况),根据判定结果来修改端口冲突矩阵24的值。

端口冲突延迟发射判定算法,其具体步骤如下:

步骤A1:判断对于每个端口,是否存在两个线程的就绪的微操作与同一个端口30绑定;

步骤A2:1)当存在两个线程的就绪的微操作与同一个端口30绑定时,如果选择发射与其中一个线程绑定的就绪的微操作至所述端口30,则将端口冲突矩阵24中对应于所述端口30的饱和计数器中对应于另外一个线程的单个位元的计数值加1(即,将另外一个线程的冲突标志设置为1);

也就是或,当两个线程的就绪的微操作与相同的端口30绑定时,如果选择了线程0的就绪操作,则线程1的冲突标志设置为1,反之,如果选择了线程1的就绪操作,则线程0的冲突标志设置为1;

2)否则,说明当两个线程的就绪的微操作与不同的端口30绑定,不对端口冲突矩阵24进行任何操作,两个线程选择各自原本对应的端口30进行发射。由此,随后可以继续执行端口冲突取消算法(算法2)来来进一步判断是否需要减少冲突标志的值。

下面示例性地给出端口冲突延迟发射判定算法所对应的伪代码。

输入参数包括:分配分支指令地址A

输出参数包括:冲突饱和计数器Conf

ConflictCounterSet(T

在时钟周期C执行:

算法2:端口冲突取消算法

端口冲突取消算法由调度器20来执行,用于判定出端口冲突的解除(某端口连续两次收到发射的微操作且均没有发生端口冲突的情况),根据判定结果来修改端口冲突矩阵24的值。

端口冲突取消算法,其具体步骤如下:

步骤B1:对于每个端口,在当前时钟周期内判断所述端口所绑定的两个线程是否存在同时就绪该端口30的微操作,并在判断结果为不存在时确定选中的微操作所在的单个线程为预选线程;否则,确定预选线程不存在;

其中,在执行步骤B1之前,初始化每个端口30的两个线程的冲突释放标志均为0。在所述步骤B1中,对于某个端口30,如果两个线程没有同时就绪该端口30的微操作,说明只有其中一个线程有就绪该端口的微操作可供发射,则将选中的就绪的微操作所在的单个线程的冲突释放标志设置为1,从而将其确定为预选线程;否则,说明两个线程存在同时就绪该端口30的微操作,则将两个线程的冲突释放标志均设置为0,说明预选线程不存在;

也就是说,如果线程0和线程1没有同时就绪该端口30的微操作,且选中了线程0,则线程0的冲突释放标志设置为1,同样,线程0和线程1没有同时就绪该端口的微操作且选中了线程1,则线程1的冲突释放标志设置为1,反之,对于某端口,如果线程0和线程1同时就绪该端口的微操作,则线程0和线程1的冲突释放标志均设置为0;

步骤B2:在下一时钟周期内判断所述端口所绑定的两个线程是否存在同时就绪该端口30的微操作,在判断结果为不存在时确定二次选中的微操作所在的单个线程,随后将其与所述预选线程比较以确定是否相同,若相同则将预选线程所对应的饱和计数器的位元设置为0;否则,所述端口所对应的饱和计数器的数值均保持不变;

其中,对于所述端口30,如果两个线程没有同时就绪该端口30的微操作,且二次选中的就绪的微操作所在的单个线程的冲突释放标志设置已经是1(即二次选中的就绪的微操作所在的单个线程与预选线程为同一个线程),则将预选线程所对应的饱和计数器的位元设置为0,否则,所述端口所对应的饱和计数器的数值均保持不变。

也就是说,如果线程0和线程1没有同时就绪该端口的微操作且选中了线程0且当前线程0的冲突释放标志为1,则设置线程0所对应的饱和计数器的位元为0,同样,如果对于某端口,线程0和线程1没有同时就绪该端口的微操作且选中了线程1且当前线程1的冲突释放标志为1,则设置线程1所对应的饱和计数器标志为0,反之,对于某端口,如果线程0和线程1同时就绪该端口的微操作,则饱和计数器不变。

下面示例性地给出端口冲突取消算法所对应的伪代码。

输入参数包括:就绪线程端口T

中间变量包括:冲突释放标志Flag

输出参数包括:冲突饱和计数器Conf

ConflictCounterReset(T

时钟周期C执行:

时钟周期C+1执行:

(二)策略修改器25

策略修改器25设置为输出合适的策略类型、优先级向量和策略使能信号,以生成对SMT技术的多端口调度算法的防护逻辑并在之后完成新防护算法的应用。策略修改器25生成的策略类型有两种,包括端口分割策略和端口分时策略。其中,端口分割策略具体是用于分配模块10所执行的端口绑定算法的策略调整,用于进行大于1个的端口30的资源的绑定;端口分时策略用于调度器20所执行的调度选择算法的策略调整。为了保证两个线程之间的公平性,当某执行的微操作拥有多个端口资源可以用于端口分配时(即分配模块10执行时),多端口执行的微操作所默认采用的公平性算法采用基于Round-Robin原则的循环选择算法;当某执行行为只有一个端口资源可以用于调度器选择时(即调度器20执行时),原始的选择算法默认采用Ping-Pong原则。

策略修改器25设置为向分配模块10和调度器20输出对应于该端口的策略类型(包括端口分割策略和端口分时策略)、策略使能信号、以及优先级向量。

其中,策略使能信号根据是否收到对应端口的端口冲突向量来生成。具体来说,在没有收到对应端口的端口冲突向量时,发送对应于该端口的低电平的策略使能信号,即策略使能信号为0;在收到对应端口的端口冲突向量时,发送高电平的策略使能信号,即策略使能信号为1。

策略类型属于端口分割策略还是端口分时策略还是这两者的结合,取决于采用所述策略类型的微操作的类型能够分配在哪些端口上执行。

例如:1)适用于端口分割策略的情况:如果某个类型的微操作能够在2个端口执行,则两个线程物理上分开使用,即采用端口分割策略,每个线程中的该类型的微操作与一个端口绑定。

2)适用于端口分时策略的情况:如果某个类型的微操作只能够在1个端口执行,则两个线程时间上分开使用,即两个线程中的该类型的微操作采用端口分时策略在同一端口上执行。

3)同时适用于端口分割策略和端口分时策略的情况:如果某个类型的微操作能够在3个端口执行,则3个端口中,两个线程物理上先采用端口分割策略以使得每个线程的一部分微操作分别与其中一个端口绑定,剩下的一个端口采用端口分时策略。

其余情况依次类推。也就是说,如果某个类型的微操作只能够在1个端口上执行,则微操作所对应的策略类型为端口分时策略;某个类型的微操作能够在偶数个端口执行,则微操作所对应的策略类型为端口分割策略;某个类型的微操作能够在大于1个的奇数个端口上执行,则策略类型为微操作所对应的端口分时策略和端口分割策略。

优先级向量是在对应于某个端口的饱和计数器的位元值均为0之后,首次判定出该端口的端口冲突的发生后同步生成的。首次判定出端口冲突的发生后,饱和计数器的计数值为1的位元所对应的线程的优先级高于另一个线程的优先级。

在首次判定出端口冲突的发生后,示例性的代码如下:

if Conf

then prior

else if Conf

then prior

else prior

由此,策略类型、策略使能信号、优先级向量伴随微操作的操作码会同时提供给分配模块10和调度器20的选择逻辑21,操作码用于识别分配模块10的分支指令对应的微操作。

此外,策略修改器25还设置为接收来自于提交单元60的刷新信号,当出现中断、事件、异常等单线程事件或SMT下线程唤醒、线程睡眠、线程切换等双线程事件时(即在提交单元60刷新时),策略修改器25重置,将分配模块10和调度器20的算法恢复为原始的双线程共享多端口调度算法(即原始的公平性算法和选择算法)。

(三)策略修改器25对分配模块10的修改

分配模块10设置为在接收到策略修改器25发送的端口分割策略的策略类型和策略使能信号时,在现有的端口绑定算法的基础上将多端口执行的微操作所采用的循环选择算法或其他公平性算法改为端口分割算法。所述端口分割算法是指多个端口资源平分给两个线程使用。例如,add、mov reg等等都是需要多端口执行的微操作。由此可以实现指定的端口的分割。

在本实施例中,以Intel Skylake微架构的多端口的执行单元INT ALU以及单端口的执行单元INT MUL为例。假设端口30包括第零端口p0、第一端口p1、第二端口p2、第三端口p3、第四端口p4、第五端口p5和第六端口p6,且某个微操作类型所能够分配的端口为第零端口p0、第一端口p1、第五端口p5或第六端口p6,则端口分割算法的具体步骤如下:

步骤S21:当微架构(如Intel Skylake微架构)利用分配模块10将两个线程的微操作与第零端口p0、第一端口p1、第五端口p5或第六端口p6绑定时,如果两个线程所分配的端口目标相同且该端口目标为第零端口p0、第一端口p1、第五端口p5或第六端口p6时,则选择其中一个线程的微操作绑定第零端口p0或第一端口p1,选择其中另一个线程的微操作绑定第五端口p5或第六端口p6;

步骤S22:当前两个线程所分配的端口目标不相同时,则不对所分配的端口进行任何改动,即两个线程各自将其分配的端口目标绑定。

下面示例性地给出相应的伪代码。

输入参数包括:就绪线程端口T

输出参数包括:选择线程S

AllocationResourceModify(T

generate for(i∈{0,1,5,6});

if(T

S

S

else

S

S

end if

end for

需要说明的是,本发明方法是通用方法,这里只是以Intel Skylake微架构为例。

(四)策略修改器25对调度器20的修改

调度器20设置为在接收到端口分时策略的策略类型、策略使能信号以及优先级向量时,将原始的选择算法(如按照年龄矩阵的选择算法)改变为基于优先级向量进行优先级选择的算法。

在基于优先级向量进行优先级选择的算法中,优先基于优先级对微操作进行高优先级选择,在优先级相同的情况下再按照年龄矩阵的选择算法对微操作进行选择。由此,即使高优先级线程微操作在年龄矩阵中记录的年龄比另外的线程年轻,其也会被优先选择。

基于优先级向量进行优先级选择的算法具体包括以下步骤:

步骤S31:当微架构(如Intel Skylake微架构)利用调度器20分配每个端口30各自即将执行的微操作时,如果存在两个线程分配的端口目标相同,则比较其优先级,优先级高的分配对应端口30;

步骤S32:当前两个线程分配的端口目标不相同,两个线程各自分配其端口30。

下面示例性地给出相应的伪代码。

输入参数包括:就绪线程端口T

输出参数包括:选择线程S

SelectionResourceModify(T

if(T

S

else if(T

S

else

S

S

end if

如图3A-图3B所示,基于上文所述的基于冲突检测的执行端口时间信道安全防护系统,所实现的基于冲突检测的执行端口时间信道安全防护方法,其在执行SMT环境下的多端口调度微架构时执行,包括如下步骤:

步骤S1:端口冲突识别。

所述步骤S1包括:

步骤S11:在调度器20在对就绪的微操作进行调度时,识别端口冲突的发生和解除并将其记录于端口冲突矩阵24,随后根据端口冲突矩阵24的记录判断出SMT技术的双线程所导致的端口冲突,并在判断出双线程所导致的端口冲突时发送对应端口30的端口冲突向量。

其中,调度器20通过依次执行端口冲突延迟发射判定算法(算法1)和端口冲突取消算法(算法2),来判定出端口冲突的发生和解除并将其记录于端口冲突矩阵24。

步骤S12:利用策略修改器25向分配模块10和调度器20输出对应于该端口30的策略类型、策略使能信号以及优先级向量;

策略修改器25生成的策略类型有两种,包括端口分割策略和端口分时策略。所述策略使能信号策略使能信号根据是否收到对应端口30的端口冲突向量来生成。

步骤S2:端口绑定算法调整。即,在分配模块10接收到端口分割策略的策略类型和策略使能信号时,在端口绑定算法的基础上将多端口执行的微操作所采用的循环选择算法或其他公平性算法改为端口分割算法。

步骤S3:调度选择算法调整。即,在调度器20在接收到端口分时策略的策略类型、策略使能信号以及优先级向量时,会将原始的选择算法(例如按照年龄矩阵的选择算法)改变为基于优先级向量进行优先级选择的算法。在基于优先级向量进行优先级选择的算法中,优先基于优先级进行高优先级选择,在优先级相同的情况下再按照年龄矩阵的选择算法进行选择。由此,即使高优先级线程微操作在年龄矩阵中记录的年龄比另外的线程年轻,其也会被优先选择。

如图3A所示,执行SMT环境下的多端口调度微架构包括:

步骤S1’:使用轮询算法读取两个线程的微操作;

步骤S2’:利用分配模块10将与指令对应的微操作与端口30进行绑定;其中,所述步骤S2在所述步骤S2’的同时执行,用于对所述步骤S2’进行改进。

步骤S3’:利用调度器选择模块20的选择逻辑21中的依赖矩阵来生成与每个端口30绑定的就绪的微操作;与端口30绑定的多个就绪的微操作组成了就绪向量;

步骤S4’:在与每个端口30绑定的多个就绪的微操作中,利用调度器选择模块20的选择逻辑21中的年龄矩阵选择每个端口30各自即将执行的微操作;所选择的每个端口30即将执行的微操作组成了选择向量。其中,所述步骤S3在执行所述步骤S4’的同时执行,用于对所述步骤S4’进行改进。

此外,所述步骤S1根据所述步骤步骤S4’的调度结果来进行,来判断是否存在双线程的端口冲突。

对本发明的实验验证:

我们使用Gem5模拟一个高性能多执行端口的超标量处理器作为本防护方法的防护有效性、性能开销的评估平台,其配置参数如表1。对标的防护方式是目前针对SMT环境下执行端口双线程共享的时间信道攻击最有效的防护策略—关闭SMT技术(含动态关闭SMT技术)。

对于防护有效性评估,选用了PortSmash攻击中的POC(Proof Of Code)代码作为实验目标,分析提出的防护设计对这两种攻击方式的防护效果。

对于性能评估,选用SPEC CPU 2006测试集作为性能评估的参考,主要评估防护方法对性能的影响以及同关闭SMT技术产生的性能影响进行对比。性能评估采用整型和浮点共19个测试程序的SPEC CPU 2006测试集,整型7个,浮点12个,其他测试程序在Gem5模拟器上运行存在问题。

表1 Gem5模拟器配置参数

防护有效性实验结果如表2所示:

表2防护有效性实验结果

从实验结果看出,增加防护设计后,由于冲突端口随着冲突指令量级增大会使能分割或分时的动态资源使用策略,攻击者程序即使存在同受害者的指令冲突且冲突造成的时间延迟和冲突规模呈明显的线性关系,但是使用同受害者不产生冲突的指令类型其造成的时间延迟和冲突规模也呈明显的线性关系且同有冲突时趋于一致。通过该实验数据表明,攻击者使用持续产生端口冲突指令进行时间信道攻击的方式通过度量冲突时间来采集时间信道过程中会有明显的误差和干扰存在,无法判断受害者使用的指令类型和频度,可以达到禁用或动态关闭SMT技术的防护效果,进而防止受害者指令执行端口、指令执行次数及指令类型信息的泄露。

性能对比评估实验结果如表3所示:

表3性能对比评估实验结果

通过在Gem5上运行测试程序,分别统计关闭SMT技术、正常开启SMT技术、开启SMT技术并且使用本防护方法三个场景的执行周期数值,然后进行SPEC CPU 2006程序的整体性能对比,执行周期数越大,性能越差,周期数越小,性能越好。

SMT环境下使用防护设计后SPEC CPU 2006测试集测试出的执行性能相比无防护设计开启SMT平均下降2.3%,性能下降最明显的是453,下降比例为13%,且以473为代表的测试程序在增加防护设计后性能没有下降,且有0.5%的性能提升。本防护方法对性能的影响整体可控,且相比于禁用或动态关闭SMT技术有明显的性能优势。

以上所述的,仅为本发明的较佳实施例,并非用以限定本发明的范围,本发明的上述实施例还可以做出各种变化。凡是依据本发明申请的权利要求书和说明书内容所做的简单、等效变化与修饰,皆落入本发明专利的权利要求保护范围。本发明未详尽叙述的均为常规技术内容。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号