分支预测电路的输入的编码

文档序号:1327708 发布日期:2020-07-14 浏览:1次 >En<

阅读说明:本技术 分支预测电路的输入的编码 (Encoding of inputs to branch prediction circuits ) 是由 托马斯·克里斯多夫·格鲁卡特 石井康夫 于 2018-10-19 设计创作,主要内容包括:一种数据处理装置包括:分支预测电路,适于存储与指令流相关的至少一个分支预测状态条目;输入电路,用于接收至少一个输入以生成新的分支预测状态条目,其中,所述至少一个输入包括多个位;以及编码电路,适于基于与正在执行所述指令流的当前执行环境相关联的值来对所述多个位中的至少一些位进行编码。这防止潜在的攻击,这些攻击利用由一个执行环境训练的分支预测条目被另一个执行环境用作分支预测基础的能力。(A data processing apparatus includes: branch prediction circuitry adapted to store at least one branch prediction state entry associated with an instruction stream; input circuitry to receive at least one input to generate a new branch prediction state entry, wherein the at least one input comprises a plurality of bits; and encoding circuitry adapted to encode at least some of the plurality of bits based on a value associated with a current execution environment in which the stream of instructions is being executed. This prevents potential attacks that take advantage of the ability of branch prediction entries trained by one execution environment to be used as the basis for branch prediction by another execution environment.)

分支预测电路的输入的编码

技术领域

本技术涉及数据处理领域。更具体地而言,其涉及分支预测。

背景技术

数据处理装置可以具有分支预测电路,该分支预测电路用于在分支指令被实际执行之前预测其结果。通过在分支指令被实际执行之前预测分支结果,可以在分支指令执行完成之前开始提取并推测地执行跟随分支的后续指令,从而在预测正确的情况下保存性能,因为与只在分支的结果被实际知晓之后才被提取的情况下相比后续指令可以被更早地执行。

发明内容

至少一些示例提供了一种数据处理装置,包括:

分支预测电路,适于存储与指令流相关的至少一个分支预测状态条目;

输入电路,用于接收至少一个输入以生成新的分支预测状态条目,其中,至少一个输入包括多个位;以及

编码电路,适于执行编码操作以基于与正在执行指令流的当前执行环境相关联的值来对多个位中的至少一些位进行编码。

至少一些示例提供了一种数据处理装置,包括:

存储单元,用于存储与指令流相关的至少一个分支预测状态条目;

接收单元,用于接收至少一个输入以生成新的分支预测状态条目,其中,至少一个输入包括多个位;以及

编码单元,用于基于与正在执行指令流的当前执行环境相关联的值来对所述至少一个输入的多个位中的至少一些位进行编码单元。

至少一些示例提供了一种方法,包括:

存储与指令流相关的至少一个分支预测状态条目;

接收至少一个输入以生成新的分支预测状态条目,其中,至少一个输入包括多个位;以及

基于与正在执行指令流的当前执行环境相关联的值来对多个位中的至少一些位进行编码。

附图说明

通过结合附图阅读的以下示例的描述,本技术的另外的方面、特征和优点将显而易见。

图1示意性地示出了具有分支预测器的数据处理装置的示例;

图2示出了用于对分支预测电路的输入的一部进行编码的编码电路的示例;

图3A-3C示出了基于与当前执行情境相关联的密钥对输入的一部分进行编码的示例;

图4A示出了基于与当前执行情境相关联的重新计算的密钥将反向编码操作应用于由分支预测电路输出的编码目标地址的示例;

图4B示出了将编码操作应用于用作搜索分支预测电路的查询的一部分的指令地址的示例;

图5示出了基于与当前执行情境相关联的多个标识符生成密钥的示例;

图6示出了用于检测指令提取故障率的监测电路的示例;

图7示出了指令提取故障率增加20%或更多会触发错误响应的示例;

图8示出了包括分支目标缓冲器和分支方向预测器的分支预测器的另一示例;

图9示出了一种用于比较的分支目标缓冲器形式,其中在每个分支目标条目的标记信息中指定了标识给定执行情境的情境信息;

图10示出了一种替代实施方式,其中区域表用于将情境信息压缩为较短的区域标识符,该区域标识符用作分支目标缓冲器中的标记信息;

图11示出了在使用这种区域表的系统中可能出现的潜在安全问题,其中攻击者可以利用不同执行情境可从区域表中重新使用同一区域标识符的性质;

图12示出了基于与对应的执行情境相关联的加密密钥来在将分支信息存储在分支目标预测结构中之前对分支信息进行加密并且在从分支目标预测结构读取分支信息时对分支信息进行解密的示例;

图13示出了根据图12的示例的分支目标缓冲器和区域表的条目的示例;

图14示出了更新区域表条目时更改加密密钥的示例;

图15和16示出了使用加密来保护多目标间接分支预测器免受此类攻击的对应示例;

图17是示出执行分支目标预测查找的方法的流程图。

图18是示出基于区域表生成查找的目标标记值的方法的流程图。

具体实施方式

处理电路可以在多个执行环境中的一个中执行数据处理。例如,每个执行环境可以对应于由处理电路执行的不同软件过程、不同特权级别的软件(例如应用程序和操作系统)、给定软件进程的不同部分、在处理电路上执行的不同虚拟机等等。分支预测电路可以被提供用于存储与指令流相关的至少一个分支预测状态条目。分支预测状态条目可以指定分支的预测性质,例如预测的取得或未取得的结果,或者预测的分支目标地址。分支预测电路可以用于在分支指令被实际执行之前预测其结果,以便基于预测的分支性质更早地提取和推测性地执行后续指令。输入电路可以被提供用于接收至少一个输入以产生新的分支预测状态条目,其中至少一个输入包括多个位。例如,输入可以指定要将新条目分配给分支预测电路的分支指令的指令地址的至少一部分,和/或可以在将来的场合用作预测的分支目标地址的分支指令的实际分支目标地址。为了减少所需的存储量,一些实施例可以间接地存储分支目标地址,例如通过将其指定为与分支指令的地址的偏移量。

分支预测机制通常被视为一种性能增强机制,其预测失误(misprediction)对系统处理的数据的安全性而言并不重要,而仅仅影响所达到的性能水平。因此,通常不需要安全措施来保护分支预测器的内容。

本技术提供了编码电路,编码电路用于执行编码操作以基于与正在执行指令流的当前执行环境相关联的值来对由输入电路接收的输入的多个位中的至少一些位进行编码。然后,可以使用输入的编码版本来形成要为分支预测电路生成的新分支预测状态条目。

反直觉地,已经认识到分支预测电路可以提供一种路径,攻击者可以利用该路径绕过在处理电路(该处理电路限制一个执行环境访问与另一个执行环境相关联的数据)上提供的安全保护。这是因为分支预测电路可能允许将分支预测状态条目从不同的执行环境存取到分配该条目的执行环境,从而由第一执行环境分配给分支预测电路的分支预测状态可用于控制在第二执行环境中执行的分支的行为。以前,这仅仅被视为性能问题,就像第二执行环境遇到由不同情境分配的错误条目一样,在第二执行环境执行分支期间,一旦分支的实际分支结果被标识为与预测不匹配,则可以稍后标识出预测失误。然而,已经认识到,由于预测失误的分支而错误地推测性地执行的指令仍然可能影响数据处理装置所使用的高速缓存或其他非架构存储结构中的数据,攻击者可利用这一点来试图获取有关第二执行环境可访问的潜在敏感数据的某些信息。

通过提供编码电路以在基于与当前执行环境相关联的值生成新的分支预测状态条目时将输入的至少一些位的编码应用于分支预测电路,则即使两个不同的执行环境提供相同的输入,分支预测器输出也将不同,因为输入的至少一些位的编码基于特定执行环境的值,这使得一个执行情境很难用恶意的分支信息来训练分支预测电路从而试图欺骗另一个执行情境重新使用同一个分支预测状态条目。这降低了上述类型攻击的风险。这种编码电路的好处是意想不到的,因为分支预测器通常不会被认为构成安全风险,而会被视为纯粹的性能增强措施。

在一些示例中,编码操作可以包括基于指示正在执行指令流的当前执行许可的值对输入值的多个位中的至少一些位进行编码。这使得与不同执行许可相关联的执行环境能够以不同的方式对输入进行编码,使得攻击者更加难以用分支的不同执行许可来成功地控制受害者执行环境分支到期望的目标地址从而试图暴露攻击者无法访问但受害者执行环境可访问的数据,因为使用与攻击者的执行环境相关联的值进行编码时,攻击者可能很难猜测输入的什么值与使用与要攻击的另一执行环境相关联的不同值进行编码的目标输入相匹配。

由编码电路应用的编码操作可以包括基于与当前执行环境相关联的值改变输入的至少一些位的位值的任何操作。要注意,与当前执行环境相关联的值与输入电路接收到的输入的单纯关联将不被视为至少部分输入位的编码,因为在这种情况下,输入的所有位仍将保留其原始值。因此,通常,编码使用由与当前执行环境相关联的值定义的转换来更改至少一个位的值。

例如,编码操作可以包括使用密钥对至少一些位进行编码,其中密钥是基于正在执行指令流的当前执行环境。编码操作可以包括使用密钥重新排列至少一些位(例如,对位进行移位或其他重新排序)。此外,编码操作可以包括使用密钥切换输入的至少一些位。例如,可以通过对输入的至少一些位和从与当前执行环境相关联的值得出的密钥应用XOR(异或)运算来实现切换。XOR运算在性能和硬件方面是有效的。替代地,编码操作可以包括应用于基于密钥的输入的至少一些位的散列函数。编码操作可以是可逆的(例如,对使用同一密钥的前一个XOR运算的结果应用第二XOR运算可能会还原初始输入),也可能是单向散列函数。

分支预测电路的输入可以包括多条信息。编码可以应用于输入的不同部分。不需要对整个输入进行编码。

例如,至少一个输入可以包括分支指令的指令地址的指示,该指示可用于形成新的分支预测状态条目,从而提供该分支指令的预测。当查询分支预测电路时,分支预测电路可以接收查询值并使用该查询值执行搜索,该查询值包括要对其进行分支预测的指令的指令地址的指示。例如,搜索可以识别分支预测电路是否存储与由查询值指定的与指令地址相对应的一个或多个指令相关的任何分支预测状态条目。例如,每个条目可以包括一些标记信息或其他状态数据,使得搜索能够识别提供给分支预测电路的查询是否与该条目匹配。如果查询未命中,并且随后确定查询所指示的指令地址对应于分支指令,则可以向分支预测电路分配新的分支预测状态条目,指定与导致未命中的查询相对应的标记信息或其他状态,并指定为分支指令确定的实际分支信息。

