首页> 中国专利> 用于存储器完好性检查的完好性树

用于存储器完好性检查的完好性树

摘要

一种装置(4)包括存储器访问电路(12),来控制对存储在存储器中的数据的访问;以及存储器完好性检查电路(20),来利用完好性树(26)验证存储在存储器中的数据的完好性,在该完好性树(26)中由指针提供父节点和子节点之间的关联。这帮助了降低树的存储器占用。

著录项

  • 公开/公告号CN112639789A

    专利类型发明专利

  • 公开/公告日2021-04-09

    原文格式PDF

  • 申请/专利权人 ARM有限公司;

    申请/专利号CN201980057094.7

  • 申请日2019-10-17

  • 分类号G06F21/78(20060101);G06F21/64(20060101);

  • 代理机构11258 北京东方亿思知识产权代理有限责任公司;

  • 代理人杨佳婧

  • 地址 英国剑桥

  • 入库时间 2023-06-19 10:32:14

说明书

技术领域

本技术涉及数据处理的领域。更具体而言,其涉及存储器安全性。

背景技术

一些数据处理系统可能需要运行涉及不应当被暴露给潜在攻击者的秘密或敏感信息的处理的软件。然而,提供足够容量来将所有这种信息存储在不能被攻击者篡改的存储器中可能是不可行的,因此有时可能有必要将一些敏感信息导出到易受攻击的存储器。例如,虽然存储在芯片上的数据可能相对于攻击是安全的,但片上存储器存储可能是有限的并且因此可能需要将数据写入到片外的外部存储器。攻击者可能够从外部存储器读取数据或者在数据被传递到外部存储器时解读数据,和/或篡改存储在外部存储器中的数据值以尝试在这种外部存储的数据随后被带回到处理系统中时引起不正确的行为。

为了提供保密性,存储到可能不安全的存储器的数据可在被传递到存储器之前被加密并且在被从存储器读取时被解密。然而这可能不解决篡改的风险。为了针对篡改进行保护,可以提供完好性检查来在数据被从存储器读取时检查自从数据被从存储器存储时起其没有被修改。

发明内容

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

存储器访问电路,来控制对存储在存储器中的数据的访问;以及存储器完好性检查电路,来利用包括多个节点的完好性树来验证存储在所述存储器中的数据的完好性,所述多个节点包括:至少一个叶节点,所述至少一个叶节点包括至少一个叶条目,所述至少一个叶条目包括用于存储在所述存储器中的数据的相应地址块的验证的至少一个完好性标签;以及至少一个分支节点,所述至少一个分支节点包括至少一个分支条目,所述至少一个分支条目包括:用于指定所述分支节点的子节点的地址的指针,其中所述子节点是所述完好性树的叶节点或者进一步分支节点,以及至少一个完好性检查值,用于所述子节点的相应分支条目或者叶条目的验证。

至少一些示例提供了一种方法,包括:控制对存储在存储器中的数据的访问;并且利用包括多个节点的完好性树来验证存储在所述存储器中的数据的完好性,所述多个节点包括:至少一个叶节点,所述至少一个叶节点包括至少一个叶条目,每个叶条目包括用于存储在所述存储器中的数据的相应地址块的验证的至少一个完好性标签;以及至少一个分支节点,所述至少一个分支节点包括至少一个分支条目,每个分支条目包括:用于指定所述分支节点的子节点的地址的指针,其中所述子节点是所述完好性树的叶节点或者进一步分支节点,以及至少一个完好性检查值,用于所述子节点的相应分支条目或者叶条目的验证。

至少一些示例提供了一种计算机程序,用于控制主机数据处理装置来提供用于指令的执行的指令执行环境;该计算机程序包括:存储器访问程序逻辑,来控制对所述指令执行环境的仿真地址空间的访问;以及存储器完好性检查程序逻辑,来利用包括多个节点的完好性树来验证存储在所述仿真地址空间内的地址处的数据的完好性,所述多个节点包括:至少一个叶节点,所述至少一个叶节点包括至少一个叶条目,所述至少一个叶条目包括用于存储在所述存储器中的数据的相应地址块的验证的至少一个完好性标签;以及至少一个分支节点,所述至少一个分支节点包括至少一个分支条目,所述至少一个分支条目包括:用于指定所述分支节点的子节点的地址的指针,其中所述子节点是所述完好性树的叶节点或者进一步分支节点,以及至少一个完好性检查值,用于所述子节点的相应分支条目或者叶条目的验证。

一种存储介质可存储上述的计算机程序。该存储介质可以是非暂态介质。

附图说明

根据结合附图阅读的对示例的以下描述,将清楚本技术的更多方面、特征和优点,附图中:

图1示意性图示了包括存储器完好性检查电路的装置的示例;

图2图示了用于完好性检查中的完好性树的示例;

图3图示了完好性树被实现为默克尔树的替换方案,该默克尔树占用存储器的连续区域,该连续区域的大小取决于要针对篡改进行保护的被保护区域的大小;

图4示出了一种示例,其中完好性树被构造有用于提供树的父节点与子节点之间的关联的指针;

图5示出了使用存储在地址空间的若干个非连续地址区域中的完好性树来保护在地址空间内也非连续的若干个其他地址区域的示例;

图6示出了将树实现为散列的树的第一示例;

图7示出了将树实现为计数器的树的第二示例,所述计数器被用作用于计算本身未被该树保护的相应散列的临时数;

图8示出了表示图7的第二示例中的计数器的两个示例;

图9是示出用于在完好性树的叶节点处更新完好性标签的流程的流程图;

图10是示出用于利用完好性树来验证数据的给定地址块的完好性的方法的示例的流程图;

图11是示出用于向完好性树添加额外级别的方法的流程图;并且

图12示出了可以使用的仿真器示例。

具体实施方式

一种装置可具有用于控制对存储在存储器内的数据的访问的存储器访问电路,以及用于验证存储在存储器中的数据的完好性的存储器完好性检查电路。例如,完好性验证可用于检测攻击者篡改存储在存储器中的数据。例如,存储器可以是在与包括存储器访问电路和存储器完好性检查电路的集成电路分开的集成电路上的片外存储器。

完好性验证可取决于存储的数据和由存储器完好性检查电路维护的完好性元数据之间的比较。例如,当将数据写入到存储器时,存储器完好性检查电路可基于存储到存储器的数据的属性来生成完好性元数据,然后当从存储器读取数据时,先前存储的完好性元数据可用于检查自从数据被写入时起数据是否变化了。然而,这种完好性元数据可要求大量的存储空间来提供用于保护要求的地址范围上的数据的所有元数据。通常,在不易受攻击者影响的存储单元(例如与存储器访问电路在同一集成电路上的片上存储器)中保存数据的容量可能是有限的。因此,在实践中,可能需要将完好性元数据的至少一部分存储到与存储要保护的数据相同的存储器。这可能使得元数据易受攻击,因此完好性元数据在其被读取时其本身可经受完好性验证,其方式类似于感兴趣的实际数据,基于的是也可被存储在存储器中的额外元数据。为了管理对于感兴趣的数据和验证该数据所要求的每条完好性元数据的一系列完好性检查,将元数据表示为包括若干个节点的完好性树可能是有用的,其中根节点可用于验证作为根节点的子节点的若干个分支节点,这些分支节点的每一者随后可用于验证作为这些早先分支节点的子节点的进一步分支节点,依此类推,直到达到可用于存储在存储器中的数据的相应地址块的验证的叶节点为止。

在用于实现完好性树的一种方案中,地址空间的单个连续块可被定义为要利用完好性树来保护其数据的受保护区域,并且地址空间的另一连续块被预先预分配来容纳将包括充足的节点以能够保护整个受保护地址范围的完好性树。利用此方案,存储给定树节点的地址可根据完好性树的基础地址和要利用树来验证其完好性的受保护区域中的数据块的目标地址来计算。

然而,此方案可遭遇若干个问题。由于存储器完好性树必须被存储到地址空间的单个连续块,因此这往往会限制其内可由完好性树来保护数据的受保护区域的最大大小,因为要找到还没有被分配用于其他目的的大的连续地址块来存储树可能是困难的。因此在实践中,对于此方案,通常将受保护地址范围的跨度限制到一定大小,例如大约128兆字节。将保护限制到特定的地址范围可对在处理器上运行的操作系统造成严重限制,因为高效的存储器管理可要求自由地选择用于存储受保护应用页或虚拟机页的物理位置的能力。

另一问题是由于完好性树可被预先预分配来容纳其内可保护数据的整个潜在受保护地址范围,于是即使操作系统可选择将敏感数据分配到该受保护地址范围内的页的子集,也已经招致了在整个受保护地址范围上实现完好性树的完全存储器占用,从而操作系统不可能将其他数据分配到为完好性树分配的地址空间的连续部分,即使完好性树中只有一小部分节点实际被定义为提供用于验证受保护地址范围内的特定块的完好性的完好性元数据。

在下文论述的技术中,存储器完好性检查电路利用使用指针来提供树的分支节点与其子节点之间的关联的完好性树来验证存储在存储器中的数据的完好性。因此,树可包括至少一个叶节点,该至少一个叶节点包括至少一个叶条目,该至少一个叶条目包括用于存储在存储器内的数据的相应地址块的验证的至少一个完好性标签,并且树可包括至少一个分支节点,该至少一个分支节点包括至少一个分支条目。分支条目包括用于指定分支节点的子节点的地址的指针(其中该子节点是完好性树的叶节点或者进一步分支节点),并且还指定至少一个完好性检查值,用于该子节点的相应分支条目或者叶条目的验证。

使用这种指针来提供分支节点与其子节点之间的关联可能被认为是反直觉的,因为我们可能预期指针将会要求每个分支条目内的额外存储容量,而且对指针的使用将会意味着遍历树以定位用于验证存储在存储器中的数据的给定块的相关叶条目将会要求遵循从树的根向下直到叶节点的指针的踪迹,从而与可以基于要验证的数据的块的地址而直接索引到叶节点的方案相比,为了定位叶节点可招致一些额外的时延。然而,发明人认识到,通过将这种时延隐藏在与其他操作相关联的时延之下可以减轻这种时延,因此不是像可预期的那么严重的问题。

另一方面,通过使用指针来提供分支节点与其子节点之间的关联,这允许了完好性树保护可能很大的存储器范围(甚至是跨越提供的整个物理存储器的范围),同时只招致为保护要被该树保护的数据的实际个体地址块所需要的若干个完好性树节点分配空间的存储器分配成本,而不是这些被保护的地址块可位于其上的潜在被保护范围。这大幅降低了维护存储器完好性树的开销,并且简化了使用该树的操作系统的设计,因为操作系统可自由地将要保护的数据以及完好性树的节点分配到存储器空间中的任何期望地址,而不被限于有限地址范围或者限于一定连续块内的地址。

如上所述,存储器中的给定数据块的验证也可涉及基于其父节点对完好性树的若干个节点的验证。当要验证给定的分支条目时,在给定的分支条目的父节点中指定的完好性检查值可用于验证该给定分支条目的内容,包括指针。因此,不仅可以验证由分支条目指定的(一个或多个)完好性检查值,而且也可以验证指针。这针对如下情况进行了保护:攻击者篡改由给定分支条目指定的指针,以尝试规避完好性检查。

存储器完好性检查电路可支持完好性树被配置为包括一个或多个叶节点,该一个或多个叶节点指定与存储器地址空间内的地址块的非连续群组相对应的叶条目,对于该存储器地址空间,地址块的非连续群组之间的地址块的至少一个居间群组未被该完好性树保护。因此,其完好性被完好性树保护的受保护地址块不需要被存储在存储器的连续块内,这使得操作系统的开发简单得多,因为操作系统可将其敏感数据分配到其喜欢的任何物理地址。

另外,存储器完好性检查电路可支持完好性树被配置为包括存储在存储器地址空间内的地址块的两个或更多个非连续群组处的节点,对于该存储器地址空间,地址块的非连续群组之间的地址块的至少一个居间群组包括以下各项的至少一者:未分配的存储器;以及被分配用于存储除了所述完好性树以外的数据的存储器。同样,这简化了对操作系统的存储器分配的管理,并且也意味着完好性树的存储器占用可与实际被树保护的非连续定位地址块的大小成比例,而不是像上述方案中那样与可能被树保护的连续区域的大小成比例。

响应于指定存储在存储器中的数据的给定地址块的目标地址的请求,存储器完好性电路可触发对完好性树的从根节点到包括与该给定地址块相对应的完好性标签的给定叶节点的自上而下遍历。这与上文论述的方案形成对比,在上文论述的方案中,树通常将被以自下而上的方式遍历,从叶节点开始,然后从父节点步进到子节点,直到达到根节点为止。