在一个示例中,在执行搜索之前,编码电路可以使用从与当前执行环境相关联的一个或多个值得出的密钥,对查询值的多个位中的至少一个位执行编码操作。因此,不同的执行环境基于其特定于环境的密钥以不同的方式对同一查询进行编码,以更改输入查询与分支预测电路的作为匹配而返回的条目之间的映射,从而使预测应当提供什么输入值来作为查询以训练分支预测器对于攻击者而言更加复杂,该训练用于欺骗与不同执行环境中的某个其他查询值关联的分支使用由攻击者的执行环境分配的预测状态。将编码应用于查询值(而不是应用于预测的分支状态,例如为分支预测的目标地址)的一个优点是,将编码操作应用于分支预测电路的查询输入可能足以挫败攻击者,因此在从分支预测器读取分支状态信息时不必应用任何解码,因为预测的支路信息可能仍然不受阻碍地(in the clear)存储在分支预测电路中。这可以通过避免在分支预测器的输出处的解码电路额外的定时路径来提高性能。

在其他示例中,至少一个输入(它的位被编码电路编码以形成新的分支预测状态条目)可以包括分支指令的目标地址(也称为“分支目标地址”或“分支目标偏移”)的指示。在这种情况下,装置还可以包括反向编码电路(或解码电路),以对分支预测电路的输出执行反向编码操作,该输出响应于基于指示指令地址的查询值而触发的分支预测电路的搜索。反向编码操作可以是反转由编码电路应用的编码操作的效果的任何操作,以恢复位(这些位的值被编码操作进行了转换)原始值。在这种情况下,预测的分支状态不是改变查询值与访问的分支预测电路的哪个条目之间的映射,而是基于与当前执行环境相关联的密钥以特定于环境的方式编码,因此,即使第二执行环境遇到由第一执行环境训练的分支预测状态条目,所得到的分支预测也可能不同于从第一执行环境访问相同条目时所做的预测。这使得攻击者更难通过恶意训练分支预测器来成功控制不同执行环境所分支到的位置。这可以通过减少遇到错误的分支预测状态条目的机会来提高性能。

反向编码电路可以重新计算与当前执行环境相关联的密钥的值,并且使用重新计算的密钥值来执行反向编码操作。因此,如果当前执行环境在分配分支预测状态条目的时间和访问分支预测状态条目进行预测的时间之间变化,则由于重新计算从与当前执行环境相关联的值得出的密钥,反向编码操作可以在分配该条目时向作为预测的分支状态提供的信息产生不同的信息。

还可以将编码操作应用于分支的指令地址和目标地址,以便将上述两种方法结合起来。

与当前执行环境相关联的密钥可以基于与当前执行环境相关联的一个或多个标识符的组合。例如,密钥可以基于以下一个或多个的任意组合:

异常级别(区分不同的操作模式,例如用户模式、内核模式、管理程序模式);

权限级别(区分不同的执行许可);

ASID(地址空间ID——区分不同的应用程序级执行情境);

VMID(虚拟机ID——区分不同操作系统或虚拟机级别的执行情境或应用程序,同一ASID在不同操作系统或虚拟机的控制下运行);

NS(非安全/安全状态,指示装置的当前安全状态);

物理处理器核数(区分在硬件中提供的不同处理器核上执行的进程);

逻辑核数(区别使用硬件中提供的共享处理器核的不同逻辑分区执行的执行环境);以及

一个或多个软件可写寄存器(以便软件可以提供用于得出密钥的进一步输入,以提供密钥的进一步变化,例如,这会使知道在其下执行的进程的情境标识符(如ASID或VMID)的进程更难预测该进程使用的密钥的值)。

此外,还可以基于先前生成的随机数生成密钥。这可以在为与当前执行环境相关联的给定标识符组合生成的密钥中提供进一步的变化,使得能够识别一个设备使用的密钥(或用于得出密钥的函数)的攻击者更难将该知识应用于可能使用不同随机数的其他设备。随机数可以包括:每个逻辑处理器的元素、每个物理处理器的元素和系统范围元素中的至少一个。可以在启动时生成先前生成的随机数的至少一部分,使得每次数据处理装置启动时,该随机数都变化,以提供与给定执行环境相关联的密钥的进一步抗破解能力。例如,硬件随机数生成器或伪随机数生成器可在每次引导装置时被触发以产生新的随机数。先前生成的随机数中至少一部分可能是伪随机的——可能不需要真正的随机性。

在一些实施例中,指令流可以在适于以最低执行许可(具有最低权限的执行许可级别)执行的多个执行环境中的一个中执行。例如,处于最低执行许可的执行环境可以包括应用程序或应用程序的子部分。在一些示例中,编码电路可以进一步基于正在执行指令流的、处于最低执行许可的多个执行环境之一的标识符来执行编码操作。这可以允许应用程序级软件的不同部分(它们可能共享相同的地址转换机制,因此可能期望共享分支预测器输入到分支预测器条目的映射)使用分支预测器输入的不同编码,以降低一个应用程序或应用程序的一部分对共享相同地址转换机制的另一个应用程序或应用程序的另一部分造成上述形式的攻击的风险。

监测电路可以被提供,用于检测指令流在推测状态下执行时的指令提取或解码的故障率,并且响应于检测到的指令提取和/或解码的故障率满足预定标准(例如增加到超过预定的阈值)而引发异常或产生错误响应。例如,阈值可以至少比前一比率高20%。替代地,阈值可以比其他应用程序的平均比率高20%。这可以为检测上述形式的攻击提供一种技术。如果指令提取故障的数量增加,一种可能的解释可能是攻击者正在试图训练分支预测器,以诱使其他代码从不适当的分支地址执行指令,该分支地址随后被检测为预测失误。当推测性指令提取或解码的故障率增加时,通过触发异常或错误响应,可以给出潜在攻击的警告。软件如何选择对此类警告作出响应可能取决于正在执行的特定软件,但是当检测到异常高的指令提取故障时,提供用于触发中断/错误响应的监测电路可以提供硬件框架,使软件能够以适合于该软件的方式作出响应。

在一个示例中,分支预测电路可以包括分支目标预测结构,该分支目标预测结构包括多个分支目标条目,每个分支目标条目指定至少一个分支目标地址。编码电路可以包括使用与当前执行环境相关联的加密密钥来加密要写入分支目标预测结构的新分支目标条目的至少一部分的加密电路。

每个分支目标条目可以指定标记信息。该装置可以具有分支目标预测电路,该分支目标预测电路对与当前执行环境相关联的指令提取地址执行分支目标预测查找。分支目标预测查找可以包括确定分支目标条目的任一个子集是否指定与针对指令提取地址确定的目标标记相对应的标记信息。在分支目标预测查找中查找的分支目标条目的子集可以在完全关联缓存实现的情况下包含分支目标预测结构的所有分支目标条目,或者可以仅包含集合关联实现中的一些分支目标条目(分支目标条目的子集)。在集合关联实现中,例如,可以基于给定分支指令的地址的一部分来选择要查找的分支目标条目的子集。

通常,目标标记可以基于指令提取地址的某些性质、提取地址出现的当前执行环境、或处理电路的最近操作的一些历史记录(指示由指令提取地址表示的当前执行点的某些性质)来以某种方式确定。所使用的特定标记可以根据实现的分支目标预测结构的类型而变化。例如,目标标记可以从指令提取地址或与当前执行环境相关联的一个或多个标识符得出,也可以基于导致由指令提取地址标识的(一个或多个)指令的分支结果的过去历史。

目标标记的值可以在多于一个执行环境中重新使用。因此,目标标记对于特定的执行环境可能不是唯一的。例如,这可能是因为特定的分支目标预测结构使用完全独立于与当前执行环境相关联的标识符的标记,或者是因为虽然标记包括从与当前执行环境相关联的值得出的至少一部分,但为了在分支目标预测结构的标记信息存储中保存电路区域,标记信息和目标标记可以基于标识当前执行环境的一个或多个执行环境标识符的压缩版本,以便压缩标识符的值可以从一个执行环境重新使用到另一个执行环境。

因此,不能保证在一个执行环境中使用的目标标记在执行与不同执行情境相关联的分支指令之后,将与分配给分支目标预测结构的条目的标记信息不匹配。这可能导致在分支目标预测结构中的误报命中,从而有时可能返回错误的分支目标地址,因此分支预测失误可能导致在分支之后执行错误的指令。虽然这种误报命中可能导致处理性能下降,但可能已经提供了分支预测失误解决电路来通过以下方式处理预测失误:触发处理器在预测失误的分支之后刷新流水线指令,并且在解决分支结果后从正确的处理路径恢复指令提取。因此,由于在多个执行环境上重新使用标记值而导致的误报命中通常不会被视为一个主要问题,因为它们可以通过类似于分支预测失误的其他原因的方式得到解决,虽然这会影响性能,但通常不会被视为对数据安全的风险。

然而,应当认识到,事实上,分支目标预测电路中的这种误报命中可能对数据处理装置正在处理的数据的安全性构成安全漏洞。该装置可以将对某些数据的访问限制到特定的执行环境,例如使用基于特权的数据访问保护方案。已经认识到,分支目标预测电路中的误报命中可允许规避此类安全机制,以便由攻击者控制的第一执行环境能够获得有关敏感信息的信息,这些信息可由第二执行环境访问,并且不可由第一执行环境访问。这是令人惊讶的,因为分支预测机制通常被视为一种性能增强机制,其预测失误对系统处理的数据的安全性并不重要,而仅仅影响所达到的性能水平。

潜在安全漏洞的一个原因是,如果控制第一执行情境的攻击者能够利用执行环境之间目标标记值的重新使用来触发第二执行环境命中第一执行环境分配的条目,该条目指示某个已知地址(以下称为“错误命中目标地址”)作为其分支目标地址,这将允许攻击者控制第二执行环境分支到位于错误命中目标地址处的某些恶意代码。尽管最终,分支预测可能被确定为不正确,因为由第二执行环境执行的分支的实际目标地址可能与错误命中的目标地址不匹配,并且与错误执行的指令相关联的任何架构状态都可以被倒回到以前的正确状态值以反转错误执行的指令的架构效果,但同时错误执行的指令也可以对非架构处理器状态进行更改,例如高速缓存或翻译查询缓冲器(translation lookaside buffer;TLB)中的数据,这在解决预测失误后可能会一直存在。攻击者可能在错误命中的目标地址处设计了恶意代码,以确保由于错误执行的指令而缓存其数据的特定地址依赖于攻击者希望访问的敏感信息。因此,攻击者可以在第一执行环境中执行指令,该环境被设计为探测缓存了哪些数据,并使用性能指标(例如缓存未命中计数或存储器访问延迟度量)来探测在执行预测失误的指令期间,第二执行环境缓存了哪些信息。这样就可以允许攻击者获取有关第二执行环境处理的潜在敏感数据的信息,从而规避系统的安全机制。