在完好性树的自上而下遍历中,遍历可从父节点步进到子节点,遵循每个分支节点中的指针的踪迹。因此,遍历可涉及在从根节点到给定叶节点的路径上的完好性树的若干个父-子节点对。对于包括给定父节点和给定子节点的给定父-子节点对,存储器完好性检查电路可触发读取操作来从基于由给定父节点的相应父条目所指定的指针和基于给定地址块的目标地址所识别的偏移量所计算的存储器地址读取给定子节点的相应子条目。另外,存储器完好性检查电路可执行验证操作来基于在给定父节点的相应父条目中指定的相应完好性检查值来验证相应子条目的完好性。

我们可预期这个自上而下遍历将会增大完好性检查的时延,因为在能够读取树的下一级别处的子节点之前,将需要读取父节点中的指针。然而,通过与从自上而下遍历的先前步骤对父条目执行验证操作并行地执行读取操作来定位子条目,可以减轻这个额外的时延。也就是说,在基于给定父节点自己的父节点(即,子节点的祖父节点)中指定的相应完好性检查值验证相应父条目的完好性的同时,读取给定子节点的相应子条目的读取操作可被并行地触发以在父节点的验证成功的情况下降低定位子节点的延迟。

存储器完好性检查电路可支持树的分支节点在分支条目内指定空指示符。空指示符可指示出落在该分支条目下的任何地址尚未被分配为需要被存储器完好性树保护,因此在该分支条目下没有进一步分支节点或叶节点。因此,存储器完好性树不需要形成完整的树结构。取而代之,可随着更多要求保护的数据被分配到存储器而将节点分配到树,以确保完好性树的存储器占用跟踪需要被保护的数据的实际量,而不是像上文论述的方案中那样跟踪要求保护的连续地址区域的大小。

空指示符的使用可以是有用的,因为存储器完好性检查电路于是可响应于在从根节点到给定叶节点的路径上检测到如下分支节点而停止自上而下遍历:对于该分支节点,给定地址块的相应分支条目指定空指示符。这允许了相对迅速地检测到存储器中的某个地址块不要求保护并且因此不需要完成整个自上而下遍历。这帮助了降低完好性检查的性能影响。

可按不同方式来表示空指示符。在一个示例中,空指示符可包括在给定分支条目中指定的完好性检查值,其指定特定的空值。

然而,空指示符包括指定空值的指针,可能是尤其有用的。空值可以是一单个预定的值,或者可以是共享比特的某个子集的一组值。例如,在一个示例中,指针如果表示空值,则其特定比特(例如最低有效比特)可被设置到1,而如果其表示实际的地址指针,则其特定比特可被设置到0。

完好性树的自上而下遍历可由若干个不同类型的请求所触发。例如,请求对存储器中的给定块的读取或写入访问的存储器访问请求可触发对树的遍历以便验证所要求的块处的数据是否是有效的并且尚未被篡改。或者,请求为存储器中的新分配块添加完好性标签的标签添加请求可被发出,这随后将导致在完好性树的相应叶节点处对完好性标签的更新。然而,为了将新的完好性标签添加到树,这可能于是要求叶节点的父节点和更高节点处的相应完好性检查值或标签被更新以匹配新添加的完好性标签,并且因此在执行这些更新之前,不管怎样可能会要求在执行更新之前验证所有节点本身是有效的,否则攻击者篡改更高节点之一可能保持不被检测到。因此,向给定叶节点添加额外的完好性标签的请求本身可要求涉及上述验证的自上而下遍历。

对于存储器访问,当如上所述在分支节点的给定分支条目处检测到空指示符时,于是存储器完好性检查电路或者可以简单地将该存储器访问请求所请求访问的给定地址块视为不要求完好性验证的无保护地址块,并且因此允许该存储器访问进行,或者该存储器访问请求可以返回指出完好性验证对于该给定地址块成功的指示,而不区分该地址块是被保护还是不被保护。

对于标签添加请求,如果自上而下遍历检测到相应分支条目为其指定空指示符的给定分支节点,则存储器完好性电路可触发软件分配存储器地址空间来存储该给定分支节点的进一步子节点,然后更新该给定分支节点的相应分支条目的指针以指示出被软件指定为对于进一步子节点分配的地址。另外,如果指针本身不表示空指示符,则存储器完好性检查电路也可清除由相应分支条目的另一部分表示的空指示符。如果指针表示空指示符,则更新指针以匹配为进一步子节点分配的地址就可足以清除空指示符。不管怎样,对基于指针的树结构的使用意味着在处理电路上执行的软件在选择被分配来存储进一步子节点的地址方面有完全的自由。这使得提及地址分配要简单得多。

上文论述的完好性检查可能不是响应于请求对给定地址块的数据的访问的存储器访问请求而执行的唯一类型的检查。此外,存储器访问电路也可执行访问许可检查来检查给定地址块是否被允许访问。例如,这个访问许可检查可基于为给定地址块指定各种属性的页表,例如限制处理电路的哪些权限级别被允许访问给定地址块的属性,或者指定地址块是只读的还是既可被读取也可被写入的属性。另一种形式的访问许可检查可以是检查给定地址块是与操作的安全域还是不那么安全的域相关联,使得可以防止与安全域相关联的地址被在不那么安全的域中操作的代码所访问。另外,一些体系结构可提供所有权表格,该所有权表格对于给定的地址区域定义所有者进程,该所有者进程被允许指定哪些其他进程被允许访问该数据。这可允许在权限较低的操作状态中操作的所有者进程拒绝在更高权限级别执行的更高权限的进程访问存储在由该所有者进程所有的区域中的数据。因此,在一些示例中,存储器访问检查也可基于这种所有权表格。

无论执行的访问许可检查的具体类型如何,访问许可检查都可招致一些时延。例如,如果访问许可检查是基于存储在存储器中的表格的,则如果许可定义表格的所要求条目不是已经被缓存,则可能要花一些时间来从存储器取得该条目。

因此,在一些示例中,在由存储器访问电路执行的访问许可检查完成之前,存储器访问电路可向存储器完好性检查电路提供指定被请求访问的给定地址块的地址的提示信号。响应于提示信号,存储器完好性电路可在存储器访问电路执行的访问许可检查完成之前触发对完好性树的至少一个节点的读取。因此,这可隐藏与完好性检查电路相关联的一些时延,因为存储器完好性检查电路可在存储器访问许可检查正被执行的时段中开始读取完好性树的节点。例如,存储器完好性检查电路可基于提供的提示而预热其对完好性树节点的缓存。即使存储器访问电路随后确定该访问未能通过访问许可检查,预热存储器完好性检查电路的缓存仍可能是有用的,因为后续请求仍可受益于该缓存。因此,此方案可改善完好性检查的性能。

完好性树的节点可被存储在与受完好性树保护的数据相同的存储器中。或者,完好性树的节点可被存储在与存储受完好性树保护的数据的存储器不同的存储器中。上文论述的完好性树配置允许了利用存储在不同存储器类型中的结构来保护一个存储器类型。例如,完好性树节点可被存储在与存储被保护数据本身的存储器相比具有降低的访问时延的存储器中,以降低执行完好性检查的性能成本。

完好性树的根节点可被存储于在与存储器完好性检查电路相同的集成电路内提供的片上存储器中。可以保护片上存储器免遭篡改,因为片上存储器与处理器核心之间的通信路径未被暴露于外部,因此这允许了根节点充当整个完好性树的信任根源。

根节点可包括指定完好性树的顶级分支节点的地址的指针,其中顶级分支节点是根节点的子节点。另外根节点可指定用于顶级分支节点的相应分支条目的验证的至少一个完好性检查值。在一些情况下,根节点可包括多个完好性检查值,每一个对应于顶级分支节点内的一不同分支条目。

与上文论述的在将任何受保护数据存储在存储器中之前分配固定预分配大小的完好性树的方案中不同,利用上文论述的使用指针的方案,可以在被树保护的一些受保护数据已经被存储在存储器中之后向完好性树添加额外的级别。因此,响应于向完好性树添加级别的请求,存储器完好性检查电路可被配置为将完好性树的新的顶级分支节点存储到被软件指定为被分配用于存储新顶级分支节点的地址,新的顶级分支节点包括根节点先前指定的指针和至少一个完好性检查值;更新根节点的指针以指定被分配用于存储新顶级分支节点的地址;并且更新根节点的至少一个完好性检查值以对应于新顶级分支节点的内容。因此,不必预先决定完好性树上的级别的数目。可以简单地在必需时添加额外的级别,并且这再一次帮助限制了树的存储器占用,从而只需要用于保护已经分配的受保护数据的量的必需空间量。实际上,当新的级别被添加到完好性树时,根节点的先前内容被存储出到存储器以变成新的顶级分支节点根内的新分支条目(新顶级分支节点的其他条目指定空指示符),然后根节点被更新以指向该新顶级分支节点并且包括与新顶级分支节点的非空条目的内容相对应的至少一个完好性检查值。

可按不同方式来实现树的分支条目内的完好性检查值。在一个示例中,每个完好性检查值可包括作为该分支条目的指针指向的子节点的相应分支条目或者叶条目的函数而得出的完好性标签。例如,每个完好性标签可以是相应分支条目或叶条目的散列,使得整个树形成散列的树,其中子节点内的给定条目可通过基于该条目的存储值计算其散列并且将计算出的散列与存储在作为该子节点的父亲的分支条目内的完好性标签相比较来加以验证。散列也可基于计数器以提供新鲜性来针对重放攻击进行保护。

或者,对于给定分支节点的给定分支条目,每个完好性检查值可包括至少一个完好性临时数(只使用一次的数),用于计算存储在由该给定分支条目的指针指向的子节点的相应分支条目或叶条目中存储的相应完好性标签。在此情况下,在子节点的给定子节点或叶条目中的完好性标签将作为以下项的函数而得出:(i)存储在子节点的父条目中的完好性临时数,以及(ii)该子节点条目的其他内容。因此,给定的分支条目可指定与子节点的各个分支条目或叶条目相对应的一组完好性临时数,这可由作为该组完好性临时数和在给定分支节点的父节点中指定的完好性临时数的函数得出的共享完好性标签来保护。

使用完好性临时数来计算完好性标签对于保证新鲜性以针对重放攻击进行保护可以是有用的,在重放攻击中攻击者尝试提供完好性标签的先前有效值(是在对相应数据的更新之前捕捉的),但该先前有效值是过时的,因为受该标签保护的相应数据自那以后已变化了。完好性临时数可以是在每次相应完好性标签被更新时被改变的随机数,或者在每次完好性标签被更新时被改变的任何其他值。然而,实现完好性临时数的一种简单方式可以是单调递增计数器,这些计数器在每次对相应完好性标签作出更新时被递增。利用使用这种完好性临时数或计数器的方案,用于降低树的存储器占用的一种方案可以是树只为每个分支节点处的完好性临时数提供完好性保护,但不保护相应的完好性标签。与上文论述的散列树不同,对于计数器树或者临时数树,保护给定分支条目或叶条目的内容的标签是与该分支条目或叶条目本身一起存储的。

当树基于完好性临时数的树时,则给定分支条目内的每组完好性临时数或者可实现为对于与该给定分支条目相对应的子节点的每个分支条目或叶条目独立指定的一组非分割计数器,或者可实现为一组分割计数器,其中每个分割计数器被表示为在子节点的各个分支条目或叶条目之间共享的主计数器和对于子节点的每个分支条目或叶条目分开指定的次计数器的组合。对分割计数器的使用可帮助减小在给定分支条目内提供的群组计数器的大小。对于分割计数器,给定子条目的次计数器将在相应子条目被更新时被递增,并且如果递增次计数器引起溢出,则相应的主计数器本身可被更新,并且于是这可要求对包括该主计数器的分支条目所指向的子节点的各个分支条目或叶条目内的所有标签值的重计算。

因此,本技术涵盖散列的树或者计数器(临时数)的树。在向完好性树添加额外级别的上述示例中,当根节点被更新为让其完好性检查值与新的顶级分支节点的内容相对应时,这或者可通过基于新顶级分支节点的内容计算根节点的新完好性标签来完成,或者可通过更新根节点的临时数以匹配用于计算新顶级分支节点的标签的临时数值来完成。

除了管理完好性检查以外,存储器完好性检查电路还可在写入到存储器时对数据加密并且在读取它时对数据解密。

上文论述的技术可实现在具有以硬件提供存储器完好性检查电路的功能的定制电路的物理装置中。因此,在处理装置上执行的软件不需要知晓完好性验证操作正被执行,因为这可由在硬件中提供的存储器完好性检查电路自动完成。因此,当软件指示数据被写入到受保护地址时,存储器安全性电路可在将其写入到存储器之前对数据加密,并且控制相应完好性树节点的生成和/或基于完好性树验证存储器尚未被攻击者危害。类似地,在由软件读取到受保护存储器区域时,存储器安全性硬件可控制读取的数据的解密和用于验证读取的数据仍有效的完好性树节点的检查。