因此,要写入分支目标预测结构的新分支目标条目的至少一部分可以使用与分配该分支信息的对应执行环境相关联的加密密钥来加密。可以对新分支目标条目的标记信息或新分支目标条目的分支数据(至少指定预测的分支目标地址)或这两者进行加密。如果标记信息在分配新的分支目标条目时使用加密密钥来至少部分加密,则在分支目标预测查找期间:加密电路可以使用与当前执行环境相关联的(重新计算的)加密密钥来加密针对指令提取地址确定的目标标记,并且分支目标预测电路可以将加密的目标标记与分支目标条目的子集的标记信息进行比较以识别分支目标条目的任何一个子集是否指定与目标标记相对应的标记信息;或者存储在查找条目中的加密标记信息是否可以被解密并与(未加密的)目标标记进行比较。如果在向分支预测结构分配新条目时对分支数据进行加密,则装置还可以具有解密电路,以对分支目标条目的子集中的一个分支目标条目(该条目在分支目标预测查找中被标识为指定了与目标标记相对应的标记信息)的分支数据的加密部分进行解密。

例如,在一个特定的示例中,在分支目标预测查找中,当分支目标条目的查找子集中没有一个指定与目标标记相对应的标记信息,并且指令提取地址指定包含分支指令的一个或多个指令的块时,加密电路可以使用与当前执行环境相关联的加密密钥来加密为分支指令确定的实际分支信息,并且分支目标预测电路可以将分支目标条目分配给分支目标预测结构,该分支目标条目指定加密的分支信息和与目标标记相对应的标记信息。另一方面,在查找命中时,当分支目标条目的子集中的一个分支目标条目确实指定了与目标标记对应的标记信息时,可以使用与当前执行环境相关联的加密密钥来解密存储在该条目中的分支信息,然后将解密后的分支信息作为给定分支指令的预测分支信息而输出。

因此,在本示例中,由于分支目标预测结构中的分支信息受到与该分支信息相关联的对应执行环境相关联的加密密钥的保护,如果一个执行环境分配分支信息,它将使用与该环境相关联的密钥进行加密,然后如果在另一个执行环境重新使用该条目的相同标记信息时碰巧出现误报,则将使用与另一个执行环境相关联的密钥对分支信息进行解密,因此不会指示与分配条目的执行环境最初提供的分支目标地址相同的分支目标地址。通常人们会认为分支预测器是一种纯粹的性能增强措施,它不会影响数据的安全性或完整性,令人惊讶的是,加密在分支预测器中是有用的,但是,通过使用执行环境特定的密钥加密分支信息,这使得上述类型的攻击更加困难,因为当攻击者不知道与每个执行环境相关联的密钥时,他们更难控制另一个执行环境分支到的位置。

在一些示例中,加密电路和解密电路可以包括单独的电路。例如,在某些情况下,应用于解密加密的分支信息的操作可能与应用于加密分支信息的操作不同,因此可以应用单独的加密和解密方法。替代地,加密和解密操作实际上可以是相同的操作。例如,加密操作可以包括应用可逆操作(例如,XOR)到分支信息和加密密钥,并且解密操作可以包括应用相同的可逆操作(例如,XOR)到加密的分支信息和加密密钥。因此,在一些示例中,加密电路和解密电路可以都对应于硬件中提供的相同电路(不必提供两个独立的电路单元)。替代地,即使加密和解密操作相同,也可以提供单独的加密和解密电路,以允许对分支目标预测结构的一个条目的分支信息的解密与对另一个条目的分支信息的加密并行地执行。

在一些示例中,加密密钥可以包括针对当前执行环境固定的静态密钥。因此,每个执行环境都可以与永不改变的某个固定密钥相关联。这可能足以提供足够的安全性,因为攻击者仍然很难预测对使用一个加密密钥加密的值解密的结果,该加密密钥与加密中使用的密钥不同,其中一个或多个密钥是未知的。尽管可以在每个执行环境的存储结构中存储许多特定环境的密钥,但由于执行环境的数量可能很大,因此这可能需要大量存储。用于确定当前执行环境的静态密钥的更简单方法可以是从多个执行环境之间共享的公共密钥和特定于当前执行环境的至少一个环境标识符得出静态密钥。例如,如上文所述,公共密钥可以是先前生成的随机数。例如,公共密钥可以基于当前执行环境的(一个或多个)标识符(例如,上述ASID、VMID等)进行散列或修改。

在另一种方法中,加密密钥可以包括对于当前执行环境可变的动态密钥。因此,除了在不同的环境中变化之外,还可以针对特定的环境不时地更改加密密钥。这可以提供更高的安全性,因为它减少了攻击者通过观察数据处理系统在一段时间内的行为来获取给定环境的密钥的机会。因此,该装置可以包括密钥生成电路,以用于为当前执行环境生成更新的加密密钥。例如,密钥生成电路可以包括随机或伪随机数生成器,例如线性反馈移位寄存器,以便在需要时为给定执行环境的加密密钥生成新的随机或伪随机值。密钥更新的时机可以是任意的,或者可以是响应于某些预定事件的,或者可以是在某个时间段或分支预测事件的数目到期时。在一些示例中,每个分支目标条目中的标记信息可以未加密地存储,以便不对标记信息应用加密或解密。这可以简化标记比较。加密分支信息可能足以降低上述攻击的概率。

另外,除了(或代替)加密指示分支目标地址的分支信息之外,还可以加密标记信息。因此,当指令提取地址被标识为引用包括分支的指令块时,如果在分支目标预测查找中未命中,则可以使用与当前执行环境相关联的加密密钥来加密目标标记,并且可以将加密的目标标记指定为分配的分支目标条目的标记信息。在分支目标预测查找中,解密电路可以解密分支目标条目的每一子集的标记信息,并且分支目标预测电路可以将解密的标记信息与目标标记进行比较。替代地,可以将来自分支目标查找的加密目标标记直接与存储在分支目标预测结构中的加密标记信息进行比较,以识别标记是否匹配,从而避免解密的需要。

在某些情况下,标记和分支信息可以单独加密或解密,一种加密应用于标记,另一种加密应用于分支,在这种情况下,可以使用处理标记加密的任一方法(根据需要以加密或解密形式进行比较)。然而,在其他示例中,标记信息和分支信息可以在单个加密方案中一起加密。这可以提供额外的安全性,因为如果加密值不仅依赖于分支信息和特定环境的加密密钥,而且还依赖于与分支一起提供的标记信息(标记信息可以为分支信息的加密提供额外的熵)则更加难以破解应用于分支信息的加密。然而,这可能会慢一些,因为在这种情况下,解密电路可能需要解密每个查找的条目的整个标记块和分支信息,然后才能将解密的标记与目标标记进行比较,以查看是否存在匹配的条目,并且如果是这样,则可以输出解密的分支信息。

因此,总而言之,加密/解密所采用的方法以及分支信息和标记的加密程度可能取决于性能和安全性之间所需的折中方案。

一般来说,指示分支目标地址的任何信息都可以用作分支信息。在一些示例中,分支信息(当在加密之前或解密之后的未加密项中看到时)可以显式地指示分支目标地址。可以将分支目标地址指示为绝对地址,也可以使用相对于执行分支目标预测查找的当前指令提取地址的偏移量将其指示为相对地址。在一些示例中,分支目标地址可能不能由分支信息直接标识,但是分支信息可以提供指向标识分支目标地址的其他结构的指针,或者可以用于计算分支目标地址。因此,一般来说,分支信息可以包括允许确定预测的分支目标地址的任何信息。

在一些示例中,分支信息不能指定除分支目标地址之外的任何其他信息。然而,在一些示例中,分支信息还可以指示至少一条其它分支信息,其表示由指令提取地址标识的一个或多个指令块中的分支指令的某些预测属性。例如,附加信息可以指定分支是否是条件分支指令,分支目标地址是否应该使用与分支目标预测结构分离的一些其他分支目标预测器(例如,用于预测其目标地址根据分支之前的过去处理结果而变化的多态分支的分支目标预测器)来预测或分支是否表示函数调用或函数返回。这样的额外的分支信息可以与标识分支目标地址的信息一起加密/解密。

尽管目标标记可以依赖于指令提取地址的一系列属性,但在一个示例中,分支目标预测电路可以根据与当前执行环境相关联的至少一个环境标识符来确定目标标记。这有助于避免在不同环境中对同一地址所做的预测之间出现误报。例如,环境标识符可以包括标识与地址相关联的虚拟机的虚拟机标识符和/或标识与地址相关联的进程的进程标识符。

有人可以预期,如果目标标记取决于与当前执行环境相关联的至少一个执行环境标识符,则在执行环境之间不应重新使用目标标记值。然而,在实践中,数据处理装置可以执行大量不同的环境,但是在任何时间,具有存储在分支目标预测结构中的信息的不同环境的数量可以低得多。因此,在每个条目的标记信息中表示完整的环境标识符可能需要大量的位,并且在实践中,许多这些信息可能是冗余的,因为为了分支目标预测查找的目的,只需要将当前执行环境与当前在分支目标预测结构中缓存了分支信息的其他执行环境区分开,并且不必将当前执行环境与在分支目标预测结构中没有表示分支信息的其他环境区分开。因此,存储完整的环境标识符可能不必要地增加每个区域条目的大小,并且需要多个比较器来将标记信息的各个位与目标标记进行比较,从而增加了电路面积。

因此,为了减少电路面积和功耗,一些实现方式可以提供具有多个区域条目的区域表,每个区域条目将分支情境信息映射到区域标识符,区域标识符具有比分支情境信息更少的位。分支情境信息可以包括与对应的执行环境相关联的至少一个标识符。在执行分支目标预测查找时,可以基于由区域表映射到与当前指令提取地址相关联的分支情境信息(包括至少一个标识符)的目标区域标识符来确定目标标记。每个分支目标条目的标记信息可以指定区域标识符来代替执行环境的(一个或多个)标识符。因此,区域表有效地允许将更大的执行环境标识符集合和用于标识分支情境信息的任何其他信息压缩为较短的标识符,该标识符用作分支目标预测结构中的标记以节约面积。

在使用这种区域表的方法中,区域条目的数量可能是有限的,因此当遇到一个新的执行环境时,该环境中还没有在区域表中分配对应的区域条目,以前分配给不同执行环境的区域条目可能需要为当前执行情境重新使用。当区域条目被重新使用时,对应的区域标识符仍然可以用作分支目标预测结构中某些条目的标记。虽然这些过时的分支目标条目可能会从分支目标预测结构中失效以防止误报命中,执行这样的失效在性能和复杂性方面可能是昂贵的,因为它可能需要特殊的电路来遍历分支目标预测结构,以逐出重新使用的所选区域标识符的信息。在实践中,这种性能成本可能是不合理的,因为在任何情况下,如果有一个基于该条目的分支预测失误,都会期望过时的条目被逐出。因此,使用区域表的实现方式在区域表更新时不会使分支目标条目无效,从而易于在分支目标预测结构中出现误报。因此,如上所述的分支信息的加密/解密对于使用区域表的分支目标预测器特别有用,以提高安全性。