然而,在其他示例中,加密/解密、完好性树节点的生成以及基于存储的完好性树的完好性验证操作,可由在装置内的通用处理电路上执行的软件来执行,该装置本身可不具有用于自动执行这种存储器安全性操作的硬件。例如,软件可以是诸如操作系统、超级监督者、在更高权限级别执行的软件或者系统固件之类的平台级代码,其可支持在其下运行的在其控制之下的其他应用。例如,虚拟机或仿真器程序可执行应用代码,就好像硬件实际具有存储器完好性检查电路一样,其中虚拟机或仿真器程序拦截存储器访问指令,并且响应于这种指令,触发数据的加密或解密或者触发用于维护完好性树的操作和/或基于完好性树验证数据的完好性。因此,在一些示例中,该技术可提供一种存储计算机程序来控制数据处理装置提供如上所述的方法的存储介质。

图1示意性图示了数据处理系统2的示例,该数据处理系统2包括集成电路或片上系统4,该集成电路或片上系统4包括至少一个处理器核心6,用于执行程序指令来实现数据处理操作。虽然图1只示出了一个处理器核心,但在一些情况下片上系统4可包括多个处理器。每个处理器核心或处理器核心集群可具有缓存8(或者多个级别的缓存8、10)。存储器控制器12充当存储器访问电路,用于控制对在与片上系统4分开的集成电路上的片外存储器14的访问。虽然对片上数据的访问可能难以被攻击者篡改,但片上系统的边缘可充当信任边界并且越过该边界的任何数据可能是易受攻击的,这种攻击的方式是拦截存储器控制器12与片外存储器14之间的物理信道16上的数据,或者在数据被存储在片外存储器14中时读取或修改数据。虽然图1示出了信任边界对应于片上系统的边缘的示例,但在其他情况下在片上系统内可以有信任边界,这可将超出信任边界的数据暴露于潜在的攻击。

片上系统4可包括存储器完好性检查电路20,其被提供来针对恶意敌人保护存储到片外存储器14的数据,该恶意敌人能够物理访问系统并且具有观察和/或重放在微处理器与片外系统存储器14之间交换的数据或代码的能力。片外存储器14存储要被保护的数据24以及用于数据24的验证中的完好性树元数据26。

存储器完好性检查电路20包括用于对被写入到片外存储器14的数据加密和对从片外存储器读回的数据解密的加密/解密电路32。这通过防止恶意观察者清楚看到正被从片外存储器14读取或被存储到片外存储器14上的数据来提供了隐私性。加密和解密所使用的加密密钥可被存储在片上系统上的片上存储器(例如,SRAM)34内或者存储在存储器完好性检查电路20本身内。对于加密和解密可以使用任何已知的技术,并且可以使用任何已知的方案来保护加密密钥。

存储器完好性检查电路20还包括完好性树生成和验证电路36,下文概括称为验证电路36。验证电路36负责维护存储器14中的完好性树26。完好性树可提供若干条信息,用于验证当前存储在存储器14中的数据是否仍与其被写入到该区域时相同。对数据完好性的检查可例如利用消息认证码(message authentication code,MAC)来实现,消息认证码可以是利用诸如AES-GCM或SHA-256之类的单向密码函数从存储的数据生成的,这些单向密码函数使用如下的函数:这些函数使得攻击者在不知道用于生成认证码的秘密密钥时通过蛮力猜测与特定数据值相关联的认证码是计算上不可行的。认证码可与数据24存储在一起或者存储在单独的数据结构中。利用用于生成存储的MAC的同一单向函数对照从存储的数据得出的计算出的MAC来检查为数据值存储的MAC,并且如果在存储的MAC和计算出的MAC之间检测到不匹配,则这可指示出数据已被篡改。

然而,单是提供MAC可能不足以防止所有攻击。另一种类型的攻击可以是重放攻击,其中能够物理访问系统的恶意的人存储加密的数据和先前在总线上观察到的MAC的合法组合,并且在后来将这些重放到总线上,其意图是利用陈旧的值破坏给定存储器位置处的数据以危害系统的操作。可利用完好性树26来防止这种重放攻击,完好性树26可提供节点的一种树结构,其中树的每个叶节点提供用于验证受保护存储器区域22中的数据24的块之一有效的完好性数据并且叶节点的父节点提供用于检查该叶节点本身有效的进一步完好性数据。可利用树的进一步父节点来检查父节点本身,并且这随着向上遍历树直到树的根而继续,树的根于是可提供验证的最终来源。存储在片上存储器34中的根节点38可用于验证树的根是真实的。

存储器完好性检查单元20可具有地址计算电路40,用于计算检查特定数据块所必需的完好性树26的节点在受保护存储器区域22中所位于的地址。可选地,存储器安全性单元20也可具有缓存42,用于缓存完好性树的最近使用的节点,以便与必须从片外存储器14再次读取它们的情况相比更快速地访问。或者,存储器完好性检查单元20可能够访问也可被处理器核心6使用的缓存10之一,因此在共享缓存10内缓存来自完好性树26的数据也可帮助加速存储器完好性检查单元20的操作。

下文描述的技术使用一种新颖的完好性保护结构(嵌套保护表,NPT),其可被用于完好性树26,用于存储保护数据24的完好性的标签,其只要求与O{实际被保护范围}而不是O{潜在被保护范围}(这是现有完好性树解决方案所要求的)成比例的存储器占用,同时允许了被保护的缓存线位于任意大小的潜在受保护范围内的任何地方,而不牺牲性能。图2示出了完好性树26的示例,其包括存储在片上存储器34中的根节点38,以及存储在片外存储器14中的若干个分支节点44和叶节点46。除了根节点38以外的每个节点是给定父节点的子节点,其中父节点提供了在子节点的完好性的验证期间可以使用的一些信息。

每个叶节点46提供用于验证用于对片外存储器14寻址的地址空间的相应被保护地址块48的完好性标签(例如,被保护地址块可以是一条DRAM缓存线),虽然其他示例可在不同的粒度提供标签)。完好性标签是用于认证存储器对象(例如DRAM缓存线)的值。标签可以是在对象上计算的散列或者是MAC值(利用密钥计算)。在两种情况下,运行中的计数器都可在计算标签时被用作额外的输入以保证新鲜性并且提供抗重放保护。

标签通常被存储在片外存储器14(例如DRAM)中并且因此标签本身的完好性也应当被保证。因此,可利用由叶节点46的父节点(在此示例中是第3级分支节点44)提供的完好性检查值来验证叶节点46,随后可利用由该分支节点的父节点(在此示例中是第2级分支节点44)提供的完好性检查值来验证该分支,沿树向上依此类推,直到根节点38被用于验证第0级分支节点的完好性为止。这样,在信任边界(例如片上系统的边界)内部提供的根节点可被用作信任的根源,用于保证超出信任边界存储的完好性树26和数据24的完好性。