尽管与每个执行环境相关联的加密密钥可以存储在单独的存储结构中,但是当提供区域表时,每个区域条目可以有效地指定与对应执行环境相关联的加密密钥。因此,可以在查找目标区域标识符的同时从区域表中读取加密密钥,以节省单独查找单独存储结构的需要。这种方法还意味着不必为所有执行环境存储加密密钥。相反,只能为当前由区域表映射到区域标识符的特定执行环境维护密钥。对于其他执行环境,不需要维护任何加密密钥,因为它们当前不涉及分支目标预测结构。因此,这种方法还可以减少了需要存储的密钥数量。

当区域表的给定区域条目提供的映射也被更新时,可以更新与给定执行环境相关联的加密密钥。也就是说,当必须将区域表的区域条目分配给不同的执行环境时,也可以更新为该区域项指定的加密密钥,以在映射更新之后为与该区域条目相关联的执行环境生成新密钥。这可以防止与一个环境相关联的旧密钥在新环境中保持不变,从而确保每个环境使用不同的密钥。

在一些实现方式中,由区域表映射到区域标识符的分支情境信息可以包括标识当前执行环境的一个或多个执行环境标识符,但可以不包括任何其他信息。

然而,在其他方法中,分支情境信息也可以取决于其他信息。例如,分支情境信息还可以包括指令提取地址的一部分,对于该部分,先前的分支目标预测查找导致将给定的区域项分配给区域表。因此,指令提取地址的一部分用于查找区域表并标识对应的区域标识符,这避免了在分支目标预测结构的每个分支目标条目中将该部分的指令提取地址存储为标记信息的需要。通常,对于给定执行环境使用的大量提取地址,指令提取地址的最重要部分可能相同,并且对于特定执行环境中在给定时间范围内使用的所有指令提取地址,该最重要部分的不同值的数目可能为相对较低。因此,通过在区域表中表示指令提取地址的这一部分,并将其与执行环境标识符一起压缩为较短的区域标识符,这可以减少每个分支目标条目所需的标记存储量以及将目标标记与存储的标记信息进行比较的比较逻辑量。

其他形式的分支目标预测结构可以使用独立于与给定执行环境相关联的执行环境标识符的标记。例如,一种类型的分支目标预测结构可用于预测某些分支指令的目标地址,这些分支指令在行为方面根据先前执行的分支而变化。例如,给定分支指令的分支目标地址可以例如根据先前条件指令的结果被计算为一系列不同的可能分支目标地址中的一个,并且这些条件指令本身可以取决于分支结果的过去历史。对于这种分支目标预测结构,标记可以取决于指令提取地址和在指令提取地址处的前一个分支指令的分支结果的历史,但可以独立于当前执行环境的(一个或多个)环境标识符。因此,使用这种类型的标记,标记的值可能在多个执行环境中可重新使用,因为给定的指令地址和分支结果的历史记录可以在不同的环境中生成。同样,这可能会为攻击者提供一种途径,使攻击者能够在分支目标预测结构中填充给定分支历史记录的分支信息,该分支历史记录预计将在要攻击的某个受害环境中使用,由于不同环境之间的误报命中而试图强制受害者环境分支到由攻击者环境控制的某个指令地址。通过使用如上所述的分支目标预测结构中的分支信息和/或标记信息的加密(如果需要解密),这种攻击可能变得更加困难,因为使用错误环境的加密密钥解密加密的分支信息不太可能导致已知地址可以被攻击者控制。

图1示意性地示出了具有包括多个流水线级的处理流水线的数据处理装置2的示例。该流水线包括分支预测器4,以用于预测分支指令的结果并生成要提取的指令的一系列提取地址。提取级6从指令缓存8提取由提取地址标识的指令。解码级10对所提取的指令进行解码,以生成用于控制流水线的后续级的控制信息。重命名级12执行寄存器重命名以将由指令标识的架构寄存器说明符映射到标识硬件中所提供的寄存器14的物理寄存器说明符。寄存器重命名对于支持无序执行非常有用,因为这样可以通过将指定同一架构寄存器的指令映射到硬件寄存器文件中的不同物理寄存器来消除指令之间的危险,以增加指令可以不同于从高速缓存8获取指令的程序顺序执行的可能性,这可以通过允许以后的指令在以前的指令等待操作数可用时执行来提高性能。将架构寄存器映射到不同物理寄存器的能力也有助于在发生分支预测失误时重新运行架构状态。发出级16将等待执行的指令排队,直到处理这些指令所需的操作数在寄存器14中可用为止。执行级18执行指令以执行对应的处理操作。写回级20将执行的指令的结果写回寄存器14。

执行级18可以包括许多执行单元,例如用于评估是否正确预测了分支指令的分支单元21、用于执行算术或逻辑运算的ALU(算术逻辑单元)22、用于使用浮点操作数执行运算的浮点单元24以及用于执行将数据从存储器系统加载到寄存器14的加载操作或将数据从寄存器14存储到存储器系统的存储操作的加载/存储单元26。在本示例中,存储器系统包括一级指令高速缓存8、一级数据高速缓存30、在数据和指令之间共享的二级高速缓存32和主存储器34,但是应该理解,这只是可能的存储器层次结构的一个示例,并且其他实现方式可以具有更高级别的高速缓存或不同的布置。加载/存储单元26可以使用翻译查询缓冲器36,提取单元6可以使用翻译查询缓冲器37以将由流水线生成的虚拟地址映射到识别存储器系统内的位置的物理地址。应当理解,图1中所示的流水线只是一个示例,其他示例可以具有不同的流水线级或执行单元集合。例如,顺序处理器可能没有重命名级12。

图2示出了向分支预测器4提供输入以生成要分配的新分支预测状态条目的示例。输入包括许多位。例如,本示例中的输入指定被标识为分支的指令的指令地址,以及指示执行分支时分支到的地址的分支目标地址(目标地址)。编码电路52被提供用于基于与正在执行指令流的当前执行环境相关联的值54,对输入的至少一些位执行编码操作。然后,由编码操作产生的编码输入值被提供给分支预测电路4。例如,编码可应用于输入的指令地址或目标地址中的一者或两者的全部或部分。

图3A到3C示出了执行编码操作的不同示例(在示例3A和3B中,应用于分支的目标址的一部分,尽管它也可以应用于如示例3C中的指令地址)。如图3A至3C所示,在将编码操作应用于剩余位之前,可以移除输入地址的一些位。在图3A中,基于从与当前执行环境(或当前执行许可)相关联的值得出的密钥,执行剩余位的相对顺序的重新排列。例如,可以执行由密钥指定的若干位的右移位,或者对这些位进行某些其他的重新排序。在图3B的示例中,编码操作作为密钥的XOR执行,所选择的输入位被发送到分支预测器。XOR是可逆编码操作的示例,对于该操作,可以通过基于对应密钥执行进一步XOR来执行逆编码操作。在图3C的示例中,可以基于密钥将散列函数应用于输入的选定位。注意,密钥不需要包含与被编码的选定位相同的位数。一般来说,不管所应用的编码的特定形式如何,在将所编码的输入提供给分支预测电路之前,输入的某些值的位值已经改变。在示出对目标地址进行编码的图3A和3B的示例中,移除的位可以是其值在应用反向编码时可以推导或已知的位。例如,如果指令已经与它们的大小对齐,则可以移除地址的一个或多个低位,因为它们始终为零。类似地,如果目标地址被表示为与指令地址的偏移量,则最高位可能始终为零,因此可以在应用编码之前移除,因为应用反向编码时不需要还原它们。相比之下,对于指令地址的编码,不需要确保移除的位能够通过反向编码恢复,因为这种方法不需要反向编码,因此转换可以是单向转换。

图4A和4B示出了响应于指定给定指令地址的查询而取回预测分支信息的查询分支预测电路的两个示例。图4A可用于图2的编码电路52将编码操作应用于分支的目标地址的至少一些位的示例中。在本示例中,向分支预测电路提供查询,该查询指定要对其进行分支预测的指令地址。分支预测电路4执行对其存储结构的查找以识别是否有条目与查询匹配,并且如果条目匹配,则取回并输出编码的目标地址(由编码电路52基于与当前执行环境相关联的值54生成)。反向编码电路56(在一些实施例中可以与编码电路52相同,或者根据实现的编码/解码算法可以不同)基于重新计算的密钥58将反向编码操作应用于编码的目标装置,重新计算的密钥58的形成方式与图2中使用的与当前执行环境54相关联的值相同,只是它是在执行分支预测电路的查询时而不是在匹配的分支预测条目被写入分支预测电路(如图2所示)时基于与当前执行环境54相关联的参数重新计算的。因此,如果在由与分配该条目的执行环境相同的执行环境触发的查询之后访问匹配条目,则由反向编码电路56输出的结果目标地址将与图2中最初作为输入提供的目标地址相同。然而,如果从与分配匹配条目的执行环境不同的执行环境访问匹配条目,则解码的目标地址60与最初分配的目标地址60不同。可以选择编码/反向编码算法和/或密钥(或用于生成密钥的方法),以使攻击者难以预测应将目标地址的哪个替代值作为图2中的输入,从而使反向编码地址60(当使用对地址进行编码的不同的密钥进行反相编码时)与攻击者希望其他执行环境分支到的所需分支目标地址相匹配。

图4B示出了在编码电路52将编码操作应用于指令地址(或用于在分支预测电路4中定位匹配条目的其他标记信息)的示例中用于查询分支预测电路4的替代方法。在这种情况下,在查询分支预测电路4以执行对分支信息的搜索时,对应的编码电路52(可以是图2中使用的相同物理电路,也可以是不同的电路)基于根据与当前执行环境相关联的标识符重新计算的重新计算的密钥58(在查询分支预测器)对所查询的指令地址应用相同的编码操作,例如应用单向散列以根据密钥对指令地址进行编码。使用这种方法,不必使用可逆操作,因为从分支预测电路4输出的数据不需要编码,相反,抵抗攻击的能力是通过置乱分支预测器输入的查询与分支预测器中被认为与查询匹配的位置之间的映射来提供的。因此,基于散列查询信息来搜索分支预测电路4,并且在不应用任何反向编码的情况下,可以在未加密项中输出从匹配条目输出的目标地址62,并用作由作为查询输入提供的指令地址表示的分支的预测分支目标地址。

图5示出了从与当前执行环境相关联的多个标识符中形成密钥的示例。这些标识符可以从与处理流水线2相关联的一个或多个控制寄存器中获取,处理流水线2指定当前执行环境的属性。例如,密钥可以基于以下任一项:

·异常级别79;

·执行权限等级80;

·地址空间ID(ASID)81;

·虚拟机ID(VMID)82;

·安全状态83;

·物理核数84;

·逻辑核数85;