诸如默克尔树构造之类的散列树是用于高效地确证完好性标签的真实性的一种机制。这是通过管理完好性标签上的散列值的n元树(例如具有固定数目的后代:二元、三元等等)来实现的。受保护对象、其相应的完好性标签和保护这些标签的散列树节点被存储在非信任存储器中。散列树根位于受信任存储器中,从而允许了形成安全认证链。上文描述的散列树的一个变体是形成只保护用于计算标签的计数器值的完好性树,同时继续将标签本身存储在不受保护的存储器中,而不为标签提供基于树的保护。

有一种良好方法来保证非信任存储器的完好性和新鲜性是任何受信任执行环境中的基本要求。在不对主机软件存储器管理造成严重限制的情况下,就存储器占用和性能而言,这也是一个要解决的困难问题。使用默克尔树的实现方式倾向于严重限制可被树保护的受保护地址范围的大小。

这是因为,如图3中所示,现有的完好性实现方式基于的是定义被加以完好性保护的单个有限连续DRAM地址范围50,并且形成保护该整个地址范围的相应散列树52。利用此方案,散列树52形成完整的树并且个体树节点44、46的地址可直接从要验证的被保护块48的地址来计算(该地址可用于直接索引到相关叶节点46或分支节点44)。散列树的存储器占用(这取决于解决方案可达到受保护地址范围的16%)被预先预分配来容纳要保护的整个潜在范围50。散列树52必须占据地址空间的单个连续区域。这可能是成问题的,因为如果受保护地址范围较大,则找到充分大小的单个未分配区域来容纳散列树52可能是困难的。还应当注意将保护限制到特定地址范围对于操作系统造成了严重的限制,因为其优化的存储器管理要求自由地选择用于存储受保护应用页或VM页的物理位置的能力。

下文论述的技术允许了形成安全的完好性链结构来保护可跨越系统的整个物理存储器的存储器范围,同时只招致实际受保护存储器大小的成本。此外,该技术允许了利用存储在一不同存储器类型(例如降低时延DRAM)中的结构来保护一种存储器类型(例如低功率DRAM或高带宽存储器或者甚至持续性存储器)。

如图4的示例中所示,这是利用一种新颖的多级别完好性保护嵌套表来实现的,其中表格中的标签56保护一组子标签连同指向它们在存储器中的位置的指针58。表格由可位于系统图谱内的任意位置中的页组成,从而形成一种没有预配设的存储器的安全完好性树。因此,如图5中所示,数据的受保护区域和完好性树本身都可在地址空间中的若干个非连续区域处,其间有未分配区域或者为其他数据分配的区域。

嵌套保护表26(完好性树)内的叶页46保存完好性标签61,这些完好性标签61一起分组在多个标签群组60(叶条目)内,其中每个标签对应于被保护的存储器块(地址块)。

分支页44包括多个标签群组(分支条目)62,其中每个标签群组62对应于子页(下一级别的进一步分支页44,或者叶页46)并且标签群组内的每个标签56保护子页中的相应标签群组62或60的完好性。

最初,表格是空的并且不消耗存储器。当软件将缓存线或页注册为受完好性保护,并且在嵌套表26中的预期位置中没有找到相应的叶页时,叶页46被添加。添加到NPT的叶页和分支页的物理页位置由管理软件任意定义并且这些不要求任何特殊的保护保证。

遍历嵌套保护表起到两个作用——到达叶页并且计算保护标签的完好性链的标签。下文描述的示例示出了这些操作可如何被并行化以减轻由线性遍历引入的时延。

嵌套保护表(NPT)由于3个原因而不是一种经典的n元完好性树。

-父节点和子节点之间的连接是通过指针关联作出的,而不是像对于典型n元树所做的那样使用索引算术作出的;

-表格中的指针可以是NULL,从而形成一种不一定是完整树的结构;

-树中的每个分支级别可具有(并且通常将会具有)与先前那个不同的“元数”。

仅当在完好性页表中找到标签时,缓存线才要求完好性计算。这允许了迅速检测到缓存线不要求保护(在不遍历整个树的情况下),因为当在分支页44中找到NULL指示时,可停止遍历。

嵌套保护表的大小动态地扩展和收缩。而且由给定NPT覆盖的潜在地址范围(例如64GB)可从最大支持物理地址范围(例如64TB)内的任何偏移量开始定义。利用缓存和推测并且通过利用从访问控制引擎到嵌套保护引擎的提示信号(允许其预热其缓存),可实现高性能。

更具体而言,如图4中所示,嵌套保护表26是基于以下原则的:

1.标签61、56是允许验证存储器块(通常是缓存线)的真实性的值。有各种方法来在存储器块上计算标签,如标签计算一节中所描述。

2.标签群组60、62是位于连续存储器块(通常是缓存线)内的标签的集合。

3.叶页46包含多个标签群组60(叶条目)。

a.标签群组60中的每个标签61保护一块存储器。

b.叶页中的标签群组60的数目由标签大小、叶页大小和标签群组大小定义。

i.作为示例,4KB叶页可包含64个标签群组,其中每个群组包含8个标签,每个标签是64比特,并且每个标签保护64B的存储器,从而整个叶页保护存储器的32KB块。

4.分支页44包含多个分支条目62,其中每个条目62包括以下参数:

a.下一个指针58——其可指向叶页或者指向下一级的分支页

b.标签群组56——一组标签(完好性检查值——例如散列、MAC或者计数器),其中每个标签保护由下一个指针指向的页中的相应条目。

i.如果下一个指针58指向叶页46,则标签保护叶页46中的相应标签群组60

ii.如果下一个指针58指向分支页44,页标签保护分支页中的下一个指针58和标签群组62构成的条目62。

5.根表38包含指向第0级分支页(第0级包括单个页)的基础指针64和单个标签群组62,其中每个标签保护第0级分支页中的相应条目62。

a.根表38位于子边界内并且用作整个NPT的信任根源。

图4示出了可保护多达8GB的存储器的嵌套保护表的示例,其中页大小是4KB并且标签大小被假定为是56比特。每个页中的条目的数目根据分支级别而变化:

-叶页包括64个标签群组,其中每个群组存储8个标签。

-第3级分支页包括8个条目,其中每个条目包括64个标签和指针

-第2级分支页包括64个条目,其中每个条目包括8个标签和指针

-第1级分支页包括8个条目,其中每个条目包括64个标签和指针

-第0级分支页包括64个条目,其中每个条目包括8个标签和指针