·随机值86,可以是真随机数或伪随机数。(伪)随机数可以从以下至少一个中得出:对于每个逻辑处理器不同的每个逻辑处理器(伪)随机数89;对于每个物理处理器核不同的每个物理处理器(伪)随机数90;以及系统(伪)随机数91,在数据处理系统中的所有逻辑或物理处理器核之间共享,但可能因系统而异,以减少一个系统上的密钥中断可被另一个系统重新使用的机会(或这些中的任何一个或多个)。这些随机数的元素89、90、91中的每一个可以在每次数据处理装置2启动时被更新。

·一个或多个软件可写寄存器值87,其可在软件控制下写入寄存器14以为编码操作提供进一步的熵;

·容器ID 86(在具有最严格访问权限的最低权限级别上区分执行环境的不同部分的标识符)。

当然,并非所有这些参数都需要考虑针对特定的实现方式。一般来说,通过基于与当前执行环境相关联的一个或多个标识符80-85、88以及可选地基于诸如软件定义值的随机数的进一步参数来生成用于编码操作(以及必要时的反向编码操作)的密钥,具有不同权限级别的两个不同执行环境不太可能具有相同的密钥,因此攻击者很难在一个执行环境中训练分支预测器,以诱使具有更高数据访问权限的执行环境分支到可能导致安全数据暴露的恶意代码。此外,通过在密钥生成过程中添加(伪)随机值,攻击者更难确定密钥是什么。特别是使用随机值意味着即使攻击者可以完全访问一个系统,通过反向设计获得的任何信息也不能用于预测另一个系统上使用的密钥,因为(伪)随机值将不同。类似地,在每个逻辑处理器核上为每个执行环境生成不同的密钥也是可取的。由于复杂性和性能原因,可能不希望每个逻辑处理器都有单独的(伪)随机数生成器。在这种情况下,可以通过在密钥生成过程中使用具有逻辑和/或物理核数的每个处理器或系统级(伪)随机数来实现相同的结果。在一些实施例中,密钥生成过程可以包括将各种密钥输入散列在一起。使用的散列算法可以是(安全的)单向散列。

也就是说,在一些示例中,密钥可以基于应用于至少一个密钥输入参数的单向转换,其中至少一个密钥输入参数包括与当前执行环境相关联的至少一个值(例如,上面讨论的ASID、VMID或异常级别),但也可以包括其他输入,例如软件可写值的随机数。通过使用单向转换生成密钥,这意味着即使攻击者能够观察到除了一个输入之外的所有输入,并且他们知道算法,并且能够观察到生成的密钥中的一些,他们也无法计算出丢失的输入是什么(例如随机数),这进而意味着他们无法预测不同执行环境的密钥。

图6示出了提供了监测电路95的示例,监测电路95用于监测由提取级6遇到的指令提取故障和/或由解码级10遇到的指令解码故障的比率。提取故障率和解码故障率可以单独监测,也可以作为一个组合比率监测。此外,在一些示例中,只能监测这些类型的故障中的一种(例如,单独一区故障或单独解码故障)。尽管提取和解码故障可能由于许多原因而发生,但其中之一可能是分支预测器4的分支预测失误。如果攻击者试图使用分支预测器发起攻击(如上所述),则可能存在更频繁的分支预测失误。因此,指令提取和解码故障的比率可以用作一个指示符,该指示符可以提供正在安装攻击的提示。如果检测到给定时间段内的指令提取或解码故障的比率增加一定阈值,则监测器电路95可以触发错误响应(例如引发中断或异常)。图7示出了跟踪持续时间T的连续时间段中的指令提取故障率的图表。如图7所示,如果从一个时间段到下一个时间段中,指令提取故障率的增加大于阈值(例如20%),则可以触发故障处理响应。本领域技术人员将意识到,在本发明的范围内,有多种方法使用故障率来检测攻击(例如,与预定阈值比较,或与先前执行的程序的故障率比较)。软件选择如何响应这种异常可能会有所不同,但这提供了一种向软件发送攻击正在进行的信号的手段。

图8示意性地示出了分支预测器4的另一示例,该分支预测器4包括用于预测是否采用分支指令的分支方向预测器(BDP)140、用于预测在所采取的事件中将哪个分支指令将重定向程序执行到目标地址的分支目标缓冲器(BTB)142、以及用于将提取地址排队的提取队列144,该提取地址标识要从高速缓存8提取的程序指令块(注意,在某些情况下,提取队列可以被视为提取级6的一部分,而不是分支预测器4的一部分,但在功能上相同)。置于提取队列144中的地址表示要从指令高速缓存8提取的指令块的地址,这些指令块是从分支预测器的先前预测中得出的。在一个块中从高速缓存8提取到的指令单元可以称为“提取块”,并且可以具有特定的默认大小,例如16、32或64字节,尽管在某些情况下,执行提取的起始地址不与自然提取块边界对齐,可以在小于默认大小的情况下执行部分提取块的提取。

BDP 140(也可以被称为分支历史缓冲器或分支结果预测器)记录用于预测分支指令的采用/未采用结果的分支历史信息。任何已知的采用/未采用预测方案可用于BDP 140。例如,gshare或TAGE是已知分支方向预测算法的示例。

BTB 142保存由对应于分支指令的指令地址的一部分的标记标识的多个分支指令的预测信息(并且可能取决于诸如情境标识符或当前执行环境的的其他标识符之类的其他信息)。预测信息可以指示分支的目标地址,以及诸如对应分支指令的指令地址(程序计数器或PC)、与分支有关的一些属性(例如,它是否是间接的、无条件的、函数调用、函数返回等)的其他信息、或用于预测如下所述的分支结果的其他信息。

分支预测器4还包括多目标分支目标预测器146,该多目标分支目标预测器146是一种特殊的分支目标缓冲器,用于预测具有多态性的分支指令的目标地址,即它们的分支目标地址随时间而变化,以便在同一个指令提取地址处执行分支指令的不同实例可能会导致不同的目标地址,这取决于执行分支的前几条指令的结果。BTB 142和多目标间接分支目标预测器146两者都是分支目标预测结构的示例。此外,分支预测器4包括区域表148,区域表148用于将情境标识符压缩为短区域标识符,以用作BTB 142的标记信息。

当提取级6开始对给定提取地址的新提取以从指令高速缓存8提取指令块时,分支预测器4还在BDP 140、BTB 142和多目标分支目标预测器146中查找该提取地址。当BTB 142保存包括由当前提取地址表示的程序计数器地址的分支目标地址的预测分支信息时,该信息从BTB 142读出并由BDP 140限定。查找可以由分支预测控制逻辑150控制。当BDP 140没有采用分支预测时,分支预测控制逻辑150选择当前提取地址的递增版本作为下一个提取地址,该递增版本通过加法器152递增了一定的步长量,以便在下一个周期中使用的下一个提取地址将从当前获取地址按顺序进行。另一方面,如果BDP 140预测分支被采用,则支路预测控制逻辑150选择BTB 142输出的预测支路目标作为下一个提取地址。对于一些指令提取地址,BTB 142可以输出一个属性,该属性指示该地址是指包含先前被检测为多态的分支的指令块,在这种情况下,多态分支属性控制分支预测控制逻辑150,以选择多目标分支目标预测器146输出的分支目标地址作为下一提取地址,而不是BTB 142的输出。多目标分支目标预测器将其预测的目标地址基于由当前指令提取地址标识的当前执行点之前的早期分支的分支历史,而不是基于由独立于分支历史的BTB 142进行的预测。

分支预测控制逻辑150输出的下一提取地址被分配给提取队列144,以便当该地址到达队列的前端时,对应的指令块由提取级6从指令高速缓存8提取。在接下来的处理周期中,下一个提取地址作为当前提取地址输入,以触发对该提取地址的分支预测器4的另一次查找。这个过程一个接一个循环地继续,以便逐步完成正在执行的程序代码。如果在分支单元21处检测到分支预测失误,当分支指令的实际结果与分支预测器4生成的预测结果不同时,则将信号发送回提取级6以重置提取队列并从实际分支目标地址恢复提取,以及基于分支的实际结果更新各种预测结构140、142、146的内容,以增加将来预测正确的可能性。

总之,BTB 142(也称为分支目标地址高速缓存或BTAC)是用于标识分支的预测目标地址的分支预测器4的组件。因此,BTB可以有效地是条目的小缓存,每个条目提供分支位置(分支指令的程序计数器或分支指令地址)、分支的预测目标地址以及可能的其他倾向,例如指定分支是否有条件以及是否表示例如函数调用或函数返回的属性。由于不同的执行情境(例如由处理器2或不同的虚拟机执行的不同进程)可以使用相同的虚拟地址来引用不同的分支,因此为了避免不必要的地址冲突,每个BTB条目可以用情境信息(例如进程标识符和/或虚拟机标识符)进行标记。

图9示出了在不使用区域表148的实施例中的BTB的实现方式。在该示例中,BTB142包括多个条目156,每个条目156包括标记部分158以及数据部分160,标记部分158提供用于在BTB查找中识别该条目是否与当前提取地址相关的标记信息,数据部分160提供包括分支目标地址166和与当前对应分支相关联的任何其他信息168的预测分支信息。在该示例中,标记部分158指定一个或多个执行环境标识符162作为标记信息,该执行环境标识符162标识执行对应分支的执行环境(情境)和与分支相对应的指令提取地址164(指令块的程序计数器包含分支)。数据部分包括分支目标地址166和其它信息168,例如指定分支是否有条件的属性、函数核心、函数返回等。

在一些实现方式中,数据部分160还可以包括分支地址164的最低有效位(尽管图9中未示出)。这在超标量处理器中可能有用,在超标量处理器中,每个周期执行多个指令,在这种情况下,分支预测器4可能需要并行地预测多个指令块,因此每个条目可以映射到一个指令块。指令提取地址的最低有效位可以从标记部分158中排除,以允许块内的任何指令与条目匹配。但是,即使输入了由给定条目表示的块的指令提取地址,如果指令提取地址在与该条目关联的块中出现的最后一个分支的地址之后,则在该指令提取地址之后不会出现分支,因此,与分支相关联的分支预测不应该被执行。因此,通过将分支地址的最低有效位包括在分支目标地址条目156的数据部分160中,这可以使得能够确定在给定在BTB 142中查找的当前指令提取地址的情况下,是否应对由匹配条目表示的预测采取动作。

为BTB提供的缓存可以用不同的方式实现。在一些示例中,高速缓存可以是完全关联的,使得给定分支的分支信息可以置于BTB中的任何位置。然而,在实践中,集合关联缓存实现方式可能更有效,在这种情况下,允许存储给定分支的分支信息的位置可以被限制在特定的集合(基于包含该分支的指令块的指令提取地址来标识),以减少在分支目标缓冲器查找期间必须查找给定提取地址的条目数。