-片上根表包括基础指针和64个标签。

图6和图7示出了为嵌套保护分支和叶页提出的两个变体。在两个变体中,存储完好性情境所要求的存储器都是按需分配的。

如图6中所示,在变体1中,叶页包含在相应缓存线上计算的实际标签值。分支页44的每个分支条目62包含若干个标签值(散列或MAC),每个是在由该分支条目62的指针58指向的子节点的相应分支条目62或叶条目60的内容上计算的。

如图7中所示,在变体2中,叶页包含:

1.在计算缓存线标签时用作额外输入的临时数(使用一次的数)值70。临时数允许了保证标签的新鲜性并且可实现为单调计数器。在变体2中只有计数器的完好性需要被NPT保护。

2.标签72,其中每个标签保护相应的缓存线并且是利用相应的临时数来计算的。标签完好性不需要被NPT保护,因为这是通过保护计数器来间接保证的。

标签和计数器都被分组在叶页内的相应标签群组和标签计数器下。给定的叶条目60包括标签72的群组和计数器(临时数)70的相应群组。

叶页具有一种预定义的结构,指定了计数器群组及其相应的标签群组的位置。这允许了对与给定物理地址相对应的计数器和标签的位置的直接访问。

另一方面,在变体2中,分支页44的给定分支条目62包括指针62,一组计数器(临时数)74,以及利用由该分支页44的父节点的相应分支条目62提供的相应计数器在计数器群组74上计算的单个标签值76。类似地,计数器群组74中的每个计数器被用于作为该分支页44的孩子的分支节点或叶节点内的相应子条目的计算中。

因此,通过形成计数器群组并且向每个这种群组添加保护群组完好性的计数器标签76来保护了计数器完好性。到计数器标签计算的一个输入是来自计数器群组的父节点的额外计数器值。变体2的优点是受保护的计数器可远小于标签,因此保护其完好性的存储器成本更低。

图6和图7的两个变体允许了存储器占用与计算时延之间的折衷。因此,分支页44的分支条目中的完好性检查值或者可以是基于子页44的相应子条目的内容生成的完好性标签(散列或MAC),或者可以是在子页44的子条目中的计数器标签76的计算中使用的计数器。

如图8中所示,在变体2中,对于叶节点或分支节点的给定条目中的计数器群组70、74可以有两种可能的结构可考虑:

1.非分割计数器群组,其中群组中的每个计数器具有由密码要求定义的完全宽度(图8的右手侧)。

2.分割计数器群组,其中一组次计数器共享单个主计数器,该单个主计数器在每当任何次计数器溢出时被递增,从而允许了在存储计数器时节省比特(图8的左手侧)。对于分割计数器实现方式,当次计数器溢出并且主计数器在给定分支条目62中被递增时,将需要对由该给定分支条目62的指针62指向的子页中的所有子条目重计算计数器群组标签76。

用于管理嵌套保护表(NPT)26以及用于使用它来认证存储器的操作是由存储器完好性检查电路20(其充当片上嵌套保护引擎(Nested Protection Engine,NPE))来实现的。NPE执行以下操作:

软件通过请求NPE 20向NPT添加相应标签来注册其保护缓存线地址的兴趣。如果缓存线本身在添加时没有在被读取或者在添加标签时没有被初始化,则标签可包括限定符比特,该限定符比特最初被设置到0,并且在后来当在缓存线上计算完好性值时被设置到1。或者,缓存线可作为添加操作的一部分被读取,并且它的完好性值被计算并写入到标签。

软件可选择注册对于任何级别的粒度(缓存线、页或者页的块)的完好性的兴趣,虽然以比缓存线更高的粒度工作将为NPT保证更高级别的存储器效率。

向NPT添加标签或者在NPT中更新标签的操作是基于如图9中对于变体1的情况所示出的统一序列的。

注意:在流程的每个阶段,如果指针值是NULL,则执行以下操作:

a.分配存储器中的页并且将当前阶段的指针设置到分配的页的地址(指针以后将被包括在标签计算中)。

b.将新的页初始化到零。

c.通过在添加的页中的(一个或多个)相应子标签群组上计算标签来初始化经更新的指针的条目中的标签群组。

用于更新标签的流程可被总结如下:

1.将PhysicalAddress[MSB:0]分区为一组偏移量(参见图9),其中每个偏移量对应于一不同的NPT级别

2.从其基础指针开始,通过向指针添加地址偏移量并且从读取结果的内容提取到下一级别的指针,来扫描NPT。

3.对被读取的每个条目执行验证标签操作,与此并行地从其提取下一级指针并且提交下一读取。

4.当到达叶页并且从其读取标签群组时,在经更新的缓存线上计算的标签被写入到该群组

5.然后从叶标签群组到根标签群组的链条上的所有标签群组被重计算并存储到存储器。

对于计算标签有若干个选项,我们在这里只列出一些示范性方案。首先,我们区分两种情况:

·在散列树情况中(变体1),要散列的消息m是由指针和与其打包在一起的散列的群组形成的。

·在计数器树情况中(变体2),消息m可以是指针和与其打包在一起的计数器的群组的串接并且也可包括父节点中的相应计数器c

一旦定义了消息m,就有计算其散列的问题。一些方法是:

1.使用标准的或者常用的散列函数,例如SHA-2、SHA-3、SipHash,等等。在计数器树的情况下,父计数器c

2.使用Carter-Wegman通用散列函数。写下m=m

h’=Σ

其中χ∈F是非零秘密值,然后将结果加密为

h=h’+E

其中E

或者,加密可被执行为

h=E

但在此情况下,h’的计算不能与E

3.通过选择块加密算法(例如AES)并且通过利用密钥对m加密以生成完好性检查值来使用标准MAC。

注意:如果存储NPT的存储器由于其他考虑而被加密,那么只要父计数器c

验证缓存线的操作是基于如图10中对于变体1的情况示出的序列的。(与上文对于图9描述的步骤1-3类似)

如图10的左侧的硬件视图中所示,计算和树遍历并行发生,因此一个操作的时延被另一个所隐藏。该图示出了支持其并行化的硬件引擎。

如上文对于变体1所描述的验证标签和更新标签的操作在作出以下微小变化的情况下对于变体2也适用:

-验证标签:

o当验证缓存线标签时,与该标签相对应的计数器被包括

在计算中

o验证计数器标签是通过在计数器群组中的所有计数器和父计数器上计算标签来执行的。

-当更新缓存线标签时,与该标签相关联的计数器被递增,并且被递增的计数器的每个父计数器也被递增。然后在更新后的计数器值上重计算这个链上的标签计数器。

将会明白,图9和图10中所示的精确细节只是一个示例,例如,树级别的数目和物理地址的每个偏移量部分中的比特的数目可被改变。

通过在每个标签中定义单比特限定符标志可从数据库去除标签,其中当缓存线不再需要被保护时,软件将该限定符标志更新到0。也可以具有限定多个标签或标签群组的单个标志。

每当标签限定符被归零时,则软件或NPE 20也可检查页中的另外标签是否为零。通过在页中的所有标签群组上执行检查,可从NPT去除整个页。

每当缓存线被访问时,NPE就可迅速地决定对于它不要求完好性保护。这是通过遍历NPT直到到达NULL指针或者无效标签(其可以是具有预留值的标签或者具有限定符=0的标签)为止来完成的。由于通常存储器只有一小部分被加以完好性保护,所以这个方法保证了遍历对于不要求完好性的大多数缓存线将是短的,因为将很快找到NULL指针。系统也可通过在读取或写入操作时添加对于缓存线是否要求完好性的提示来增强此过程。

适用于默克尔树的性能增强方法(即——缓存和推测性执行)也可适用于带有其自己的变体的NPT。

缓存NPT条目:为了加速性能,NPT的元素可被缓存在NPE 20的缓存42内。或者可缓存分支页条目,叶页条目或者{物理地址、计数器、标签}元组。

推测性执行:验证缓存线的完好性不一定必须阻止将数据返回给用户。NPE将在完成验证流程之前推测性地将数据返回给用户并且使用中止信号,一旦完好性差错发生,该中止信号就阻止对非易失性存储或外部IO装置的任何更新。这样,在差错传播到系统边界之外之前,保护了系统状态。

在上述内容之上,我们提出了一种基于来自存储器访问电路12的提示信号82的新的性能增强方法。在安全系统中,MMU操作可导致将物理地址加载到其缓存中并且在实际的加载/存储操作被执行之前对地址执行额外的访问控制检查。如图1中所示,一旦物理地址为TLB 80或者MMU所知,这些组件就可针对特定物理地址向NPE发送提示82,这样NPE可以通过开始读取相应的分支页条目来预热其缓存,而无需等待由许可检查电路84执行的任何访问许可检查完成。这样,在MMU访问控制检查和给定缓存线访问的完好性检查之间实现了并行化。虽然图1示出了基于缓存在TLB 80中的页表条目来执行许可检查的示例,但执行其他类型的访问许可检查来生成提示也是可能的。

图11示出了可被存储器完好性检查电路20执行来向完好性树26添加额外级别的另一操作。在步骤100,软件可触发发送添加额外树级别的请求。作为响应,在步骤102,完好性树验证/生成电路36将新的第0级分支节点44存储到片外存储器14的由软件在请求中指定的地址处。新的第0级分支节点将指定与在表格的根节点38中先前指定的那些相对应的参数。先前是第0级分支节点的分支节点44因此将变成第1级分支节点,第1级分支节点将变成第2级分支节点,依此类推。在新的第0级分支节点中,标签群组(分支条目)62之一对应于根节点38的先前内容,并且同一分支页44中的所有其他分支条目62可被设置有提供空指示符的指针58,以指示出在这些条目下还没有任何进一步子节点。在步骤104,完好性树验证和生成电路36更新根节点38中的指针64以指定被分配到存储器的新的第0级分支节点的地址。在步骤106,完好性树验证/生成电路36更新根节点38的至少一个完好性检查值以对应于新的顶级分支节点44的内容。如果使用上文描述的变体1,则根表格内的每个标签可基于新的第0级分支节点44的相应条目62的散列被更新(其中散列是基于指针和标签两者的)。如果使用变体2,则根表格64内的计数器可以被更新到用于计算新的第0级分支节点的每个条目内的相应计数器散列的值。

图12图示出了可以使用的仿真器实现方式。虽然早前描述的实施例就用于操作支持所关注的技术的特定处理硬件的装置和方法而言实现了本发有,但也可以根据本文描述的实施例提供一种指令执行环境,其是通过使用计算机程序实现的。就其提供硬件体系结构的基于软件的实现方式而言,这种计算机程序经常被称为仿真器。仿真器计算机程序的变体包括模拟器、虚拟机、模型和二元转化器,包括动态二元转化器。通常,仿真器实现方式可运行在主机处理器230上,该主机处理器230可选地运行主机操作系统220,支持仿真器程序210。在一些布置中,在硬件与提供的指令执行环境和/或在同一主机处理器上提供的多个不同的指令执行环境之间可以有多层的仿真。历史上,曾要求有强大的处理器来提供以合理的速度执行的仿真器实现,但这种方案在某些情况下可能是有正当理由的,例如当出于兼容性或重复使用原因而希望运行另一处理器原生的代码时。例如,仿真器实现方式可提供具有主机处理器硬件不支持的额外功能的指令执行环境,或者提供通常与一不同的硬件体系结构相关联的指令执行环境。仿真的概述在“Some Efficient ArchitectureSimulation Techniques”,Robert Bedichek,Winter 1990USENIX Conference,第53-63页中给出。

就先前已参考特定的硬件构造或特征描述了实施例而言,在仿真的实施例中,等同的功能可由适当的软件构造或特征来提供。例如,特定的电路在仿真实施例中可实现为计算机程序逻辑。类似地,存储器硬件,例如寄存器或缓存,在仿真实施例中可实现为软件数据结构。在先前描述的实施例中提及的硬件元素中的一个或多个存在于主机硬件(例如,主机处理器230)上的布置中,一些仿真实施例在适当时可利用主机硬件。

仿真器程序210可被存储在计算机可读存储介质(其可以是非暂态介质)上,并且提供到目标代码200(这可包括应用、操作系统和超级监督者)的程序接口(指令执行环境),这可以与由仿真器程序210建模的硬件体系结构的应用程序接口相同。从而,目标代码200的程序指令,包括上述那些,可利用仿真器程序210从指令执行环境内来执行,使得不实际具有上文论述的装置4的硬件特征的主机计算机230可模拟这些特征。仿真器程序210可具有存储器访问程序访问程序逻辑212和存储器完好性检查程序逻辑214,其模拟上文描述的存储器访问电路12和存储器完好性检查电路20的功能。

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

虽然本文已参考附图详细描述了本发明的说明性实施例,但要理解本发明不限于这些确切的实施例,并且在不脱离如所附权利要求限定的本发明的范围和精神的情况下,本领域技术人员可在其中实现各种改变和修改。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号