为了能够存储足够的分支信息以提供足够高的性能,典型地,BTB可以具有相对大量的条目,例如以千的量级。然而,在实践中,在给定时间具有存储在BTB中的信息的情境的数量可以小得多,例如最多10个,因为一个执行情境可以为该情境的许多指令缓存分支信息。此外,与给定情境相关联的许多分支指令对于分支指令地址164的更重要部分都可以共享相同的值。这意味着,如果以图3所示的方式实现,则标记信息158可以包括大量冗余信息,因为显式地指示标识符和完整分支指令地址的完整情境可能需要标记158的相对大量位,这增加了BTB 142所需的电路面积,还增加了在BTB 142的查找期间进行标记比较所需的比较器的数量。

如图10所示,为了提高BTB的面积效率,分支预测器4可以使用区域表148将该冗余信息压缩成较短的标记值。在图10的示例中,BTB的每个条目156再次具有标记部分158和数据部分160,并且数据部分160与图9相同。然而,标记部分并非表示BTB 152内的标记158中的执行情境标识符162和完整分支指令地址标记164,而是仅指定分支指令地址的标记部分的低位部分169和区域标识符171,区域标识符171指向指定分支指令地址的情境标识符162和高位部分167的区域表中的对应区域条目170。注意,区域标识符没有在图10中的每个区域条目170中显式地指示,而是从对应区域条目170的索引中隐式地指示(例如,区域表中的第一个条目可以与区域标识符#0相关联,下一个条目与区域标识符#1相关联,依此类推)。区域表148可以比BTB 142小得多,例如具有10到100个条目,例如图10的示例中的32。在查找BTB 142时,在区域表中查找标识当前执行情境和程序计数器的高位(例如,位48到21)的一个或多个情境标识符,以标识对应的区域标识符,然后将区域标识符和程序计数器的标记位的低位(例如,位20到16)用作用于查找BTB 142的标记信息。注意,程序计数器的最低有效位(例如15到0)根本不用于标记中,因为这些是用于索引到集合关联BTB 142的对应集合的位。因此,区域表148允许减小BTB条目156的标记部分158的大小。这利用了这样一个事实,即为了查找BTB 142,不必将当前执行情境与每个其他执行情境区分开,而是需要将当前执行情境与当前在BTB 142中具有分支信息的任何其他执行情境区分开。

然而,如图11所示,当使用区域表148来实现BTB 142时,这可能导致一些错误命中,其中分支预测器4确定来自一个执行情境的分支与由不同执行情境分配的BTB条目中的分支信息匹配。这可以通过比较图10和图11看出,图10和图11在更新区域表148之前和之后显示了一个示例中的BTB的内容。在图10中,BTB当前包括分别位于addr1、addr2、addr3的三个分支的分支信息(分别由条目156-1、156-2、156-3表示)。由条目156-1和156-3表示的分支与由区域表条目#A表示的进程1相关联,而由BTB条目156-2表示的分支与由区域表条目#B表示的进程2相关联。

如图11所示,第三进程随后执行分支指令,并且需要将信息分配到BTB 142,但进程3当前在区域表148中没有分配给它的任何条目。如果所有区域表条目都已被占用,则这要求区域条目170被逐出并重新分配给新进程,因此例如,可以更新先前分配给进程1的区域条目170-1,以便它现在提供与进程3相关联的情境标识符和上位地址。还可以更新分支目标缓冲器条目156-1,以用与进程3相关联的新分支替换先前的分支1。然而,指定更新的区域表条目的区域标识符A的另一BTB条目156-3在此级可能不会无效,并且可以继续提供与先前与进程1相关联的分支3相关联的信息。当区域表有更新时,通常不会提供用于遍历BTB 142以消除这种陈旧分支的失效逻辑,因为它将需要额外的电路,并且如果基于该信息进行预测,则在任何情况下都可以检测到这种不正确的分支信息,因为在执行级18,如果使用来自错误执行情境的分支预测数据,则分支的实际分支结果将不同于预测,并且可以触发所涉及的BTB条目的无效。虽然这可能会导致性能损失,但实际上,由于与重新使用区域表标识符无关的其他原因,可能会发生预测失误,因此这不是一个大问题,因为可以重新使用处理流水线2中的相同预测失误解析逻辑。因此,在使用区域表148的典型BTB实现方式中,具有映射到已更新的区域表条目的区域标识符的条目可以被允许与由不同执行情境分配的陈旧分支信息保持一致,如图11所示的示例156-3所示。

因此,当区域表条目被更新时,BTB 142的旧条目可能会遇到分配给更新的区域表条目的新进程的后续分支指令,并且这可能导致对来自不同执行情境的先前分配的分支信息的错误命中。以前,这只会被认为是性能问题,而不是安全问题。但是,已经认识到,攻击者可以使用BTB的该性质来控制不受攻击者控制的另一个执行情境的推测性执行,以暴露有关由该进程管理的机密数据的信息。如果满足以下两个条件,这是可能的:

·条件1:进程A可以使用由另一进程B在BTB 142中提供的目标地址。

·条件2:进程B可以控制进程A访问的BTB条目的目标。

在图11的上述示例中,由于在不同情境之间重新使用BTB中用作标记信息的区域标识符(条件1),进程3可以使用进程1提供的目标地址。此外,进程1可以控制由进程3访问的BTB条目的目标,因为它可以使用与进程3中的分支共享标记位[20:16]的所需目标地址执行分支,以便将所需目标地址分配给将被进程3命中的BTB 142的条目。更一般地,这些条件可能出现在分支目标预测结构中,其中标记信息158的值可以在多个执行情境之间重新使用。区域表是可能出现这种情况的原因之一,但其他原因可能只是标记信息不取决于当前执行情境(当前执行环境)的标识符。

上述两个条件可以用作如下攻击的基础。首先,控制进程1的攻击者可以执行分支指令,导致BTB条目被分配,从而指定分支目标地址,该地址映射到某个恶意指令序列,该指令序被设计为由受害者进程3执行,以便控制受害者进程3执行可能将机密数据暴露给攻击者的某些操作。在更新区域表并将以前用于攻击者进程1的区域标识符重新分配给受害者进程3之后,受害者进程3然后从与攻击者进程1分配的陈旧BTB条目中的标记数据匹配的地址执行指令,因此,根据攻击者提供的信息进行分支预测。这会导致从攻击者提供的分支目标地址中推测性地执行一系列指令,即攻击者提供的特殊指令,用于通过在非架构状态(例如数据缓存)中留下足迹来诱使受害者进程3暴露机密数据。例如,这些指令可以包括存储器访问指令,这些指令使用攻击者希望访问的机密信息来计算其目标存储器地址。因此,由存储器访问指令加载到高速缓存30、32中的数据可以取决于秘密信息。即使最终识别出分支预测失误,并且从而处理器流水线2的寄存器14中的架构状态被倒回到由受害者进程3预测失误并推测性地执行指令序列之前的点,由错误的推测性执行的指令从存储器加载的数据可能仍然存在于高速缓存30、32中。因此,当执行切换回攻击者进程1时,攻击者可能会尝试访问每个可能的地址,这些地址可能是基于机密数据计算目标地址而产生的。当执行这样的存储器访问时,攻击者进程1可以测量性能数据,例如加载指令的执行时间或计算缓存未命中数,以及通过这样的关于性能的侧通道信息,攻击者可以确定受害者进程3是否将来自给定地址的数据置于缓存中,这可用于推断受害者进程3可访问但攻击者进程1无法访问的机密数据的性质。

要使这种攻击成功,需要满足上述两个条件。图12示出了一种打破第二种条件的技术,即通过使攻击者难以控制分支目标地址来阻止此类攻击,在发生误报命中时,受害者情境将使用分支目标地址。分支目标预测结构142、146提供有:加密电路174,用于基于与当前执行情境相关联的加密密钥对要写入分支目标预测结构的分支信息进行加密;以及解密电路176,用于基于与当前执行情境相关联的加密密钥来解密从分支目标预测结构读取的分支信息。密钥生成电路179(例如,线性反馈移位寄存器或其他随机数生成器)可不时地为每个情境生成密钥。分支目标预测电路178(其可对应于图8的分支预测控制逻辑150以及与分支目标预测结构142、146相关联的任何高速缓存访问电路,用于生成目标标记值并查找分支目标条目以识别给定指令提取地址的分支信息)可以从指令提取地址(例如,使用区域表148)生成目标标记,并且如果分支目标预测结构中有命中,则控制分支目标预测结构输出加密的分支信息。如果存在未命中,并且随后由执行级18执行分支,则在分支目标预测电路的控制下,由加密电路174对该分支的实际分支信息进行加密,并与识别该分支的标记信息相结合地写入分支目标预测结构。加密和解密电路174、176在图12中被示出为单独的电路,但也可以是相同的电路(例如,XOR电路)。

如上所述,加密分支信息的替代方案是加密目标标记的一部分,在这种情况下,可能不需要解密电路176。

图13示出了应用加密/解密时区域表148和分支目标缓冲器142的内容的示例。在此示例中,每个区域表条目170存储与由该区域表条目170表示的对应执行情境相关联的加密密钥180。每次更新对应的区域表条目170时,通过线性反馈移位寄存器(LFSR)或其它随机数生成器179,密钥180可以被生成为随机数或伪随机数,以便对于重新使用相同区域表条目的不同执行情境而言密钥是不同的。当对BTB 142的查找未命中时,提取将在当前提取地址之外继续顺序进行,但如果在执行级18执行从提取的指令块中的分支,则确定实际的分支信息,并可将其分配给BTB 142的新分支条目156。在分配BTB的新条目时,使用存储在区域表148中的用于当前执行情境的对应加密密钥180来加密分支信息。可选地,标记信息158也可以使用密钥加密。但是,标记的加密不是必需的。在一些实施例中,存储为预测的分支数据160的任何附加信息168可以不被加密,因此只有分支目标信息可以被加密,但是如果所有分支信息160都被加密,则安全性可以更强。

在生成BTB 142中的命中(使得标记信息158与针对当前指令提取地址生成的目标标记匹配)的分支预测查找上,并非简单地直接从BTB 142输出分支信息160,而是首先使用与由区域表148定义的当前执行情境相关联的对应加密密钥180来解密分支信息,然后由分支预测逻辑150使用解密的分支信息来得出下一个提取地址。用于保护BTB情境的加密和解密可以使用密钥加密或使用公钥加密来实现。由于分支目标地址预测可能在处理流水线的关键定时路径上,因此可以使用相对轻量级的加密方法(例如,使用密钥180的分支信息的XOR),而不是例如使用更复杂的多轮加密。

如图14所示,该技术可以防止上述攻击的第二种情况,因为通过使用与分配该信息的执行情境相关联的密钥加密分支信息,然后,如果从新的执行情境访问同一BTB条目156-3,然后使用新的执行情境的密钥解密,这将生成垃圾信息,而不是原始情境分配的目标地址,因此攻击者很难将恶意目标推送到BTB上并控制从已知位置执行恶意代码的不同执行情境。例如,在图14中,控制进程1的攻击者分配了某个条目156-3,然后区域条目170-1被更新为指向进程3,如图11所示。在更新区域表时,为区域表条目170-1生成新密钥180,因此,如果随后在从新执行情境3执行期间BTB条目156-3中有命中,则使用新密钥对分支信息的解密将不会产生与最初由进程1提供的分支目标地址相同的分支目标地址。分支目标信息中的旧信息由过时的密钥(密钥1在区域表中不再可用)加密,而区域表条目#A具有新密钥。要创建上述攻击类型以控制受害者进程3跳转到恶意目标地址T,攻击者需要提供不同的目标地址T',以便Dec(Enc(T',key1),New key)==T,如果为加密密钥提供足够的位,则攻击者不可能不知道旧密钥和新密钥就能够预测强制受害者进程3分支到T所需的T'值。

虽然图13和14示出了与各个执行情境相关联的密钥被缓存在区域表148中的示例,但这不是必需的,并且还可以由单独的存储结构来存储与每个执行情境相关联的密钥。

在图13和14的示例中,密钥是一次性使用的动态密钥,因为每次发生区域表替换时都会更新它。这会使攻击更加困难,因为攻击者需要识别密钥并利用它在密钥使用周期结束之前读取机密信息,通过在更新密钥前的可用时间内观察BTB的一系列分支预测结果,降低了攻击者能够获取关于密钥的信息的概率。然而,在其他实现方式中,可以使用每个执行情境的静态密钥,而不是分配给区域表条目的动态密钥,以便在情境的整个使用周期内,对给定的执行情境使用相同的密钥。在这种情况下,为每个情境生成密钥以减少存储需求的一种有效方法可能是提供在所有执行情境之间共享的公共密钥,但是通过将公共密钥与和情境关联的情境标识符散列,从该公共密钥为每个情境得出特定情境的密钥。

图15和16示出了使用多目标间接分支预测器146的示例。对于目标地址在程序期间不时变化的多态分支,为每个分支程序计数器地址提供固定目标地址的BTB 142可能不能提供可靠的预测,因此可以提供单独的预测结构146。对于这种多态分支,可以更新BTB142中的分支信息以提供指示BTB的预测目标地址在将来不应被使用的指示符,而应该使用多目标间接分支预测器146来预测此类分支的分支目标地址。多目标间接分支预测器包括多个分支目标条目190,每个条目包括指示为分支预测的目标地址的信息和基于先前分支的结果的历史的标记信息194(例如,指示是否未采取或采取先前分支的位序列)。因此,可以在多目标间接分支预测器146中为同一分支指令分配多个条目,这些条目对应于通向该分支的不同分支历史。标记信息194还取决于包含分支的指令块的指令提取地址。与BTB142不同,标记信息不包括对应的执行情境的情境标识符或程序计数器地址的高位。由于与多目标间接分支预测器46中的每个条目相关联的标记独立于当前执行情境,这再次意味着标记值可以在多个执行情境之间重新使用。如果控制进程2的攻击者知道用于访问受害者进程1中特定间接分支的访问模式(分支历史记录),则攻击者可以通过推送由已知分支历史模式(如图14中的标记A)标记的恶意目标地址来利用与上述问题类似的安全问题,该地址将由进程1访问。这里的假设是,攻击者可以故意预测多目标间接分支预测器146中的标记冲突。

如图16所示,为了防止该弱点被利用,区域表的加密密钥180还可用于加密多目标间接分支预测器146的内容。因此,当将分支信息分配给多目标间接分支预测器146的条目190时,从区域表中读取当前执行情境的加密密钥180,并且加密密钥180用于加密分支信息192并可选地加密对应条目190的标记194。在查找多目标间接分支预测器146时,使用当前执行情境的加密密钥180来解密分支信息192,因此,如果当前执行情境遇到由前一个执行情境分配的条目,则使用与用于加密数据的密钥不同的密钥进行解密将导致垃圾数据被输出,与前一个执行情境最初提供的地址不同。

因此,即使在不使用区域表148的实现方式中,如果分支预测器使用多目标间接分支预测器146或使用独立于当前执行情境的标记的另一预测结构,则对分支预测器的内容进行加密可以有助于避免攻击者使用分支预测结构中的误报命中来控制受害者进程执行恶意代码(旨在提供机密数据的可见性)。

图17是示出在分支目标预测结构142、146中执行分支目标预测查找和更新分支信息的方法的流程图。应理解,图17未示出可执行的分支预测的所有特征(例如,未示出BDP140的分支方向预测,如在预测失误时停止执行推测性执行的指令和倒回处理器状态所采取的步骤一样,这些步骤可以如任何已知的分支预测技术一样执行)。

在步骤200,为要对其执行分支预测器的查找的指令提取地址获得目标标记。目标标记的特殊性质将取决于实现分支预测器结构的方式。例如,对于如上所述使用区域表148实现的BTB,可以基于当前执行情境的情境标识符和指令提取地址的一部分来通过区域表确定目标标记。下面将参照图18更详细地讨论这种方法。替代地,对于多目标间接分支预测器146,目标标记基于指令提取地址和先前采取/未采取的结果的历史。还可以使用其他方法生成目标标记。

在步骤202,分支预测控制逻辑150控制分支目标预测结构142、146以查找分支目标条目156、190的子集。例如,条目的子集可以基于指令地址来选择,或者在完全关联的缓存实现方式中,条目的子集可以包括分支目标预测结构的所有条目。分支预测电路确定所选择的条目集合中的任何一个是否指定与在步骤200为给定分支指令获得的目标标记相对应的标记信息。如果分支目标条目的子集中没有一个指定与目标标记对应的标记信息,则在分支目标预测结构中查找未命中,并且分支预测控制逻辑150从加法器152输出当前提取地址的递增版本作为下一个提取地址。一旦对应的指令块被解码,解码级10在步骤203确定该块中的任何指令是否是分支指令。如果不是,则方法结束,因为不需要更新任何分支信息。如果提取/解码的指令块包括分支指令,则在步骤204,从分支目标条目的查找子集中选择受害者条目。例如,如果分支目标条目的一个子集当前无效,则可以选择无效条目作为受害者条目。如果分支目标条目的所有子集当前都有效,则会驱逐其中一个有效条目,以便为新的分支信息让路。任何逐出策略都可以用于选择受害者条目(例如轮询或最近使用的最少)。

在步骤206,一旦由执行级18为给定分支指令解析了实际分支信息,则使用与当前执行情境相关联的加密密钥来加密实际分支信息。分支信息可以包括用于得出或指定分支目标地址的信息,并且还可以包括如上所述的关于分支的其他信息。加密密钥可以从区域表148或从单独的存储设备中读取。在某些情况下,目标标记也可以加密。在步骤208,基于目标标记确定的加密分支信息和(可选地加密)标记信息被写入在步骤204选择的受害者条目。

如果在步骤202,在分支目标预测结构142、146中有命中,并且分支目标条目的查找子集之一指定了对应于目标标记的标记信息,然后在步骤210,使用与当前执行情境相关联的加密密钥来解密存储在该匹配条目中的分支信息。在步骤212,将解密的分支信息作为给定分支指令的预测而输出。从解密的分支信息得出的分支目标地址被分配到提取队列144以控制指令的后续提取,并且由解密的分支信息指定的分支指令的其他预测属性可以控制处理流水线的其他方面。一旦分支到达执行级,就为分支指令确定实际的分支信息,并且可以确定预测是否正确。如果存在预测失误,则可以从流水线刷新分支指令之后的指令,并向提取级6发送信号,以恢复从分支的正确目标地址(如果已采用分支)或从分支的指令地址之后的顺序地址(如果不应该采用分支)中提取指令。此外,还可以更新分支预测器4,以基于实际分支结果来校正存储在分支目标预测结构142、146中的分支信息,使得下次对相同指令提取地址的后续预测更可能是正确的。

图18是更详细地示出在图17的步骤200处获得目标标记的方法的流程图,其中分支目标预测结构是使用区域表148压缩每个条目的标记部分的BTB 142。在步骤220,基于与当前指令提取地址相关联的分支情境信息来查找区域表148。例如,分支情境信息可以包括标识执行分支的执行情境的一个或多个情境标识符,并且还可以包括指令提取地址的上分支指令地址位。在步骤222,分支预测控制电路确定区域表是否包括匹配的区域表条目190,其中存储在条目190中的分支情境信息与为给定分支指令提供的分支情境信息匹配。如果是,则在区域表中存在命中,并且在步骤224,将目标标记确定为包括与匹配的区域表条目相关联的区域ID和指令地址的标记部分的一个或多个低位(例如图13的示例中的位20:16)。同样在步骤226,通过从匹配的区域表条目读取密钥,从区域表返回与当前执行情境相对应的加密密钥。

如果在步骤222,查找未命中区域表,以致没有具有与为当前指令提取地址提供的分支情境信息匹配的分支情境信息的匹配区域表条目,则在步骤230,选择受害者区域表条目,例如尚未映射到特定情境的无效区域表项,或者如果不存在无效条目,则要逐出的有效区域表条目。同样,可以使用LRU或轮询等逐出策略来选择受害者区域表条目。在步骤232,更新存储在受害者区域表条目中的加密密钥180。例如,可以触发线性反馈移位寄存器或其他随机或伪随机数生成器来输出新的随机或伪随机数。更新的加密密钥将被写入受害者区域表条目。同样在步骤234,在步骤220为给定分支指令确定的分支情境信息被写入在步骤230选择的受害者区域表条目。与受害者区域表条目相关联的区域标识符已映射到新的执行情境,并且先前映射到该区域标识符的BTB 142的任何条目现在如果从当前执行情境中查找,则可能返回误报命中,因为它们是由先前的执行情境分配的从而共享相同的区域标识符。然而,通过在步骤232更新加密密钥,则那些误报条目的加密情境将不会以先前将这些条目分配到BTB 142中的执行情境所期望的方式表现,因此这防止恶意进程能够控制由另一个要映射到攻击者选择的特定地址的情境。在步骤234之后,图18的方法继续到步骤224,然后以与区域表查找生成命中相同的方式执行步骤224和226,以便返回用于随后查找分支目标预测结构的目标标记并返回加密密钥。在完成图18之后,生成的标记随后可用于根据图17的步骤202的分支目标预测查找。

总之,基于与执行情境相关联的加密密钥对分支目标预测结构中的分支信息进行加密,这导致将分支信息分配给分支目标预测结构。在查找分支目标预测结构时,当命中时,使用与当前执行情境关联的加密密钥解密来自匹配条目的分支信息。这对于使用标记信息的分支目标预测结构非常有用(其中,值可在多个执行情境中重新使用),因为加密和解密使得攻击者更难通过利用分支目标预测结构中的条目中从不同情境到分配该条目的情境的误报命中来从另一个执行情境获取对敏感数据的访问。

应该理解,图8到图18中所示的具体示例只是实现分支预测器的一种方法。更一般地,在生成新的分支预测条目时,分支预测器的部分输入可以基于与当前执行情境相关联的值进行编码,并且在查询给定查询输入的分支预测器时,可以使用与触发查询的执行环境相关联的值对查询输入进行编码,或者可以使用与最新执行环境相关联的值对分支预测器的输出进行反向编码或解码,或者这两者都使用,以使攻击者更难猜测分支预测器中必须训练以控制受害进程的状态,以在不同执行环境之间使用分支预测器中的错误命中来控制指向特定地址的分支。

以下条款列出了进一步的示例布置:

(1)一种数据处理装置,包括:

分支预测电路,适于存储与指令流相关的至少一个分支预测状态条目;

输入电路,用于接收至少一个输入以生成新的分支预测状态条目,其中,至少一个输入包括多个位;以及

编码电路,适于基于与正在执行指令流的当前执行环境相关联的值来对多个位中的至少一些位进行编码。

(2)根据第(1)条的数据处理装置,其中

编码电路适于通过使用密钥对至少一些位进行编码,其中密钥基于正在执行指令流的当前执行许可。

(3)根据第(2)条的数据处理装置,其中

编码电路适于通过使用密钥重新布置多个位中的至少一些位来对多个位中的至少一些位进行编码。

(4)根据第(2)条的数据处理装置,其中

编码电路适于通过使用密钥切换多个位中的至少一些位来对多个位中的至少一些位进行编码。

(5)根据第(2)条的数据处理装置,其中

编码电路适于通过使用密钥执行散列函数来对多个位中的至少一些位进行编码。

(6)根据第(5)条的数据处理装置,其中

散列函数是可逆的。

(7)根据第(2)条的数据处理装置,其中

编码电路适于通过使用密钥执行XOR运算来对多个位中的至少一些位进行编码。

(8)根据第(5)条的数据处理装置,其中

散列函数是单向散列函数。

(9)根据第(2)至(8)条中任一条的数据处理装置,其中

所述至少一个输入包括分支指令的指令地址的指示;

分支预测电路适于接收包含分支指令的指令地址的指示的查询值,并使用该查询值执行搜索;并且

编码电路适于在搜索之前使用密钥对查询值的至少一些位进行编码。

(10)根据第(9)条的数据处理装置,其中,编码电路适于重新计算与当前执行环境相关联的密钥的值,并且使用重新计算的密钥的值对查询值的多个位中的至少一些位执行编码操作。

(11)根据第(2)至(10)条中任一条的数据处理装置,其中

所述至少一个输入包括分支指令的目标地址的指示;

分支预测电路适于接收包含分支指令的指令地址指示的查询值,并使用该查询值执行搜索;以及

该装置包括解码电路,以响应于接收到查询值而对输出的分支预测电路的输出执行解码。

(12)根据第(11)条的数据处理装置,其中

解码包括重新计算密钥的值,然后执行解码函数。

(13)根据第(1)至(12)条中任一条的数据处理装置,其中

密钥进一步基于指示以下各项的值的任何组合:异常级别、特权级别、ASID、VMID、NS、物理处理器核数和执行指令流的逻辑核数以及一个或多个软件可写寄存器。

(14)根据第(1)至(13)条中任一条的数据处理装置,其中

密钥进一步基于先前生成的随机数。

(15)根据第(14)条的数据处理装置,其中

先前生成的随机数包括以下项中的至少一者:

每个逻辑处理器的元素;

每个物理处理器的元素;以及

系统范围元素。

(16)根据第(15)条的数据处理装置,其中

先前生成的随机数中的至少一部分是在启动时生成的。

(17)根据第(14)至(16)条中任一条的数据处理装置,其中

先前生成的随机数中的至少一部分是伪随机的。

(18)根据第(1)至(17)条中任一条的数据处理装置,其中,密钥基于应用于至少一个密钥输入参数的单向转换,包括与当前执行环境或当前执行许可相关联的至少一个值。

(19)根据第(1)至(17)条中任一条的数据处理装置,其中

指令流可以在适于以最低执行许可执行的多个执行环境中的一个中执行;

编码电路适于进一步基于执行指令流的多个执行环境中的一个的标识符对多个位中的至少一些位进行编码。

(20)根据第(1)至(19)条中任一条的数据处理装置,包括:

监测器电路,适于当指令流以推测状态执行时,检测指令提取故障和指令解码故障的任何组合的比率;以及

响应于比率增加超过预定阈值而引起中断或产生错误响应。

(21)根据第(20)条的数据处理装置,其中

预定阈值至少比前一比率高20%。

(22)一种数据处理装置,包括:

用于存储与指令流相关的至少一个分支预测状态条目的单元;

用于接收至少一个输入以生成新的分支预测状态条目的单元,其中,至少一个输入包括多个位;以及

用于基于指示正在执行指令流的当前执行许可的值来对所述至少一个输入的多个位中的至少一些位进行编码的单元。

(23)一种方法,包括:

存储与指令流相关的至少一个分支预测状态条目;

接收至少一个输入以生成新的分支预测状态条目,其中,至少一个输入包括多个位;以及

基于指示正在执行指令流的当前执行许可的值来对所述多个位中的至少一些位进行编码。

(24)一种装置,包括:

处理电路,用于在多个执行情境中的一个中执行数据处理;

分支目标预测结构,包括多个分支目标条目,每个分支目标条目指定指示至少一个分支目标地址的分支信息;

加密电路,用于使用与当前执行情境相关联的加密密钥对要写入分支目标预测结构的分支信息进行加密;以及

解密电路,用于使用与当前执行情境相关联的加密密钥来解密从分支目标预测结构读取的分支信息。

(25)根据第(24)条的装置,其中每个分支目标条目指定标记信息;并且

该装置包括分支目标预测电路,用于对与当前执行情境相关联的指令提取地址执行分支目标预测查找,分支目标预测查找包括确定分支目标预测结构的分支目标条目的子集中的任何一个是否指定与针对指令提取地址确定的目标标记相对应的标记信息。

(26)根据第(25)条的装置,其中目标标记的值在多个执行情境中的多个中能够重新使用。

(27)根据第(25)和(26)条的装置,其中,当分支目标条目的子集中没有一个子集指定与目标标记对应的标记信息,并且指令提取地址指定包含分支指令的至少一条指令的块时,加密电路被配置为使用与当前执行情境相关联的加密密钥来加密分支指令的实际分支信息,分支目标预测电路被配置为分配分支目标预测结构的分支目标条目,该分支目标条目指定加密的分支信息并指定与目标标记相对应的标记信息。

(28)根据第(25)至(27)条中任一条的装置,其中当分支目标条目的子集之一指定与目标标记对应的标记信息时,解密电路被配置为使用与当前执行情境相关联的加密密钥来解密存储在所述条目子集中的分支信息,分支目标预测电路被配置为将解密的分支信息输出为指令提取地址的预测分支信息。

(29)根据第(24)至(28)条中任一条的装置,其中加密密钥包括针对当前执行情境固定的静态密钥。

(30)根据第(29)条的装置,其中,当前执行情境的静态密钥取决于在多个执行情境中的至少两个情境之间共享的公共密钥和特定于当前执行情境的至少一个情境标识符。

(31)根据第(24)至(30)条中任一条的装置,其中加密密钥包括对于当前执行情境可变的动态密钥。

(32)根据第(31)条的装置,包括密钥生成电路,用于为当前执行情境生成更新的加密密钥。

(33)根据第(25)条的装置,其中,当分支目标条目的子集中没有一个子集指定与目标标记相对应的标记信息,并且指令提取地址指定包含分支指令的至少一个指令的块时,加密电路被配置为使用与当前执行情境相关联的加密密钥来加密目标标记,分支目标预测电路被配置为将加密的目标标记指定为所分配的分支目标条目的标记信息;并且

在分支目标预测查找中,解密电路被配置为解密分支目标条目的每个子集的标记信息,并且分支目标预测电路被配置为将解密的标记信息与目标标记进行比较。

(34)根据第(24)至(33)条中任一条的装置,其中,分支信息还指示除分支目标地址之外的至少一条分支信息。

(35)根据第(25)条的装置,其中,分支目标预测电路被配置为根据与当前执行情境相关联的至少一个情境标识符来确定目标标记。

(36)根据第(25)条的装置,包括包含多个区域条目的区域表,每个区域条目将分支情境信息映射到区域标识符,区域标识符包含比分支情境信息更少的位,分支情境信息包括与对应的执行情境相关联的至少一个情境标识符。

(37)根据第(36)条的装置,其中用于指令提取地址的目标标记包括由区域表映射到与指令提取地址相关联的分支情境信息的目标区域标识符。

(38)根据第(36)和(37)条中任一条的装置,其中每个区域条目指定与对应的执行情境相关联的加密密钥。

(39)根据第(36)至(38)条中任一条的装置,其中当由区域表的给定区域条目提供的映射被更新时,分支目标预测电路被配置为在映射更新之后触发与执行情境相关联的加密密钥的更新,该执行情境与给定区域条目相关联。

(40)根据第(36)至(39)条中任一条的装置,其中给定区域条目的分支情境信息还包括指令提取地址的一部分,对于该部分,先前的分支目标预测查找使得将给定区域条目分配给区域表。

(41)根据第(25)条的装置,其中,分支目标预测电路被配置为根据指令提取地址和在指令提取地址处的指令之前的先前分支指令的分支结果的历史来确定目标标记。

(42)一种装置,包括:

用于在多个执行情境中的一个中执行数据处理的单元;

用于存储分支目标预测结构的分支目标条目的单元,每个分支目标条目指定指示至少一个分支目标地址的分支信息;

用于使用与当前执行情境相关联的加密密钥对要写入用于存储的单元的分支信息进行加密的单元;以及

用于使用与当前执行情境相关联的加密密钥来解密从用于存储的单元读取的分支信息的单元。

(43)一种方法,包括:

在多个执行情境中的一个中执行数据处理;

存储分支目标预测结构的分支目标条目,每个分支目标条目指定指示至少一个分支目标地址的分支信息;

使用与当前执行情境相关联的加密密钥对要写入分支目标预测结构的分支信息进行加密;以及

使用与当前执行情境相关联的加密密钥来解密从分支目标预测结构读取的分支信息。

在本申请中,词语“被配置为”用于表示装置的元件具有能够执行所定义的操作的配置。在这种上下文中,“配置”是指硬件或软件的互连布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者可以对处理器或其他处理设备进行编程以执行功能。“被配置为”并不意味着需要以任何方式改变装置元件以提供定义的操作。

尽管本发明的说明性实施例已经参照附图在本文中详细描述,但是应当理解,本发明不限于那些精确的实施例,并且本领域技术人员可以在不脱离如所附权利要求所限定的本发明的范围和精神的情况下做出各种改变和修改。

49页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:界面显示方法及控制终端

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!