首页 / 专利库 / 化妆品和香水 / 覆盖 / 用于存储器安全的计数器完整性树

用于存储器安全的计数器完整性树

阅读:482发布:2021-06-08

专利汇可以提供用于存储器安全的计数器完整性树专利检索,专利查询,专利分析的服务。并且一种用于 存储器 安全的计数器完整性树包括至少一个拆分计数器 节点 ,所述至少一个拆分计数器节点 指定 至少两个计数器,所述至少两个计数器各自被定义为在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一个指定的各个次要计数值的组合。这增加所述树的每 父节点 可提供的 子节点 的数量,并且因此减小必须在 覆盖 给定大小的存储器区域的树中遍历的树层级的数量。通过在镜像计数器完整性树中分配节点以用于容纳未装配在主计数器完整性树的对应节点的较大次要计数器,可动态地改变所述次要计数器大小。,下面是用于存储器安全的计数器完整性树专利的具体信息内容。

1.一种设备,所述设备包括:
存储器访问电路,用于控制对存储在存储器中的数据的访问;以及
存储器安全电路,用于验证存储在所述存储器的受保护存储器区域中的数据的完整性;其中:
所述存储器安全电路被配置为维护包括多个节点的主计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一者与存储有子节点的数据块相关联,所述子节点提供所述主计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一者与存储有除所述主计数器完整性树以外的数据的数据块相关联;
响应于对所述受保护存储器区域的目标数据块的访问,所述存储器安全电路被配置为通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;并且
所述主计数器完整性树的节点中的至少一者包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为以下两项的组合:在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一者指定的各个次要计数值;并且
响应于与所述主计数器完整性树的给定拆分计数器节点相关联的大小增加触发事件,所述存储器安全电路被配置为:增加所述给定拆分计数器节点的次要计数器的大小并且在至少一个镜像计数器完整性树的对应拆分计数器节点中分配所述给定拆分计数器节点的次要计数器的子集。
2.根据权利要求1所述的设备,其中,所述给定拆分计数器节点指定大小字段,所述大小字段指示所述给定拆分计数器节点的次要计数器的大小。
3.根据权利要求1所述的设备,其中,当所述给定拆分计数器节点的次要计数器具有除由所述存储器安全电路所支持的最大大小以外的大小时,响应于所述大小增加触发事件,所述存储器安全电路被配置为:将所述给定拆分计数器节点的次要计数器的大小增加到由所述存储器安全电路所支持的多个次要计数器大小当中的下一个最大大小。
4.根据权利要求1所述的设备,其中,对于所述次要计数器的大小将是由所述存储器安全电路所支持的最小次要计数器大小的两倍的拆分计数器节点,所述存储器安全电路被配置为在至少两个镜像计数器完整性树中分配对应拆分计数器节点。
5.根据权利要求1所述的设备,其中,当仍然尚未为所述至少一个镜像计数器完整性树分配存储器空间时,响应于所述大小增加触发事件,所述存储器安全电路被配置为为所述至少一个镜像计数器完整性树分配存储器空间。
6.根据权利要求1所述的设备,其中,对于每个镜像计数器完整性树,所述存储器安全电路被配置为:分配与为所述主计数器完整性树所分配的存储器空间量相同的存储器空间量。
7.根据权利要求1所述的设备,其中,给定镜像计数器完整性树的对应拆分计数器节点的地址与所述给定镜像计数器完整性树的基地址之间的第一偏移等于所述主计数器完整性树的给定拆分计数器节点的地址与所述主计数器完整性树的基地址之间的第二偏移。
8.根据权利要求1所述的设备,其中,所述大小增加触发事件包括以下各项中的至少一项:
所述给定拆分计数器节点的次要计数器中的一者的次要计数器溢出;以及所述给定拆分计数器节点的次要计数器的溢出的速率满足预定条件;以及针对与所述给定拆分计数器节点的计数器相关联的数据块的认证码重新计算或数据重新加密事件的速率超过阈值
9.根据权利要求1所述的设备,其中,所述大小增加触发事件包括:检测到与所述受保护区域的关联子集相关联的存储器业务的平大于阈值,所述受保护区域的关联子集包括所述受保护区域的一部分,对所述受保护区域的该部分来说验证所述关联子集内的任何目标块的完整性依赖于所述给定拆分计数器节点。
10.根据权利要求1所述的设备,包括第二存储器;
其中,所述存储器安全电路被配置为将指定以下各项的根验证数据存储到所述第二存储器:
所述主计数器完整性树的根节点;或
用于验证存储在所述受保护存储器区域中的所述主计数器完整性树的根节点的完整性的信息。
11.根据权利要求10所述的设备,其中,响应于对所述目标数据块的访问,所述存储器安全电路被配置为:执行一个或多个验证检查以验证包括所述目标计数器和所述根节点的所述主计数器完整性树的分支上的计数器的完整性,并且所述验证检查中的至少一者依赖于存储在所述第二存储器中的所述根验证数据。
12.根据权利要求1所述的设备,其中,当访问所述主计数器完整性树的给定节点时,所述存储器安全电路被配置为:在所述主计数器完整性树的给定节点可用之前预测与所述主计数器完整性树的给定节点相关联的次要计数器大小。
13.根据权利要求12所述的设备,其中,所述存储器安全电路被配置为确定是否取决于所述预测的次要计数器大小而触发要访问所述镜像计数器完整性树的对应节点的请求
14.根据权利要求1所述的设备,其中,响应于当通过所述主计数器完整性树的拆分计数器节点来指定用于所述目标数据块的所述目标计数器时更新所述受保护存储器区域的目标数据块,所述存储器安全电路被配置为更新与所述目标计数器相对应的所述次要计数值,并且基于经更新的所述目标数据块的数据、与所述目标计数器相对应的对应主要计数值以及经更新的与所述目标计数器相对应的次要计数值来重新计算与所述目标数据块相关联的所述存储的认证码。
15.根据权利要求1所述的设备,其中,所述主计数器完整性树包括具有不同元数的至少两个节点。
16.根据权利要求1所述的设备,其中,所述主计数器完整性树的至少一个节点为除2的精确幂以外的一定数量的数据块指定计数器。
17.根据权利要求1所述的设备,其中,所述存储器安全电路被配置为:从与所述目标数据块相同的缓存行读取针对所述目标数据块的所述存储的认证码。
18.根据权利要求1所述的设备,其中,所述存储器访问电路被配置为:独立于所述主计数器完整性树而控制对所述存储器的不受保护存储器区域的访问。
19.一种用于控制对存储在存储器的受保护存储器区域中的数据的访问的方法,包括:
维护包括多个节点的主计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据块相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一者与存储有子节点的数据块相关联,所述子节点提供所述主计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一者与存储有除所述主计数器完整性树以外的数据的数据块相关联;以及响应于对所述受保护存储器区域的目标数据块的访问,通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述主计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;
其中,所述主计数器完整性树的节点中的至少一个包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为以下两项的组合:在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一者指定的各个次要计数值;并且
响应于与所述主计数器完整性树的给定拆分计数器节点相关联的大小增加触发事件,增加所述给定拆分计数器节点的次要计数器的大小并且在至少一个镜像计数器完整性树的对应拆分计数器节点中分配所述给定拆分计数器节点的次要计数器的子集。
20.一种非暂态存储介质,所述非暂态存储介质存储用于控制数据处理设备以执行根据权利要求19所述的方法的计算机程序

说明书全文

用于存储器安全的计数器完整性树

技术领域

[0001] 本技术涉及数据处理的领域。更特别地,本技术涉及存储器安全。

背景技术

[0002] 一些数据处理系统可能需要运行涉及不应该被暴露给潜在攻击者的秘密或敏感信息的处理的软件。然而,提供足够的容量来将所有这样的信息存储在不能被攻击者篡改的存储器中可能是不可行的,所以有时可能有必要将一些敏感信息导出到易受攻击的存储器。例如,虽然可以保证片上存储的数据免受攻击,但是片上存储器存储可能是有限的,所以可能要求将数据写入到片外外部存储器。攻击者可以能够从外部存储器读取数据或者随着数据被传递给外部存储器而拦截它,并且/或者篡改存储在外部存储器中的数据值以试图在这样的在外部存储的数据随后被带回到处理系统中时引起不正确的行为。为了为存储在潜在不安全的存储器中的数据提供安全,可以在数据值被存储到存储器之前对它们进行加密,并且提供完整性检查以在从不安全的存储器读取数据时检查数据自它被存储到存储器以来尚未被修改。然而,这样的存储器安全操作引发性能代价,因为每次数据被写入到存储器或者从存储器读取时,它们可能要求执行附加计算和存储器访问发明内容
[0003] 至少一些示例提供一种设备,所述设备包括:
[0004] 存储器访问电路,用于控制对存储在存储器中的数据的访问;以及[0005] 存储器安全电路,用于验证存储在所述存储器的受保护存储器区域中的数据的完整性;其中:
[0006] 所述存储器安全电路被配置为维护包括多个节点的主计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一个与存储子节点的数据块相关联,所述子节点提供所述主计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一个与存储除所述主计数器完整性树以外的数据的数据块相关联;
[0007] 响应于对所述受保护存储器区域的目标数据块的访问,所述存储器安全电路被配置为通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;并且
[0008] 所述主计数器完整性树的节点中的至少一个包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为以下两项的组合:在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一个指定的各个次要计数值;以及
[0009] 响应于与所述主计数器完整性树的给定拆分计数器节点相关联的大小增加触发事件,所述存储器安全电路被配置为:增加所述给定拆分计数器节点的次要计数器的大小并且在至少一个镜像计数器完整性树的对应拆分计数器节点中分配所述给定拆分计数器节点的次要计数器的子集。
[0010] 至少一些示例提供一种用于控制对存储在存储器的受保护存储器区域中的数据的访问的方法,包括:
[0011] 维护包括多个节点的主计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据块相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一者与存储有子节点的数据块相关联,所述子节点提供所述主计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一者与存储有除所述主计数器完整性树以外的数据的数据块相关联;以及
[0012] 响应于对所述受保护存储器区域的目标数据块的访问,通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述主计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;
[0013] 其中,所述主计数器完整性树的节点中的至少一个包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为以下两项的组合:在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一个指定的各个次要计数值;以及
[0014] 响应于与所述主计数器完整性树的给定拆分计数器节点相关联的大小增加触发事件,增加所述给定拆分计数器节点的次要计数器的大小并且在至少一个镜像计数器完整性树的对应拆分计数器节点中分配所述给定拆分计数器节点的次要计数器的子集。
[0015] 至少一些示例提供一种用于控制数据处理设备以执行上述方法的计算机程序。所述计算机程序可以被存储在存储介质上。所述存储介质可以是非暂态存储介质。附图说明
[0016] 根据示例例的将结合附图阅读的以下描述,本技术的另外的方面、特征和优点将是显而易见的,在附图中:
[0017] 图1示意性地图示具有用于验证存储在存储器的受保护存储器区域中的数据的完整性的存储器安全电路的设备的示例;
[0018] 图2为了比较示出使用哈希树来检查存储在受保护存储器区域中的数据的完整性的示例;
[0019] 图3为了比较示出计数器完整性树的示例,其中树的每个节点指定用于检查数据的完整性的单片计数器;
[0020] 图4示出包括拆分计数器节点的计数器完整性树的示例,其中计数器被指定为在计数器之间共享的主要计数值和分别地为每个计数器指定的各个次要计数值的组合;
[0021] 图5示出计数器完整性树的节点的元数朝着根节点往树上减小的示例;
[0022] 图6示出计数器完整性树的一个节点指定不止一个主要计数值的示例,每个主要计数值对应于由该节点指定的次要计数值的不同子集;
[0023] 图7示出针对给定数据块的存储的认证码被与该数据块分开存储的示例;
[0024] 图8是示出控制对存储器的读取访问的方法的流程图
[0025] 图9是示出执行对存储器的写入访问的方法的流程图;
[0026] 图10和图11图示通过为稀疏地填充的镜像计数器完整性树的对应节点中的次要计数器的子集分配空间来增加拆分计数器节点的次要计数器的大小的示例;
[0027] 图12图示使用了不止一个镜像计数器完整性树的示例;
[0028] 图13示出针对主计数器完整性树和镜像计数器完整性树的对应节点使用相对于基地址相同的地址偏移;
[0029] 图14图示具有变化元数和可变次要计数器大小的树的示例;
[0030] 图15是比较计数器完整性树的不同实施方式的性能的曲线图;以及[0031] 图16示出可以被使用的模拟器示例。

具体实施方式

[0032] 一种设备可以具有:存储器访问电路,所述存储器访问电路用于控制对存储在存储器中的数据的访问;以及存储器安全电路,所述存储器安全电路用于验证存储在存储器的受保护存储器区域中的数据的完整性。例如,完整性验证可以用于检测由攻击者对存储在受保护存储器区域中的数据的攻击者篡改。例如,存储器可能是与包括存储器访问电路的集成电路分开的集成电路上的片外存储器。
[0033] 完整性验证可以取决于所存储的数据与通过存储器安全电路所维护的完整性元数据之间的比较。例如,当将数据写入到受保护存储器区域时,存储器安全电路可以基于存储到受保护存储器区域的数据的性质来生成完整性元数据,而当从受保护存储器区域读取数据时,存储器安全电路可以使用完整性元数据来检查数据是否自它被写入以来已改变。然而,这样的完整性元数据可能要求大量的存储空间以提供用于保护受保护存储器区域的整个地址范围的所有元数据。常常用于使数据保持在不易受攻击者攻击的存储单元中的容量可能是有限的,所以在实践中可能要求将完整性元数据的至少一部分存储到受保护存储器区域它本身。因为这使元数据变得易受到攻击,所以完整性元数据它本身可能需要在它被读取时经受完整性验证(以类似于感兴趣的实际数据的方式),通常使用也可以被存储在受保护区域中的另外的元数据来进行。因此,对于受保护存储器区域中的“真实”数据的每次读取,这可以触发除了感兴趣的真实数据之外的完整性元数据的多次读取,并且触发对应比较以检查完整性元数据是否是有效的,如此随着受保护存储器区域的大小增加,限制完整性验证对整体系统性能的性能影响可能变得越来越有挑战性。
[0034] 在下面讨论的技术中,存储器安全电路可以维护包括一定数量的节点的计数器完整性树。每个节点指定与受保护存储器区域的各个数据块相关联的多个计数器。计数器完整性树的节点包括至少一个父节点,对所述至少一个父节点来说由该父节点指定的计数器中的至少一个与存储计数器完整性树的子节点的数据块相关联,所述子节点为另外的数据块提供另外的计数器。另外,节点包括至少一个叶节点,对所述至少一个叶节点来说计数器中的至少一个与存储除计数器完整性树以外的数据的数据块相关联。
[0035] 树中的每个计数器被用于生成用于检查对应数据块的真实性的认证码。因此,响应于对受保护存储器区域的目标数据块的访问,存储器安全电路可以通过将与目标数据块相关联的存储的认证码与计算出的认证码相比较来验证目标数据块的完整性,所述计算出的认证码是基于目标数据块及计数器完整性树的与该目标数据块相关联的目标计数器而生成的。注意的是,目标数据块可能是存储感兴趣的“真实”数据的数据块,或者可能是存储计数器完整性树它本身的节点中的一个的数据块,其可以作为用于检查某个其他“真实”数据块的完整性的验证过程的一部分被访问。
[0036] 完整性树的使用有助于保护免于重放攻击,所述重放攻击是攻击者一次捕获当前数据值及其有效认证码(例如,通过读取存储器它本身或通过监视存储器与数据源之间的接口)并且稍后在该数据值不再是当前的之后试图用过时的数据块及其关联的有效认证码取代存储在存储器中的正确值(这能在设备中导致不正确的行为)的一种攻击的形式。通过提供来自一个节点的数据受到基于另一节点而计算出的认证码保护的完整性树,可根据针对一个节点的数据和认证码的旧对与所计算出的来自父节点的认证码和计数器之间的不一致性来检测陈旧数据的重放。实现完整性树的一个方式是作为计数器完整性树,其是树由计数器构成使得父节点提供用于为其子节点中的每一个生成认证码的计数器的一种完整性树。然而,为了避免计数器的频繁溢出,可能需要给计数器提供一定数量的位。这可限制可用来实现计数器完整性树的效率,因为它限制每树节点可提供多少计数器。
[0037] 在下面讨论的技术中,计数器完整性树的节点中的至少一个是拆分计数器节点,其指定至少两个计数器,所述至少两个计数器各自被定义为在至少两个计数器之间共享的主要计数值和分别地为至少两个计数器中的每一个指定的各个次要计数值的组合。因此,主要计数值指定在与由拆分计数器节点所覆盖的数据块中的至少两个相对应的两个或更多个计数器中的每一个之间共享的公共部分,并且各个次要计数值各自指定从计数器到计数器不同的部分。
[0038] 在计数器完整性树中使用这样的拆分计数器节点使得能实现更高效的存储器性能。因为每计数器单独地指定的次要计数值比在必须为每个计数器完全单独地提供所有所需数量的位的情况下小(因为一些位被曾经为一组计数器提供的共享主要计数器覆盖),所以这意味着可在给定大小的数据块内装配的次要计数值的数量是较大的并且如此可有效地增加其计数器可在计数器完整性树的单个节点内被指定的数据块的数量。换句话说,计数器完整性树节点的元数可以是较大的(元数指代每父节点提供的子节点的数量)。假定给定大小的受保护存储器区域,如果可增加拆分计数器节点的元数,则可减小将需要被遍历以获得用于检查数据块的完整性和计数器本身的完整性的所有计数器的计数器完整性树的层级数。这意味着在计数器完整性树的遍历期间生成更少的存储器业务,因此通过对于对受保护存储器区域中的“真实”数据的每次访问要求较少的读取操作而在性能上有所改进。
[0039] 另外,一些实施方式可以具有用于存储来自存储器的数据的子集的缓存,其中与在必须从存储器它本身读取数据的情况下相比,数据访问等待时间对缓存中的访问来说更短。因为拆分计数器节点允许在给定大小的数据块中表示较大数量的计数器,所以这意味着可在给定量的缓存空间中缓存更多的计数器,从而增加在缓存中存在检查给定数据访问的完整性所要求的计数器的可能性并且因此允许在数据已经被缓存时省略对存储器中的受保护存储器区域的更多的访问。
[0040] 在实践中,次要计数器可用比给定认证码通常所要求的更少的位来指定,所以拆分(主要-次要)计数器方法也往往比替代“哈希树”实施方案更高效,在所述替代“哈希树”实施方式中,树中的每个父节点为一定数量的子节点指定认证码,而不是为一定数量的子节点指定计数器。在实践中树的元数对树的拆分计数器节点来说与对哈希树来说相比实用性会较大,因为在为每个哈希给出将是提供足够的安全平通常所要求的位数的情况下,如果用于生成认证码的秘密密钥是未知的,则(通过蛮或以其他方式)推断或者猜测与给定数据块相关联的认证码(哈希)是密码上不可行的。
[0041] 因此,通过像上面所讨论的那样将完整性元数据实现为计数器完整性树,其中树的节点中的至少一些被实现为拆分计数器节点,计数器完整性树在生成树和/或将树用于验证数据完整性期间遍历起来可以是更高效的,从而改进系统性能。
[0042] 响应于与主计数器完整性树的给定拆分计数器节点相关联的大小增加触发事件,存储器安全电路可以增加给定拆分计数器节点的次要计数器的大小,并且在至少一个镜像计数器完整性树的对应拆分计数器节点中分配给定拆分计数器节点的次要计数器的子集。这允许增加主树的特定节点中的次要计数器的大小,而不会减小该节点的元数(在该节点下的子节点的数量),因为可在镜像计数器完整性树的对应节点内容纳存储较大次要计数器所要求的任何附加空间。可针对已检测到大小增加触发事件的主计数器完整性树的所选节点来增加次要计数器大小,但是不需要针对主计数器完整性树的所有节点来增加次要计数器大小。因此,镜像计数器完整性树可以是在镜像计数器完整性树的每个节点处不具有有效数据的稀疏地填充的树。此方法可以是有用的,因为存储器业务跨存储器地址空间不具有均匀分布-一些块被比其他块更频繁地访问。因此,此方法允许每个节点使用尽可能小的次要计数器大小来开始,以通过减小需要在验证给定数据块的完整性时遍历的树的层级数来改进性能,但是对于对应于存储器的频繁地访问的区域的那些节点,可使用镜像树来增加计数器大小以容纳附加计数器,以减小溢出的机会并因此减小在次要计数器溢出是必要的时触发的性能密集的重新加密或认证码重新计算操作的机会。因此,可变次要计数器大小方法可提供总体上比对于树的给定节点具有某个固定次要计数器大小的树更好的性能。
[0043] 设备可以具有第二存储器并且存储器安全电路可以将根验证数据存储到第二存储器,所述根验证数据指定主计数器完整性树的根节点,或者指定用于验证主计数器完整性树的完整性的信息(在第二情况下,根节点它本身可以被存储在受保护存储器区域中)。第二存储器可以在信任边界内部,所以不易受到攻击。例如第二存储器可能是片上存储器,然而受保护存储器区域可能位于片外存储器中。根节点是作为树的每一其他节点的祖先节点的节点。因此,根验证数据使得能够基于不易受到攻击的可信数据来对位于受保护存储器区域内的计数器完整性树的任何部分进行认证。在一些情况下,存储在第二存储器中的根节点它本身可能是如上面所讨论的拆分计数器节点。可替代地能使用单片(非拆分)计数器来实现根节点。另外,存储在第二存储器中以用于验证根节点的完整性的信息可以不是根节点它本身,而是可以包括用于与从存储在受保护存储器区域中的根节点导出的认证值相比较的存储认证值并且/或者可以包括用于计算要从根节点导出的认证值的存储的计数器。在已分配了镜像计数器完整性树并且已填充了镜像计数器完整性树的根节点的情况下,第二存储器还能存储用于验证镜像计数器完整性树的根节点的完整性的根验证数据,或者能存储镜像计数器完整性树它本身的根节点。
[0044] 因此,当目标数据块被访问时,存储器安全电路可以执行一个或多个验证检查以验证包括目标计数器和根节点的主计数器完整性树的分支上的计数器的完整性(并且取决于主计数器完整性树的总大小,验证中间节点上的一个或多个中间计数器),并且那些验证检查中的至少一个可以取决于存储在第二存储器中的根验证数据。
[0045] 当受保护存储器区域的目标数据块被更新时,存储器安全电路可以更新目标计数器并且基于经更新的写入到目标数据块的数据和经更新的目标计数器两者来重新计算与目标数据块相关联的存储的认证码。因此,通过每次目标数据块被更新时更新用于计算认证码的目标计数器,这在认证码的计算方面提供新鲜度,这使推断用于生成认证码的秘密密钥变得更困难。
[0046] 对计数器的更新能被以提供一系列更新的任何方式完成,所述任何方式避免计数器值的重复并且对所述任何方式来说,可在已经使用了计数器的每一可能的值时检测重复(在数据被加密或者认证的方式没有某种其它变化的情况下重用相同的计数器值可能冒成功重放攻击的险)。相对简单的方法可以是通过每次目标数据块的对应数据被更新时递增目标计数器来更新计数器。可替代地,其他实施方式能在对应数据的每次更新时非单调地更新计数器(例如能对单调增加的参考计数器进行变换,例如通过应用具有常数的异或(XOR)操作,以给出计数值的非单调增加的序列,其在每次更新时被写入到目标计数器,以便使攻击者更难以确定计数器的变化模式)。
[0047] 如果计数器溢出(返回到先前使用的计数器值),则溢出可以触发某个其他动作,诸如改变用于对数据进行加密的加密密钥或改变用于生成认证码的秘密密钥或其他参数,以使得当加密/认证过程的某个其他参数已改变时重用旧计数器值更安全。
[0048] 因为可以将与目标数据块相关联的目标计数器存储在受保护存储器区域的另一数据块中,所以对计数器的更新可能要求对受保护存储器区域中的另一数据块进行另一写入访问,这因此要求更新与该数据块相关联的另一计数器,这本身可以触发另一写入访问等。因此,原始写入访问可以触发一系列连续的计数器更新和认证码重新计算,从而遍历树直到到达根为止。
[0049] 计数器完整性树的所有节点都不必使用拆分计数器方法。例如,将在受保护存储器区域内保护的数据块的总数可以不是在计数器完整性树中实现的元数(每父节点的子节点的数量)的精确幂,在此情况下可以存在可以具有较低的元数并且如此可以不使用拆分计数器方法的一些节点,因为存储较小数量的单片计数器可能足以提供所要求的元数。因此,并非所有节点都需要使用拆分计数器。
[0050] 对于被实现为拆分计数器节点的那些节点,当由于对对应目标数据块中的对应数据的写入而需要更新以拆分形式实现的目标计数器时,存储器安全电路可以更新与目标计数器相对应的次要计数值。另外,存储器安全电路可以基于经更新的目标数据块的数据、对应于感兴趣的目标计数器的对应主要计数值以及经更新的与感兴趣的目标计数器相对应的次要计数值来重新计算与目标数据块相关联的存储的认证码。如果对次要计数值的更新未触发溢出,则不需要更新和与目标数据块共享相同的主要计数值的其他数据块相关联的任何其他认证码。
[0051] 然而,当对次要计数值的更新引起溢出(对先前使用的次要计数值的重用)时,那么存储器安全电路可以针对感兴趣的目标计数器更新对应主要计数值。因为除目标数据块以外还存在对于其计数器共享该主要计数值的一定数量的数据块,所以更新主要计数值将意味着先前存储的认证码将不再与根据主要计数值以及那些数据块的数据和次要计数器计算的认证码匹配。因此,除了为目标数据块它本身重新计算存储的认证码之外,存储器安全电路还可以重新计算与其他数据块中的每一个相关联的存储的认证码,所述其他数据块与共享对应主要计数值的计数器相关联。因此,偶尔在各个次要计数器之间共享主要计数值可以意味着对于除目标数据块它本身以外的块要求对认证码进行一些附加计算。然而,很少引发这种性能惩罚,同时通过使用拆分计数器方法来增加树节点的元数的性能增益帮助加快计数器树的每次遍历,使得平均起来性能在拆分计数器方法情况下更好。
[0052] 另外,响应于至少一个镜像计数器完整性树的给定节点的次要计数值的溢出(或者响应于给定节点的次要计数器的溢出的速率满足预定条件,诸如超过阈值),存储器安全电路还可以增加该节点的次要计数器的大小并且将次要计数器的子集分配给至少一个镜像计数器完整性树的对应节点。也就是说,当次要计数器溢出(或者太频繁地溢出)时,这可以是次要计数器的当前大小太小的指示,所以增加次要计数器的大小以降低同一块中的其他次要计数器将频繁地溢出的可能性可以是有用的。不必总是响应于次要计数器的任何溢出而增加次要计数器的大小—在一些情况下可能需要满足一定数量的条件才能针对给定节点触发次要计数器大小增加,所述一定数量的条件中的一个可以是该节点的次要计数器的溢出。能以不同的方式监视次要计数器溢出的速率,例如作为相对于时间(给定时间段内的溢出次数)或者相对于存储器访问次数(对于一定数量的存储器访问检测到的溢出次数)或者相对于对存储器的写入操作次数的速率。还能响应于数据重新加密或认证码重新计算的速率超过设置阈值而增加次要计数器大小(再次,能相对于时间、存储器访问次数或对存储器的写入操作次数来定义数据重新加密或认证码重新计算的速率)。
[0053] 能在计数器完整性树的任何节点(包括父节点和叶节点两者)处提供拆分计数器节点。然而,对父节点中的至少一个来说成为拆分计数器节点可以是特别有用的。这可使得能实现树的更快扇出,使得覆盖给定大小的受保护存储器区域需要树的较少层级。在一些实施方式中,存储器安全电路可以维护在计数器完整性树的不同层级处包括至少两个拆分计数器节点的计数器完整性树。
[0054] 在一些实施方式中,计数器完整性树的每个节点能具有相同的元数,即每个节点可以为相同数量的数据块或子节点指定计数器。然而,树的至少两个节点也可以为不同数量的子节点指定计数器。
[0055] 特别地,主计数器完整性树的至少一部分被实现为使得在树中更高处(即更靠近根节点)的节点与离根更远并更靠近树叶的节点相比具有较少的元数可以是有用的。因此,树的元数可以从层级到层级可变并且可以随着一个人遍历树以接近根节点而减小。
[0056] 例如,主计数器完整性树可以包括为第一数量的数据块指定计数器的第一拆分计数器节点以及为第二数量的数据块指定计数器的第二拆分计数器节点,所述第二数量大于所述第一数量,其中第一拆分计数器节点是第二拆分计数器节点的父节点。通过减小父节点相对于其孩子的元数,与子节点相比较在父节点中有较少的计数器,所以存在更多的空间以包括具有较大数量的位的计数器。因此,由第一拆分计数器节点指定的次要计数值与由第二拆分计数器节点指定的次要计数值相比可以具有较大数量的位。这可以是非常有用的,因为随着一个人朝着根往树上爬,到树的每个层级的写入业务量往往以指数方式增加,因为在树的较高层级处的每个节点与沿树更往下的节点相比覆盖更宽范围的地址。通过使元数变得更小,并且使次要计数值变得较大,随着一个人朝着根节点登上树,这降低那些较高层级处的计数器溢出的可能性,以降低需要针对较高层级处的节点重新计算认证码的频率。因此,在较低的层级处提供较高的元数且在较高的层级处提供较低的元数可考虑个别读取操作上的等待时间和当发生计数器溢出时的等待时间提供更好的性能平衡。
[0057] 类似地,如果在树中存在分别包括祖父节点、父节点和子节点的三个或更多个层级,则祖父节点相对于父节点可以在元数方面进一步减小,使得祖父节点与父节点相比可以指定较少的计数器(覆盖较小数量的子节点),并且用于祖父节点的次要计数值与父节点中的次要计数值相比可以具有较大数量的位。因此,在上面描述的与父节点相对应的第一拆分计数器节点和与子节点相对应的第二拆分计数器节点情况下,包括第三拆分计数器节点的另一祖父节点可以为第三数量的数据块指定计数器,所述第三数量小于用于第一(父)拆分计数器节点的第一数量。
[0058] 在一些实施方式中,用于树的每个节点的元数可以是2的精确幂。因此,主计数器完整性树的每个节点能为一定数量的数据块指定计数器,所述数量是2的精确幂,例如8、16、32或64。
[0059] 然而,在一个实施方式中主计数器完整性树的至少一个节点可以为除2的精确幂以外的一定数量(例如36或48)的数据块指定计数器。也就是说,至少一个拆分计数器节点的元数可以是除2的精确幂以外的值。使用对应于非2的幂数量的数据块的树节点对技术人员来说将是极其反直觉的,因为存储器空间通常被按与地址的2的幂单位相对应的块组织以简化地址计算算法。然而,人们已经认识到,常常提供位于二的两个相邻幂之间的元数可提供更好的性能平衡,因为实现具有与二的次最高幂相对应的元数的树节点可以将每个计数器的大小减小太多,以致可以存在可能影响执行时间的大量溢出,同时使用二的次最低幂能导致计数器被过度提供有位,使得溢出的机会是可忽视的,但是计数器的许多位很少被使用。因此,有时对于被计数器完整性树的给定节点覆盖的数据块的数量使用非二的幂数可对照溢出的可能性来更好地使要在读取/写入访问时遍历的树层级的总数平衡,以改进跨操作时段的平均性能。虽然对于树节点使用非二的幂元数可使用于确定存储有计数器完整性树的给定节点的地址的地址计算算法复杂,但是这种附加开销可以被对照溢出的可能性来更好地使遍历树所要求的存储器访问次数平衡时的附加性能好处抵消。
[0060] 存储器安全电路在一些示例中可以从受保护存储器区域的与目标数据块相同的缓存行读取针对目标数据块的存储的认证码。缓存行可以是可由存储器作为单个数据访问返回的存储器地址空间的单位。通过将存储的认证码与目标数据它本身一起存储在同一缓存行中,这避免需要执行第二存储器访问以便读取存储的认证码以用于与所计算出的针对目标数据块的认证码相比较。
[0061] 然而,其他实施方式能将存储的认证码存储在与目标数据块分开的缓存行中。例如,一些存储器芯片可以提供用于存储与主存储器区域中的数据相关联的检错/纠错码的辅存储器区域。这样的存储器芯片可以被设计为响应于存储器访问而高效地返回主数据及其关联的检错/纠错码,即使它们被存储在单独的缓存行中。因此,在一些实施方式中,存储的认证码能被存储在被设计用于与检错/纠错码一起使用的存储器芯片的辅存储器区域中。
[0062] 当在存储的认证码与所计算出的针对正在访问的目标数据块的认证码之间检测到失配时,那么存储器安全电路可以触发安全违反响应。安全违反响应可能是用于防止对存储器成功访问或者用于针对可能的攻击采取对策的许多操作中的任一个。例如,安全违反响应能包括下列中的任一个:拒绝对用于允许对目标数据块中的数据访问进行解密的加密密钥的访问;拒绝要访问目标数据块的请求;用虚设数据、随机数据或与目标数据块的先前内容不相关的任何其他数据覆写目标数据块以防止该数据被访问;引发异常以触发诸如操作系统的软件进程以针对攻击采取对策;在数据已受到损害的情况下覆写或者清除受保护存储器区域中的所有数据(而不只是目标数据块);或/或禁用设备或存储器以便防止对设备或存储器的任何进一步正确的使用(例如,通过采取诸如通过存储器或设备中的熔融连接烧录这样的物理对策以一旦器件已经受攻击就防止对设备的正确使用)。当安全违反被识别时采取的动作的精确细节可以随实施方式的不同而不同。
[0063] 存储器安全电路可以具有加密/解密电路以对写入到受保护存储器区域的数据块的数据进行加密并且以对从受保护存储器区域的数据块读取的数据进行解密。因此,可以不使数据不受阻碍暴露给能从受保护存储器区域读取它的攻击者。计数器完整性树通过提供用于检测对数据在它位于受保护存储器区域中时的篡改和重放攻击的措施来提供进一步保护。被写入到受保护存储器区域的计数器完整性树的任何节点也可能以类似于“真实”数据它本身的方式经受加密和解密。
[0064] 在一些实施方式中,映射到经受存储器安全电路控制的存储器的所有地址空间都可以被认为是受保护存储器区域,并且所以对该存储器的所有访问都可能使用计数器完整性树经受加密、解密和完整性验证。存储器访问电路还可以控制对至少一个其他存储器(诸如不经受相同保护的单独的存储器单元)的访问。可替代地,在同一存储器器件内,能将存储器内的不同的地址范围分别映射到受保护区域和不受保护存储器区域。在不受保护存储器区域中,存储器访问电路可以独立于由存储器安全电路提供的任何保护而控制对该区域中的数据的访问,例如不要求加密/解密,并且不要求基于计数器完整性树和认证码的任何完整性验证。因此,能独立于计数器完整性树而控制对不受保护存储器区域的访问。例如,可以存在不需要针对攻击者来保护的一些非敏感数据。通过将该数据写入到不受保护存储器区域,改进了性能,因为不必执行任何附加存储器访问来读取/写入完整性树数据和用于验证数据的真实性的认证码。
[0065] 可在具有在硬件中提供存储器安全电路的功能的定制电路的物理器件中实现上面讨论的技术。因此,在处理设备上执行的软件不必知道正在执行加密或解密或任何完整性验证操作,因为这能由在硬件中提供的存储器安全电路自动地完成。因此,当软件指示要将数据写入到被映射到受保护存储器区域的地址时,存储器安全电路能在将数据写入到存储器之前对它进行加密,并且控制对应计数器完整性树节点的生成和/或基于计数器完整性树验证存储器尚未被攻击者损害。类似地,在通过软件对受保护存储器区域进行读取时,存储器安全硬件可以控制对所读取的数据的解密以及对用于验证所读取的数据仍然有效的计数器完整性树节点的检查。
[0066] 然而,在其他示例中,加密/解密、存储的认证码和计数器完整性树的生成以及基于存储的认证码和计数器完整性树的完整性验证操作可以通过在设备内的通用处理电路上执行的软件来执行,所述设备它本身不具有用于自动地执行这样的存储器安全操作的硬件。例如,软件可以是诸如操作系统或管理程序这样的平台级代码,所述操作系统或管理程序可以支持在其控制下在它下面运行的其他应用。例如虚拟机或模拟器程序可以执行应用代码好像硬件实际上具有存储器安全电路一样,但是可以检测对被映射到保护存储器区域的地址的存储器访问,并且针对这样的访问执行对数据的附加加密或解密或用于在数据被实际上写出到受保护存储器区域之前维护计数器完整性树并且基于存储的认证码和计数器完整性树来验证数据的完整性的操作。因此,在一些示例中该技术可以提供存储介质,所述存储介质存储用于控制数据处理设备以提供如上面所讨论的方法的计算机程序。该计算机程序也能被以非暂态形式记录,诸如通过在网络上下载它。
[0067] 图1示意性地图示数据处理系统2的示例,所述数据处理系统2包括集成电路或片上系统4,所述集成电路或片上系统4包括至少一个处理器核心6以用于执行程序指令以执行数据处理操作。虽然图1在一些情况下仅示出一个处理器核心,但是片上系统4可以包括多个处理器。每个处理器核心或处理器核心群集可以具有缓存8(或多级缓存8、10)。存储器控制器12作为用于控制对片外存储器14的访问的存储器访问电路,所述片外存储器14位于与片上系统4分开的集成电路上。虽然对片上数据的访问可能难以被攻击者篡改,但是片上系统的边缘可以作为信任边界,并且越过该边界的任何数据都可以通过在存储器控制器12与片外存储器14之间的物理通道16上拦截数据或者通过在数据被存储在片外存储器14中的同时读取或者修改它而易受到攻击。虽然图1示出信任边界对应于片上系统的边缘的示例,但是在其他情况下,在片上系统内可能存在能使数据越过信任边界暴露于潜在攻击的信任边界。
[0068] 片上系统4可以包括存储器安全单元20,所述存储器安全单元20被提供用于保护存储到片外存储器14的受保护存储器区域22的数据免受能够物理访问系统并具有观察和/或重放在微处理器与片外系统存储器14之间交换的数据或代码的能力的恶意对手的影响。受保护存储器区域22包括要保护的数据24以及在数据24的验证中使用的完整性树元数据
26。在片外存储器14中还提供了不受保护存储器区域28,并且存储在不受保护区域中的数据30不受存储器安全单元20保护,如此被攻击者自由地访问和修改。在一些实施方式中,地址到受保护存储器区域22和不受保护存储器区域28的映射可以通过硬件来固定,使得由处理器核心6执行的操作系统或其他软件不可以改变哪些地址被映射到受保护存储器区域22或不受保护存储器区域28。可替代地,如果可信任控制地址映射的操作系统,则可以通过处理器在软件的控制下改变控制哪些地址被映射到受保护区域或不受保护区域的地址映射,如此受保护区域和不受保护区域不必总是映射到片外存储器14中的相同的物理位置。在一些实施方式中,可以不在片外存储器14中提供任何不受保护存储器区域28-在这种情况下整个片外存储器可能被认为是受保护存储器区域22。
[0069] 存储器安全单元20包括用于对被写入到片外存储器14的数据进行加密并且对从片外存储器读回的数据进行解密的加密/解密电路32。这通过防止恶意观察者不受阻碍看到从片外存储器14读取或者存储到片外存储器14上的数据来提供隐私。由加密和解密所使用的加密密钥可以被存储在片上系统上的片上存储器(例如SRAM)34内或在存储器安全单元20它本身内。任何已知技术可以被用于加密和解密,并且可使用用于保护加密密钥的任何已知方法。
[0070] 存储器安全单元20还包括完整性树生成和验证电路36,在下面通常称为验证电路36。验证电路36负责在受保护存储器区域中维护完整性树26。完整性树可以提供用于验证当前存储在受保护区域22中的数据是否仍与当它被写入到该区域时相同的许多条信息。例如可使用消息认证码(MAC)来实现对数据完整性的检查,所述MAC可以使用诸如AES-GCM或SHA-256这样的单向密码函数来从所存储的数据生成,所述AES-GCM或SHA-256使用使攻击者在用于生成认证码的密钥未知时通过蛮力来猜测与特定数据值相关联的认证码变得在计算上不可行的函数。认证码可以被与数据24一起存储在受保护存储器区域22中或在单独的数据结构中。所存储的用于数据值的MAC使用用于生成所存储的MAC的同一单向函数来对照从所存储的数据导出的计算出的MAC进行检查,并且如果在所存储的MAC与计算出的MAC之间检测到失配,则这可以指示数据已被篡改。
[0071] 然而,单独提供MAC可能不足以防止所有攻击。另一种攻击可以是重放攻击,其中能够物理访问系统的恶意人员存储加密数据和先前在总线上观察到的MAC的合法组合并且然后稍后将这些重放到总线上,其意图是用陈旧值破坏给定存储器位置处的数据,以便损害系统的操作。可使用完整性树26来防止这样的重放攻击,所述完整性树26可以提供节点的树结构,其中树的每个叶节点提供用于验证受保护存储器区域22中的数据块24中的一个有效的完整性数据并且叶节点的父节点提供用于检查叶节点它本身有效的另外的完整性数据。父节点本身可以使用树的另外的父节点来检查,并且这随着树被遍历直到树的根而继续,这然后可以提供验证的最终来源。通过将树它本身的根节点存储在片上,或者通过存储使得存储在受保护存储器区域中的根节点能够被认证的其他信息,可以使用存储在片上存储器34中的根验证数据38来验证树的根是真实的。
[0072] 存储器安全单元20可以具有用于计算检查特定数据块所要求的完整性树26的节点位于受保护存储器区域22中的地址的地址计算电路40。可选地,存储器安全单元20还可以具有用于缓存完整性树的最近使用的节点以便比在必须从片外存储器14再次读取它们的情况下进行更快访问的缓存42。可替代地,存储器安全单元20可能能够访问还可以被处理器核心6使用的缓存10中的一个,所以将来自完整性树26的数据缓存在共享缓存10中还能有助于加快存储器安全单元20的操作。
[0073] 存在可用来实现完整性树的许多方式。图2为了比较示出将完整性树26实现为由各个数据块的哈希(MAC)构建的哈希树的第一示例。如图2中所示,每个数据块50具有通过将MAC哈希函数54应用于数据块50的内容而计算出的对应MAC 52。MAC哈希函数54还取决于计数器56,所述计数器56在每次对数据块进行更新时被更新,以便提供新鲜度(从数据和秘密密钥导出MAC的方式的变化),使得使攻击者更难以推断秘密密钥。在此方法中用于每个MAC生成的计数器56可以被与哈希树26分开存储在单独的数据结构中。用于存储计数器的数据块本身可能是使用MAC来保护的数据块50中的一些。可替代地,计数器能被存储在不受保护存储器区域28中,因为对计数器的篡改将仍然是可检测的,因为它将使对应数据块的MAC认证失败。
[0074] 针对一组特定数据块计算出的所有MAC 52都被一起收集在完整性树26的叶节点60内,使得叶节点指定覆盖地址空间的特定范围的MAC。然后可通过基于叶节点60的内容和用于生成另一MAC的另一计数器64来计算另一MAC 62来来保护树的叶节点60的完整性,所述另一MAC它本身被与来自其他叶节点的MAC一起存储完整性树26的非叶节点66内。此非叶节点66作为其MAC被存储在非叶节点66中的叶节点60中的每一个的父节点。因此,每个父节点存储用于保护在大小上相当于被存储在其子节点中的每一个中的所有MAC覆盖的总存储器的存储器块的MAC。例如,在图2的情况下树是8元哈希树,所以每个父节点有八个子节点并且所以覆盖大小是被其孩子中的一个覆盖的存储器区域八倍的存储器区域。类似地,对于每个非叶节点通过将同一MAC计算函数应用于非叶节点但是使用特定于该非叶节点的另一计数器来计算另一MAC。通过继续将子节点的MAC一起分组在受单个MAC保护的父节点中,最终可将整个受保护存储器区域22减小至根节点66-R,所述根节点66-R存储用于一起覆盖整个受保护存储器区域22的许多子节点的MAC。所需树的层级数可以取决于受保护存储器区域的大小。通过将根节点它本身作为根验证数据38存储在片上存储器34中,或者如图2中所示通过计算根节点的另一MAC并且将该MAC 68作为根验证数据38存储在片上存储器34中,可验证根节点66-R的真实性。
[0075] 因此,当必须访问数据值时,对应数据块50经受用于生成其MAC的同一MAC函数54,并且对照存储在树的对应叶节点60中的MAC来比较结果,然后遍历树,其中每个连续的子节点基于从其父节点获得的MAC被验证,直到到达根节点并且根节点也被验证为止。如果对从目标数据块50回到根节点的分支上的节点中的每一个的所有验证是成功的,则允许数据访问。每个计数器56在对应数据块被更新(写入)时被递增,使得数据块与其MAC之间的映射随着时间的推移而改变。
[0076] 图2中所示的方法的问题是为了提供足够的安全使得对攻击者来说给定特定数据值但在不知道秘密密钥的情况下能够通过蛮力来猜测对应MAC或者破解它是计算上不可行的,每个MAC可能需要相当大量的位,例如64位。这可以限制在一个缓存行中可装配多少个MAC。例如,如果缓存行大小是512位,则可以在每个缓存行内装配八个64位MAC,并且所以树的每个节点局限于具有八个子节点。在8元哈希树情况下,随着受保护存储器区域的大小增加,必须从叶节点一直遍历直到根的树的层级数可以变得相对大。因为必须被访问以验证单个数据块50尚未被篡改的每个缓存行将添加到片外存储器14与存储器控制器12之间的额外存储器业务,所以这可影响性能。类似地,当在片外存储器内更新数据时,那么在叶节点处递增计数器然后可能要求更新对应于该存储器块的较高节点处的所有MAC,因为与一个节点相关联的计数器的每次递增将需要重新计算并更新父节点中的对应MAC,这然后将触发与该节点相关联的计数器的递增,从而要求重新计算存储在下一个最高父节点中的MAC,从而触发计数器的进一步递增,依此类推直到达到根为止。树的元数越低,需要被遍历以保护给定大小的存储器区域的层级数越大,并且所以对性能的影响越大。
[0077] 图3示出使用计数器树而不是哈希树来实现完整性树26的替代方式。在这种情况下,不是树的给定节点提供要用于对树的后续节点处的块进行认证的所有MAC,而是每个节点替代地为树的当前节点的每个子节点定义单独的计数器。不是完整性树26它本身的一部分的受保护存储器区域22的每个数据块50都受到MAC 80保护,所述MAC 80是基于数据块50的内容和从计数器完整性树26的叶节点84读取的计数器82而计算的。叶节点84可以指定与不同的数据块50相对应的许多计数器。在此示例中,为给定数据块50计算出的MAC 80被存储在与对应数据相同的缓存行中。这不是必要的,并且在其他示例中,能与对应数据分开地存储MAC。对于树的每个叶节点84,基于叶节点84的内容以及从作为叶节点84的父节点的非叶节点88读取的计数器86来计算类似的MAC 80。每个非叶节点88提供用于多个子节点84的计数器。类似地,在树的每个层级处,用于为给定子节点计算MAC 80的计数器86被从与该子节点的父节点相对应的数据块88读取,一直直到根节点88-R。存储器安全单元20的地址计算电路40针对感兴趣的给定目标数据块识别哪些其他数据块存储完整性树26的提供相关计数器的所需节点。最终,到达根节点88-R并且根据根节点的内容和根计数器89来计算用于根节点的MAC 80。根计数器89能作为根验证数据38被存储在片上存储器34中。可替代地,树的整个根节点88-R能被存储在片上存储器中的根验证数据中,并且在这种情况下不需要为此根节点计算另一MAC。
[0078] 总之,在图3中所示的计数器树情况下,在树的每个层级处通过使用存储在同一缓存行中的使用从树的父节点读取的计数器来计算出的MAC来确保计数器缓存行的完整性。
[0079] 每次对应数据块被写入时,每个计数器被递增或者更新。例如,当提供非完整性树数据的数据块50被更新时,那么在树的叶节点84中的一个内的对应计数器被递增。这然后要求重新计算与叶节点84相关联的MAC 80,这触发树的下一个最高父节点88中的计数器的递增并且依此类推一直回到根。
[0080] 当计数器中的一个溢出例如从计数器的最大正值回绕到最大负值或者到零时,那么先前的计数器值中的一个可以重复,所以存在重放攻击可能变得可能的风险。在这种情况下,存储器安全单元20可以更新由加密电路32使用的加密密钥,使得再次这将在不受阻碍看到的特定数据值与基于加密数据值和计数器而生成的MAC之间强制不同的映射。然而,对加密密钥的这些更新可能是昂贵的,因为当加密密钥改变时,受保护存储器区域22中的所有数据将需要使用旧密钥来解密并且使用新密钥来重新加密然后写回到存储器。这在性能方面可能是昂贵的操作,因为它可能要求大量的读取和写入。为了减小要求对受保护存储器区域22进行这样的完全重新加密的频率,可能期望给每个数据块提供具有足够数量的位以使这样的溢出变得罕见的计数器。例如,在图3中所示的方法中,每个512位缓存行具有用于MAC的64位并且这为计数器留下448位,其可被划分成各自56位的八个计数器。虽然减小每个计数器的大小能允许在一个缓存行中装配更多的计数器,但是这将导致可能对性能产生影响的更频繁的溢出。因此,图3中所示的方法还往往限制树的元数(在图3的示例中为8的元数),这限制树可扇出的速度并增加要求被遍历的层级数以便使整个树覆盖一定大小的受保护存储器区域22。
[0081] 图4示出可由存储器安全单元20使用来相对于图2和图3中所示的示例改进性能的拆分计数器完整性树26。计数器树像在图3中一样具有叶节点和非叶节点84的类似布置,其中每个父(非叶)节点88提供用于为其子节点中的每一个计算MAC 80的计数器并且叶节点84提供用于为其他与非完整性树相关的数据块50计算MAC的计数器82。然而,在图4中,树的节点中的至少一些使用拆分计数器方法,其中树的该节点中的计数器使用主要计数值95和许多次要计数值97来以拆分形式表示。次要计数值97中的每一个均对应于被树的该节点覆盖的数据块中的一个。用于给定数据块的实际计数器通过主要计数值95(其在被该节点覆盖的所有块之间被共享)和为该数据块所指定的具体次要计数值97的组合来定义。例如,用于块0的计数器能对应于与为块0所选择的具体次要计数值级联的主要计数值;用于块1的计数器可对应于与为块1所选择的具体次要计数值级联的共享主要计数值;依此类推。因此,当为给定数据块计算MAC 80时,MAC函数54被应用于数据块的内容以及来自父节点的共享主要计数器95和为该特定数据块所选择的次要计数器97中的一个。每个次要计数器97在对应数据块的每次更新时被递增。当一组对应的次要计数器97中的任一个溢出时,共享主要计数器95被递增。
[0082] 通过使用此拆分计数器方法,为每个数据块所提供的计数器的总大小可仍然是相对大的,同时对于每个数据块仍然具有单独的计数器,以使攻击者更难以猜测应用于给定数据块的计数器值。例如,能给使用64位MAC的512位缓存行提供64位主要计数器和32个12位次要计数器,从而为每个数据块有效地提供76位计数器。因此,可通过提供主要计数器和次要计数器的足够大的总位数来减小要求对整个受保护存储器区域进行重新加密的计数器溢出的机会。
[0083] 然而,因为可被一个父节点覆盖的子节点的数量取决于次要计数器的数量,并且图4中所示的方法中的次要计数器小于图3中所示的单片计数器,所以这意味着可大大地增加树的元数以便对于任何给定大小的缓存行,每父节点许可较大数量的子节点。在图4的示例中,元数对树的拆分计数器节点来说是32。这意味着树的伸出大得多,所以要求更少的层级以便覆盖给定量的存储器。如用图4的叶节点84所示的,树的所有节点都不必使用拆分计数器方法,例如一些节点能仍然使用图3中所示的单片方法并且如此可以具有不同元数,例如对图4的示例来说为8。这在受保护存储器区域的总大小未映射到与在拆分计数器节点中使用的元数的精确幂相对应的许多块的情况下可能是有用的,在此情况下可能要求较低元数的一些节点。
[0084] 如图5中所示,元数对每个拆分计数器节点来说不必相同。实际上,随着树被朝向根节点向上遍历而减小元数可以是有用的。这是因为随着树朝向根节点上升,写入业务以指数方式增加,所以计数器溢出的机会较大。通过与较低层级(更靠近叶)相比实现具有较低元数的树的较高层级(更靠近根),这可总体上提供更好的性能。例如,图5示出具有以下各项的示例:提供有48个8位次要计数器的48元节点100、提供有36个10位次要计数器的36元父节点102以及具有32个12位次要计数器的32元祖父节点104。通过增加往树向上的次要计数器的大小,可减少存储器的大区域由于计数器溢出而必须使其MAC被重新计算的次数。当然,图5中所示的主要计数器、次要计数器和MAC的特定大小只是一个示例,并且可取决于可用的缓存行大小和特定系统的要求而改变这些大小。
[0085] 如图5中所示,树的节点中的一些可以具有不是二的精确幂的元数,例如图5中所示的36元或48元节点。尽管这可能要求更复杂的地址计算电路40,例如查找表而不是基于地址位的子集进行索引,然而使用非二的幂元数可能是有用的,因为它们可以在溢出的可能性与需要在每次读取/写入时遍历的树的层级数之间提供更好的平衡,使得它们不管更复杂的地址生成都提供整体性能改进。
[0086] 在图4和图5的示例中,树的每个拆分计数器节点指定在用于该节点的所有子节点的所有次要计数器之间共享的单个主要计数器95。然而,如图6中所示这不是必要的并且在一些情况下,树的给定节点能指定各自对应于次要计数器97的一部分的多个主要计数器95。虽然每节点指定附加主要计数器能减小可在给定大小的缓存行中提供的次要计数器的数量,但是在一些情况下可能期望这在次要计数器溢出时减少开销,因为共享同一主要计数器的许多数据块将不必在主要计数器被递增时使其MAC被重新计算。
[0087] 虽然图4和图5中的示例将与数据块相关联的MAC 80存储在与数据它本身相同的缓存行中,但是如图7中所示这不是必要的,并且其他实施方式能将MAC 80存储在与提供受到该MAC保护的数据块或完整性树节点的缓存行112分开的缓存行中。例如MAC 80能被存储在具有用于存储ECC的专用区域的存储器芯片的纠错码(ECC)区域中。
[0088] 图8是示出处置要请求从片外存储器14读取数据的读取访问的方法的流程图。例如,读取访问可以通过由处理器核心6执行的加载指令或者通过由缓存控制器发起的缓存预取请求来触发。在步骤200处,通过存储器控制器12接收读取访问请求。在步骤202处,存储器控制器确定通过读取访问请求的地址所指定的目标数据块是否被映射到受保护存储器区域22。如果目标地址被映射到不受保护存储器区域28,则在步骤204处允许读取访问在没有任何完整性验证的情况下继续进行,而与完整性树26无关,并且在不用执行任何解密的情况下读取数据。从片外存储器读取的数据被返回给处理器核心和/或缓存。
[0089] 如果目标地址确实映射到受保护存储器区域22中的数据块,则在步骤206处验证电路36随着树被遍历直到树26的根节点而对于从目标数据块以及计数器完整性树的位于与目标数据块相同的分支上的一个或多个祖先节点读取的数据执行完整性验证。对于相关完整性树分支上的数据块中的每一个,完整性树验证电路36计算作为存储在相关数据块中的数据及其如由树的父节点所指定的对应计数器的函数的计算出的MAC。如果父节点是拆分计数器节点,则其计数器通过共享主要计数器和所选次要计数器的组合来定义,所选次要计数器是根据相关数据块在被该父节点覆盖的存储器块内的位置而从父节点选择的。所计算出的MAC对照针对所存储的用于正在检查的数据块的MAC被比较,并且在步骤208处确定了所存储的MAC和所计算出的MAC对目标块和计数器完整性树的一个或多个祖先节点中的每一个来说是否匹配。如果对在步骤206处测试的数据块中的每一个来说在所存储的MAC与所计算出的MAC之间存在失配,则在步骤210处触发安全违反响应,诸如俘获到操作系统以处置安全违反或者禁用对片外存储器14的访问或者采取物理对策,诸如通过电连接熔合以防止对存储器的继续访问。如果对于被测试块中的任一个未检测到失配,则在步骤212处允许数据访问,所以从原先作为目标的数据块读取的数据被加密/解密电路32解密并且然后以解密形式返回以供由处理器或缓存中的一个使用。
[0090] 步骤206处的验证因此可能要求对受保护存储器区域中的不同的数据块进行一系列验证以便检查完整性树的每个步骤。可以任何次序触发这样的验证所要求的读取,并且类似地,可以任何次序做用于为所读取的数据块中的每一个计算预期MAC并且对照所存储的MAC来比较它们的对应验证计算。虽然在一些实施例中对原始目标数据块的读取然后可以触发对另一数据块的读取以获得用于该目标数据块的目标计数器,并且然后此读取它本身可以触发另一读取,使得读取确实实际上从目标数据块开始依次发生并且相继地触发针对树的每个较高层级的进一步读取直到根节点,但是这不是必要的。在其他示例中,在被呈现有识别如通过读取访问请求所指定的目标数据块的读取目标地址时,地址计算电路40可以将读取目标地址映射到用于验证目标数据块的完整性所要求的完整性树的每个节点的地址,所以能发出许多并行读取或者能以与树节点祖先的顺序不同的次序触发树的读取中的一些。因此,在读取访问时,树中所要求的验证中的每一个被每个的次序无关紧要。
[0091] 图9示出了示出通过存储器控制器12和存储器安全单元20来控制对片外存储器14的写入访问的方法的流程图。在步骤250处存储器控制器12检测指定已被映射到片外存储器14的地址的写入访问。例如,能通过由处理器核心6执行的存储指令或者通过由缓存控制器触发的缓存写回来触发写入访问。在步骤252处存储器控制器确定通过写入访问请求所指定的地址是否识别在受保护存储器区域22中的目标数据块。如果否,则再次不需要由存储器安全单元20提供的保护,所以在步骤254处写入数据被写入到目标数据块,而不应用任何加密,并且不执行任何完整性验证。另外,不需要修改完整性树26。
[0092] 如果在步骤252处发现目标数据块在受保护区域22中,则在步骤262处,完整性树生成电路36确定与通过写入访问请求经受写入访问的目标数据块相关联的计数器是否由完整性树26的拆分计数器节点定义。如果否,则在步骤264处递增与目标块相关联的单片计数器。递增能对应于将一加到计数器的当前值,或者能对应于以将由每个计数器采取的某种已知顺序将计数值从其当前值切换到下一个值。在步骤266处,通过完整性树生成电路36确定了计数器的递增是否已引起溢出,在所述溢出时计数器已回绕到先前使用的值。如果发生了溢出,则这意味着自从上次影响整个受保护存储器区域22的全局加密或MAC计算的参数被更新以来已使用了可为目标块提供的所有可能的计数值。因此,在步骤268处更新被用于受保护存储器区域22的每一数据块的任何全局加密密钥或MAC生成操作数。随着加密密钥被更新,然后这意味着受保护存储器区域22中的所有数据必须被读出,由加密/解密逻辑32解密,然后用新密钥重新加密并写回到受保护存储器区域22。如果密钥一直保持不变但是除计数器以外的MAC生成操作数被更新,则不需要这种重新加密。不管重新加密是否被执行,都必须为整个受保护存储器区域重新计算计数器完整性树和MAC,因为用于生成MAC的函数将已改变或者将被用于计算MAC的加密数据已改变。因此,步骤268处的操作在性能方面是相对昂贵的,但是利用足够的位数的计数器,这些事件可能是罕见的。
[0093] 如果在步骤266处未发生溢出,则没有必要为整个受保护区域重新计算MAC和计数器。替代地在步骤270处,基于在写入数据访问中指定的写入数据的新加密版本并且基于由步骤264产生的递增单片计数器来重新计算与目标数据块相对应的MAC,然后经重新计算的MAC被存储到受保护区域22,例如在与数据它本身相同的缓存行中。因为计数器在步骤264处已被更新,所以将需要将经更新的计数值写入到树的较高层级处的叶节点或父节点,所以在步骤272处触发指定该较高节点的地址并指定经更新的要写入的计数器的值的另一写入访问。因此,这可以触发对于该另一写入访问执行图9的方法的另一实例。
[0094] 另一方面,如果在步骤262处通过原始写入访问所指定的目标数据块的计数器被确定为由完整性树的拆分计数器节点定义,则方法进行到步骤274。在步骤274处完整性树生成电路36递增已被选择为与目标数据块相对应的次要计数器。这是专用于通过原始写入请求写入的目标块的具体次要计数器。在步骤276处确定了次要计数器是否由于此递增而已溢出。如果否,则在步骤278处基于原始写入请求的加密写入数据、在目标块与使用同一主要计数器的所有其他块之间共享的共享主要计数器以及在步骤274处选择的具体次要计数器的递增版本来重新计算用于目标数据块的MAC,并且结果得到的MAC被与加密写入数据关联地存储到存储器。
[0095] 如果在步骤276处发生次要计数器的溢出,则在步骤280处递增目标块的父节点中的共享主要计数器。在步骤282处确定了主要计数器是否已溢出。如果否,则在步骤284处为与目标数据块共享主要计数器的每个其他块重新计算MAC并且对于那些块中的每一个将经重新计算的MAC存储到存储器。用于其他块的每个MAC是基于存储在那些块中的当前数据(为了重新计算MAC而从存储器读出)以及用于那些其他块中的每一个的递增主要计数器和具体次要计数器来计算出的。也就是说,每个其他块使用次要计数器中的不同一个但是使用同一递增主要计数器。如果具有溢出的次要计数器的节点是完整性树的叶节点,则在重新计算MAC之前用新计数器对与其MAC被重新计算的其他块中的每一个相关联的数据进行重新加密。如果父节点是非叶节点,则没有必要对其他块中的数据进行重新加密。在步骤284之后,以如上面所讨论的相同方式执行步骤278以基于针对目标块的新加密写入数据、递增共享主要计数器和特定于目标块的递增次要计数器来为目标块重新计算MAC。不管步骤284是否被执行,紧跟步骤278之后方法都再次进行到步骤272,其中另一写入访问请求被触发以更新由步骤274或280产生的递增计数器。另一方面,如果在步骤282处主要计数器溢出了,则情形与在步骤266处类似,所以再次在步骤268处执行全局更新操作以更新加密密钥或MAC生成操作数,然后必要时执行受保护存储器区域22的重新加密并且针对新近更新的参数完全重新计算完整性树26。一旦用于根节点的MAC已被更新并且根节点计数器89已被递增,图9的方法就被终止。
[0096] 尽管图9为了易于理解示出分别在步骤270/278/284和272处将经重新计算的MAC和递增计数器写入到存储器的单独的写入,然而在用于给定父节点的MAC被存储在与和该父节点的子节点相关联的计数器相同的缓存行中的实施例中,则可以将MAC和计数器更新缓冲在存储器安全单元20内,直到对单个缓存行的所有要求的更新就绪为止,使得需要仅单个写入请求来将经更新的缓存行写入到片外。类似地,如果存在对并行地执行的不同的非完整性树目标数据块50的多个写入请求,则针对不同的目标数据块50的计数器更新中的一些可能要求更新同一完整性树节点中的不同的计数器,所以通过在存储器系统单元20内缓冲计数器更新能允许在对片外存储器14的单个写入事务中执行一个缓存行中的这样的多个计数器更新。因此,应领会的是,对片外存储器14发起事务以便执行计数器和MAC更新的精确方式可以随实施方式的不同而不同。
[0097] 可能期望使给定节点的次要计数器97变得尽可能小,因为这允许减小用于保护存储器的相同区域的计数器数中的层级数,从而导致树遍历期间的更少存储器业务以及后续性能改进。附加地,每计数器缓存行的较大数量的次要计数器导致更好的可缓存性并减小在树遍历期间取出计数器的存储器访问次数(因为遍历仅在缓存中的命中之前继续)。
[0098] 另一方面,叶节点中的次要计数器溢出暗示对MAC并对于驻留在存储器中的使用由于溢出而递增的主要计数器来加密和认证的所有缓存行进行重新加密和重新计算。由于完整性树它本身可以被以非加密格式存储,所以非叶节点中的次要计数器溢出将仅引发MAC重新计算开销。然而,父节点次要计数器在写入到子节点中的次要计数器中的任一个时被递增,所以当你在树中往上爬时,写入次数可增加从而导致更多的开销。因此,仅当可管理重新加密和MAC重新计算开销时,通过小次要计数器所提供的小占用空间和更好的可缓存性特性才有可能消减用于完整性保护的存储器业务开销。如果次要计数器大小对给定节点来说是固定的,则难以协调这些竞争需求。
[0099] 为此我们提出用于在不影响树的元数的情况下改变次要计数器的大小的机制。这被图示在图10至图13中。对于往往被频繁地写入到存储器的缓存行,次要计数器大小被动态地增加而不影响树的元数。高元数紧凑树提供用于完整性保护的存储器访问较少的好处,并且用于仅频繁写入的缓存行的较大次要计数器将帮助检查重新加密和MAC重新计算开销。为了实现这种行为我们从计数器缓存计数器缓存行中的MAC窃取少量位,这些位用于指示次要计数器的大小。这些位的最小值(00)可用于指示最小次要计数器大小(在图10至图13的示例中为3位)。
[0100] 如图10中所示,存储器安全单元20通过构造所有计数器具有最小大小(例如3位)的主计数器树26而开始。每个节点中的次要计数器的大小被指示在大小字段402中,所述大小字段402在此示例中是通过将MAC的大小减少到62位而不是64位来提供的2位。替代方案将是减小主要计数器的大小而不是减小MAC的大小,以便为大小字段402腾出空间。这时必要时将容纳附加镜像节点以增加次要计数器大小的镜像树400可能还不存在—可像在下面所讨论的那样在需要时分配镜像树400。可替代地,可能已经在存储器中分配了用于镜像树400的空间,但是镜像树400可能仍然未被填充。
[0101] 主计数器树26被以与上面讨论的实施例相同的方式使用,以通过将其关联的MAC与基于数据块的内容以及取自与该数据块相关联的父节点的主要计数器和次要计数器而计算的MAC相比较来验证给定数据块的完整性。可对遍历树的每个节点进行多个完整性检查直到根,以检查每个计数器它本身是有效的。可以像上面所讨论的那样将用于验证根节点的完整性的根验证信息89存储在片上存储器中。在写入到数据块时,相关叶节点计数器被递增,并且该节点的MAC被重新计算。
[0102] 这继续直到检测到大小增加触发事件为止,所述大小增加触发事件指示增加主树的给定节点88的次要计数器的大小可能是有用的。能将各种事件视为大小增加触发事件。例如,大小增加触发事件可能是在给定节点中检测到次要计数器的溢出。另外,大小增加触发事件可能是给定节点的次要计数器的溢出的速率超过阈值或溢出的速率满足某个其他条件。另外,通常,能监视并使用关于针对给定树节点检测到的溢出、重新加密或MAC重新计算的频率或模式的度量来确定是否增加次要计数器的大小。在另一示例中,大小增加触发事件能包括检测到与受保护区域的关联子集相关联的存储器业务的水平大于阈值,其中受保护区域的关联子集包括受保护区域的一部分,对受保护区域的所述部分来说验证关联子集内的任何目标块的完整性依赖于给定拆分计数器节点。例如,存储器安全单元20能监视与受保护区域的特定部分相关联的存储器业务量。与在较低层级处的节点相比在树的较高层级处(靠近根)的节点将通常与受保护区域的较大区域相关联,因为在检查较大数量的数据块的完整性时涉及它们的计数器(由于验证通过树遍历的每个连续计数器所需的MAC计算的顺序)。因此,如果取决于树的给定节点存在大量业务到达其完整性被验证的部分,则对应节点能使其次要计数器大小增加。例如,对存储器业务的监视能基于跟踪从处理器核心6的最后一级缓存10到片外存储器14的写入次数,或者基于跟踪通过存储器安全单元20从它自己的内部缓存42到片外存储器14的写入次数。
[0103] 因此,通常存储器安全单元20可以识别指示主树26的给定节点中的次要计数器太小的大小增加触发事件。当增长次要计数器的大小的需要被识别时,存储器安全单元20将相等大小的(一个或多个)镜像子树400分配给主树26。用于经识别的主树的节点中的所有次要计数器的次要计数器大小被增加到最小大小的整数倍(例如图11中的6位),并且仅该节点的次要计数器的分数f被存储在原始位置中(例如在图11中f=0.5)。该节点的次要计数器的其余部分被分配给镜像树400的对应节点,其位于在镜像树400内与用于主树中的主节点的偏移相同的偏移处。主节点的大小字段402被更新以指示该节点的次要计数器的子集实际上被存储在镜像树400的对应镜像节点404中。
[0104] 图11示出主树的节点N127需要较大次要计数器的示例。因此,次要计数器被增加到6位计数器,这意味着仅存在用于存储与节点N127的128个子节点N127_0至N127_127相关联的128个次要计数器中的64个的空间。因此,节点N127的字段402中的大小字段值0b01识别次要计数器0-63被存储在该节点它本身中,但是次要计数器64-127被存储在镜像树400中的对应镜像节点N127’中。
[0105] 当使用镜像树中的重新分配的节点来增加给定主树节点的次要计数器的大小时,存储器安全单元20可以执行以下步骤:
[0106] 1.使刚刚溢出的次要计数器回滚到其溢出之前的值。
[0107] 2.在次要计数器在大小增加之前有M位而在大小增加之后有N位的情况下,对于主节点和至少一个镜像节点中的每个N位次要计数器:
[0108] 将次要计数器的M个最低有效位设置为等于对应次要计数器在溢出之前的值;
[0109] 将次要计数器的(N-M)个最高有效位设置为等于给定主树节点的主要计数器的(N-M)个最低有效位。
[0110] 3.将给定主树节点的主要计数器右移(N-M)位(使得转移到次要计数器的位已被移出并且(N-M)个前导0加在主要计数器的剩余位前头)。
[0111] 4.然后递增再次溢出的次要计数器。
[0112] 例如:让我们考虑有4位主要计数器和4个2位次要计数器的节点(为了简单使用较小计数器大小)。进一步让我们假定计数器具有以下(二进制)值:
[0113] 主要计数器次要计数器
[0114] 0101   01 10 11 00
[0115] 如果现在大小增加事件使次要计数器增长到4位(因为第4个次要计数器刚刚从11->00溢出),则经更新的主树节点和镜像节点将看起来如下:
[0116]
[0117] 这里N=4,M=2,所以(N-M)=2,即我们向所有次要计数器添加了2个附加位。所以我们在所有次要计数器前头加有主要计数器的2个lsb位并且在主要计数器前头加有2个0。
[0118] 这样的操作确保MajorCounter:MinorCounter的组合对于受影响节点中的所有其他(未溢出的)次要计数器保持不变,并且因此避免了昂贵的重新加密/MAC重新计算。
[0119] 因此,当对节点N127的子节点N127_0的MAC进行认证时,可以从父节点N127它本身中选择次要计数器,但是当对节点N127的不同的子节点N127_127的MAC进行认证时,可以从镜像节点127’读取次要计数器。主节点N127和镜像节点N127’共享主树中的同一父节点,所以使用相同的主要计数器和次要计数器(在此示例中取自根节点)来计算与主节点N127和镜像节点N127’相关联的MAC。尽管每个镜像节点404可以具有与主树的节点88相同的布局,然而不需要在镜像节点404中使用主要计数器字段95,因为可以在主节点88它本身中指定在镜像节点404和对应主节点88中的所有次要计数器之间共享的主要计数器95。
[0120] 对于图11中所示的其他节点(根节点、N0、N127_0、N127_127),尚不存在增加次要计数器的大小的任何需要,所以镜像树中的对应位置406仍然未被填充。镜像树400是稀疏地填充的结构,对其来说存储器中的空间已被分配来容纳与主树26相同大小的完整树,但是仅镜像树400的所选节点被填充,这取决于主树的哪些节点88具有大多数存储器业务并且所以被确定为每个次要计数器需要附加位以减小溢出的频率。因此,不需要不必要地分配比必要大的大小的次要计数器,使得每个节点的元数可以尽可能高,但是对于存储器的那些频繁地访问的区域,可在不牺牲元数的情况下给予对应节点较大计数器,以减少必须经常对数据进行重新加密或者重新计算MAC的昂贵的性能开销。如果主树的根节点402被分配了镜像树400中的镜像节点,则片上存储器中的根完整性验证信息89还可以指定用于验证镜像树400的根节点的完整性的信息。如果主树的根节点402不要求镜像节点,则镜像树400的任何节点可在父节点已扩展了次要计数器的情况下使其完整性基于在主树26的父节点中或在与父节点相对应的镜像节点404中指定的信息被验证。
[0121] 如图12中所示,在一些情况下可以支持多个级别的次要计数器大小,所以每次针对主树的给定节点检测到大小增加触发事件时,能将次要计数器大小增加到由存储器安全单元20所支持的下一个最大大小。例如,在图12中支持三个级别:分别指示3位、6位或12位的计数器大小的计数器大小字段0b00、0b01和0b10。对于次要计数器大小是所支持的最小计数器大小的不止两倍的主树的节点,那么可能需要不止一个镜像树中的附加镜像节点来容纳用于该节点的子节点的所有次要计数器。例如,对于图12中的节点N0_127,大小字段值0b10指示使用了12位次要计数器,使得仅32个12位次要计数器装配在为128个3位次要计数器先前分配的空间内。因此,用于节点N0_127的子节点的剩余96个12位次要计数器可以遍布如图12中所示的三个另外的镜像树400中的三个对应节点N0_127’、N0_127”、N0_127”’。
相比之下,对于图12的使用6位次要计数器的节点N0,必须在第一镜像树400中分配仅一个对应节点N0’,这足以存储所需的128个次要计数器,所以不填充镜像树2和3中的对应节点N0”、N0”’。如果在稍后的时间对节点N0来说发生另一大小增加触发事件,则能将次要计数器大小递增到12位并且此时节点N0”和N0”’可以变得被填充。第一次任何节点要求填充其镜像节点中的一个(例如,可能已在用于主树的节点N0_127的次要计数器大小被增加到12位时分配了图12中的镜像树2和3),每个附加镜像计数器完整性树可能已在存储器中为它分配了空间。
[0122] 如图13中所示,存储器安全单元20可以在存储器中为主树26和一个或多个镜像树400分配空间。对于主树26,树的每个节点88被分配了相对于主树基地址410的对应偏移。对于每个镜像树400,存储器安全单元20可以分配与为主树26所分配的相同量的空间,并且镜像树的每个镜像节点404位于镜像树基地址412与用于主树26中的对应主节点88的偏移相同的偏移处。例如,如图13中所示主树基地址410与主节点N0_127的地址之间的主偏移414等于镜像树基地址412与对应镜像节点N0_127’的地址之间的镜像树偏移416。取决于要扩展主节点N0_127的计数器大小的任何需要是否仍然未被识别,通过镜像树偏移416所指定的偏移处的实际存储器位置实际上可能尚未被任何计数器填充。因此,可以稀疏地填充在存储器中为镜像树400所分配的空间,并且可以在给定时间不用此空间的一些部分。
[0123] 例如,如果我们将具有安全存储器的1GB受保护区域的系统认为受到完整性树保护,则在每个主树节点中使用128个3位次要计数器时存储覆盖该受保护区域的节点所要求的总存储器可以是约8MB(当使用主要计数器的大小时,图10的示例中所示的大小和MAC字段—显然其他大小也将是可能的)。因此,基础树的大小可以是约8MB。对于次要计数器大小的每一跳跃,我们将构建相同大小(8MB)的稀疏地填充的镜像子树。因此,即使如图12中所示构建3个另外的镜像树,总空间仍然是约32MB。相比之下在图3中使用固定大小计数器的方法将构建占用空间为约150MB的静态计数器树。因此,与在图10的方法中构建附加镜像树相关联的开销低得多。因为存储器不是按写入频率的均匀分布而写入的,所以可用较小次要计数器来容纳一些区域的保护,并且可使用镜像树来为所选节点提升次要计数器大小,而无需牺牲每节点的元数。另外,使用镜像树的可变次要计数器大小方法意味着每个树节点的元数对所支持的给定最大次要计数器大小(例如128而不是32)来说可以是较大的,从而减小保护存储器的给定大小区域所需的节点的总数,并且因此即使所有节点都以其次要计数器大小被增加到最大大小而结束,存储MAC或主要计数器也需要更少的空间。这意味着即使将图10中所示的树的所有节点都被增加到12位次要计数器并且要求完全填充所有3个镜像树,总空间也将仍然比图3低。
[0124] 主树26和每个镜像树400的基地址410、412可以被保持在存储器安全单元20内,或者在其缓存42内或者在专用基地址寄存器内。如果提供了基地址寄存器,则当仍然尚未分配对应镜像树时可以将每个镜像树基地址寄存器设置为无效值(例如无效值可能是不允许为真实镜像树分配的预定基地址,例如全0或全1,或者与寄存器相关联的单独的有效位能指示地址是否是有效基地址)。在这种情况下,然后存储器安全单元20可以能够根据特定镜像树基地址是否有效来推断在整个树结构中使用的次要计数器的最大大小。例如,如果与图12的镜像树2相关联的基地址寄存器被指示为无效,则这将指示在树结构的任何节点中使用的最大次要计数器大小是6位或更少。这可避免需要存储在树中使用的最大次要计数器大小的单独的指示。
[0125] 另外,存储器安全单元20可以在一些示例中维护跟踪信息,所述跟踪信息指示在特定镜像树内已填充了哪些节点和/或多少节点。这可使得存储器安全单元20能够在主树26的对应节点是必需的时决定是否以推测地加载必需的镜像树节点。也就是说,存储器安全单元20在发出要访问主树节点的加载请求时,可能需要决定是否:(i)等待主树节点被返回,然后基于主树节点的大小字段402来确定是否有必要加载对应镜像树节点以获得相关次要计数器,或者(ii)加载一个或多个镜像树节点以及主树节点,而不等待主树节点的大小字段402被检查以确定是否实际上要求镜像树节点。在选项(i)情况下,可通过在实际上不需要镜像树节点时避免触发不必要的加载来减小存储器带宽。在选项(ii)情况下,可通过在当要求镜像树节点时的情况下避免延迟来改进性能。是选项(i)还是选项(ii)是优选的可能取决于已为给定镜像树建立了多少个有效节点—镜像树中的有效节点的数量越大,当前访问可能要求对应镜像节点的机会越大,所以可以更可能从推测地加载镜像节点获得性能改进。
[0126] 因此,通常当访问主计数器完整性树的给定节点时,存储器安全单元20能在实际上已从存储器返回主树的给定节点之前预测给定节点的次要计数器大小,并且使用次要计数器大小的预测来确定是否在对应主树节点已被返回之前触发给定镜像树中的镜像树节点的加载。预测可基于指示是否已分配了给定镜像树和/或已为给定镜像树建立了多少有效节点的跟踪信息。跟踪信息能跟踪具有不同的精度水平的有效节点的数量。例如,存储器安全单元20能维护对给定镜像树的多少个节点有效进行计数的有效节点计数器,而不在跟踪信息中指定哪些特定节点是有效的(例如,在这种情况下当用于该树的有效节点计数器大于某个阈值时,能推测地加载镜像树节点)。可替代地,存储器安全单元20能维护指示镜像树的哪些特定节点有效的位图,这能允许确切地确定是否将需要给定镜像树节点。无论哪种方式,跟踪镜像树的填充水平都可帮助改进关于负载调度的决定以改进性能。
[0127] 可扩展图9的方法以实现上面讨论的可变次要计数器大小示例。在这样的实施例中,当次要计数器在步骤276处溢出时,那么不是直接进行到步骤280,而是可执行附加步骤以检查次要计数器大小是否已经处于最大次要计数器大小。如果次要计数器大小已经处于由存储器安全单元20所支持的最大大小,则方法可进行到步骤280以使与目标块相关联的主要计数器递增,并且方法如上所述越过步骤280继续。然而,如果次要计数器大小尚未达到所支持的最大大小,则存储器安全单元20增加与包括已溢出的次要计数器的主树的节点相关联的次要计数器的大小。因此,镜像树400中的主节点和至少一个对应节点404被重写,使得每个计数器中的位数被扩展(如上所述,通过将一个或多个位从主要计数器转移到每个次要计数器并且用前导零填充主要计数器),并且在为镜像树400的主节点它本身及一个或多个对应节点404中的次要计数器所保留的空间当中分发经扩展的次要计数器值。如果尚未为容纳次要计数器的相关大小所需的镜像树400分配空间,则此时可通过存储器安全单元20来分配空间。方法然后进行到图9的步骤278,并且图9的剩余步骤与上述相同。
[0128] 虽然图10至图13的示例示出树的每个层级有相同的元数(128)的情况,但是如在先前的示例中一样,也可以给树提供在树的层级之间变化的元数,如图14中所示,图14示出父节点是32元而其子节点是64元的示例。最初,父节点将已具有32个12位次要计数器并且子节点将已具有64个6位次要计数器,但是紧跟大小增加触发事件之后64元子节点的次要计数器的大小被增加到12,同时分配了一个附加镜像节点以容纳64元子节点的12位计数器的一半。加密计数器的后续节点(其MAC使用64元子节点的计数器来计算)可以是128元。虽然图14对于每个节点示出2的幂元数,但是也可以提供不是如上面所讨论的2的精确幂的元数。
[0129] 总之,在上面我们描述了使用拆分计数器的计数器树,其中至少一些层级使用拆分计数器设计。这允许我们构造为16元、32元、64元或128元的完整性树(基于所选取的拆分计数器设计(16、32、64、128等)的次要:主要计数器比率),与图2和图3的比较示例中的8元树(计数器树或MAC数)相反。这允许减小用于保护存储器的相同区域的计数器数中的层级数,从而导致树遍历期间的更少存储器业务以及后续性能改进。附加地,每计数器缓存行的较大数量的次要计数器导致更好的可缓存性并且减小树遍历期间的存储器访问次数(因为遍历仅在缓存中命中之前才继续)。
[0130] 我们描述了在每个层级处采用不同的拆分计数器设计的可变元数计数器树。父节点次要计数器在写入到子节点中的次要计数器中的任一个时被递增。因此,当你在树中往上爬时,写入业务以指数方式增加(忽视缓存的影响)。因此,我们提出要通过在每个层级处使用不太激进的拆分计数器设计来随着我们在树中爬升而减小树的元数。我们的评估表明Split-64设计在叶层级处看到大量溢出(MAC重新计算占去执行时间的>50%),然而Split-32设计看到可忽视的溢出(在MAC重新计算中花费的时间<1%)。因此,我们提出在叶层级处采用Split-48的设计(其每主要计数器有48个次要计数器)并且减小在树中的下一个层级处的比率(每主要计数器具有36个次要计数器的Split-36)等。这导致非2的幂并且使地址计算算术复杂,但是在没有MAC重新计算的开销的情况下为利用附加性能好处而付出的代价是合理的。
[0131] 我们还提出使用镜像树来为某些节点容纳扩大计数器的具有可变次要计数器大小的树,这帮助调解减小次要计数器大小(以使得能实现增加的元数和树遍历性能)并且增加次要计数器大小(以降低在次要计数器溢出时要求重新加密或重新计算MAC的可能性)的竞争需求。利用镜像树方法,要求较大计数器的节点可使用较大计数器,但是不太频繁地需要的其他节点可仍然使用较小次要计数器。可视需要而定将可变次要计数器方法与上面提及的可变元数树组合,或者可在元数在树中自始至终相同的情况下使用固定元数版本。
[0132] 图15示出对不同的基于拆分计数器的计数器树的性能的评估:
[0133] ·每组4个条中的左手条:使用单片56位计数器(Mono-8)的比较方法。
[0134] ·从每组4个条的左侧起的第二条:Split16(16元)
[0135] ·在每组4个条中从左侧起的第三条:Split-32(32元)
[0136] ·每组4个条中的右手条:Split-64(64元)。
[0137] 对每个基准来说性能加速被示出为相对于Mono-8条的比率,即对Mono-8来说加速比率总是为1。我们假定片上缓存加密和完整性树计数器的32KB专用计数器高速缓。我们在SPEC2006中评估这些配置在存储器密集工作负载上的性能(每1000个指令>1个存储器访问)。如图10中所示,与单片计数器(56位)树(8元)相比较Split-32(32元)树平均示出42%的加速。Split-16计数器树示出平均26%的更少加速。这主要是由于拆分计数器树节点的改进的可缓存性而导致的,从而导致存储器业务减少。与Split-32(平均42%)相比较Split-64示出可观的加速(平均57%)。然而,Split-64还由于在性能模型中未说明的溢出而引发可观的成本(在处置MAC重新计算中花费时间的>50%)。结果,Split-32是用于具有静态元数的计数器树的更优选的保守设计,即用于层级的计数器的相同设计。然而,考虑到Split-32和Split-64在性能上的差异,以及在Split-64中有可观的溢出然而在Split-32中可忽视的事实,我们可在如图5中所示的可变非2的幂元数拆分计数器树中找到妥协。
[0138] 图16图示可以被使用的模拟器实现。虽然早前描述的实施例在用于操作支持相关技术的具体处理硬件的设备和方法方面实现本发明,但是也可以提供依照本文描述的实施例的通过使用计算机程序来实现的指令执行环境。这样的计算机程序常常被称为模拟器,只要它们提供硬件架构的基于软件的实现即可。各种模拟器计算机程序包括模拟器、虚拟机、模型和二进制转换器,包括动态二进制翻译器。通常,模拟器实现可以在主机处理器330上运行,所述主机处理器330可选地运行支持模拟器程序310的主机操作系统320。在一些布置中,在硬件与所提供的指令执行环境和/或在同一主机处理器上提供的多个不同的指令执行环境之间可以有多层模拟。历史上,一直要求强大的处理器来提供以合理速度执行的模拟器实现,但是这样的方法可能在某些情况下是合理的,诸如当出于兼容性或重用原因期望运行另一处理器本机的代码时。例如,模拟器实现可以提供具有不被处理器硬件主机支持的附加功能性的指令执行环境,或者提供通常与不同的硬件架构相关联的指令执行环境。在“Some Efficient Architecture Simulation Techniques”,Robert Bedichek,Winter 1990 USENIX Conference,Pages 53-63中给出了模拟的概要。
[0139] 就先前已参考特定硬件构造或特征描述了实施例来说,在模拟实施例中,可以通过适合的软件构造或特征来提供等效功能性。例如,特定电路可以在模拟实施例中作为计算机程序逻辑被实现。类似地,存储器硬件(诸如寄存器或缓存)可以在模拟实施例中作为软件数据结构被实现。在在主机硬件(例如,主机处理器330)上存在先前描述的实施例中引用的硬件元件中的一个或多个的布置中,一些模拟实施例可以在适合的情况下利用主机硬件。
[0140] 模拟器程序310可以被存储在计算机可读存储介质(其可以是非暂态介质)上,并且向目标代码300提供与通过模拟器程序310来建模的硬件架构的应用程序接口相同的程序接口(指令执行环境)。因此,可以使用模拟器程序310来从指令执行环境内执行目标代码300的程序指令,包括用于在片外存储器14中读取或者写入数据的指令,使得实际上不具有像上面所讨论的那样在硬件中提供的存储器安全单元20的主机计算机310可仿真这些特征。
[0141] 在以下条款中陈述另外的示例布置:
[0142] (1)一种设备,所述设备包括:
[0143] 存储器访问电路,用于控制对存储在存储器中的数据的访问;以及[0144] 存储器安全电路,用于验证存储在所述存储器的受保护存储器区域中的数据的完整性;其中:
[0145] 所述存储器安全电路被配置为维护包括多个节点的计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据块相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一个与存储子节点的数据块相关联,所述子节点提供所述计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一个与存储除所述计数器完整性树以外的数据的数据块相关联;
[0146] 响应于对所述受保护存储器区域的目标数据块的访问,所述存储器安全电路被配置为通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;并且
[0147] 所述计数器完整性树的节点中的至少一个包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一个指定的各个次要计数值的组合。
[0148] (2)根据条款(1)所述的设备,包括第二存储器;
[0149] 其中,所述存储器安全电路被配置为将指定以下各项的根验证数据存储到所述第二存储器:
[0150] 所述计数器完整性树的根节点;或
[0151] 用于验证存储在所述受保护存储器区域中的所述计数器完整性树的根节点的完整性的信息。
[0152] (3)根据条款(2)所述的设备,其中,响应于对所述目标数据块的访问,所述存储器安全电路被配置为执行一个或多个验证检查以验证包括所述目标计数器和所述根节点的所述计数器完整性树的分支上的计数器的完整性,并且所述验证检查中的至少一个依赖于存储在所述第二存储器中的所述根验证数据。
[0153] (4)根据条款(1)所述的设备,其中,响应于更新所述受保护存储器区域的目标数据块,所述存储器安全电路被配置为更新所述目标计数器并且基于经更新的所述目标数据块的数据和经更新的目标计数器来重新计算与所述目标数据块相关联的所述存储的认证码。
[0154] (5)根据条款(4)所述的设备,其中,所述存储器安全电路被配置为通过递增所述目标计数器来更新所述目标计数器。
[0155] (6)根据条款(1)所述的设备,其中,响应于当通过所述计数器完整性树的拆分计数器节点来指定用于所述目标数据块的所述目标计数器时更新所述受保护存储器区域的目标数据块,所述存储器安全电路被配置为更新与所述目标计数器相对应的所述次要计数值,并且基于经更新的所述目标数据块的数据、与所述目标计数器相对应的对应主要计数值以及经更新的与所述目标计数器相对应的次要计数值来重新计算与所述目标数据块相关联的所述存储的认证码。
[0156] (7)根据条款(6)所述的设备,其中,当对所述次要计数值的所述更新引起溢出条件时,所述存储器安全电路被配置为更新所述对应主要计数值并且重新计算与和共享所述对应主要计数值的计数器相关联的所述数据块中的每一个相关联的所述存储的认证码。
[0157] (8)根据条款(1)所述的设备,其中,所述至少一个父节点中的至少一个是拆分计数器节点。
[0158] (9)根据条款(1)所述的设备,其中,所述计数器完整性树在所述计数器完整性树的不同层级处包括至少两个拆分计数器节点。
[0159] (10)根据条款(1)所述的设备,其中,所述计数器完整性树包括为不同数量的数据块指定计数器的至少两个节点。
[0160] (11)根据条款(1)所述的设备,其中,所述计数器完整性树包括为第一数量的数据块指定计数器的第一拆分计数器节点以及为第二数量的数据块指定计数器的第二拆分计数器节点,所述第二数量大于所述第一数量,其中,所述第一拆分计数器节点是所述第二拆分计数器节点的父节点。
[0161] (12)根据条款(11)所述的设备,其中,通过所述第一拆分计数器节点所指定的所述次要计数值与通过所述第二拆分计数器节点所指定的所述次要计数值相比具有较大数量的位。
[0162] (13)根据条款(11)所述的设备,其中,所述第一拆分计数器节点的父节点是为第三数量的数据块指定计数器的拆分计数器节点,所述第三数量小于所述第一数量。
[0163] (14)根据条款(1)所述的设备,其中,所述计数器完整性树的至少一个节点为除2的精确幂以外的一定数量的数据块指定计数器。
[0164] (15)根据条款(1)所述的设备,其中,所述存储器安全电路被配置为从与所述目标数据块相同的缓存行读取针对所述目标数据块的所述存储的认证码。
[0165] (16)根据条款(1)所述的设备,其中,响应于对所述目标数据块的访问,所述存储器安全电路被配置为当在所述存储的认证码与所述所计算出的认证码之间检测到失配时触发安全违反响应。
[0166] (17)根据条款(1)所述的设备,其中,所述存储器安全电路包括加密/解密电路以对写入到所述受保护存储器区域的数据块的数据进行加密并且以对从所述受保护存储器区域的数据块读取的数据进行解密。
[0167] (18)根据条款(1)所述的设备,其中,所述存储器访问电路被配置为独立于所述计数器完整性树而控制对所述存储器的不受保护存储器区域的访问。
[0168] (19)一种用于控制对存储在存储器的受保护存储器区域中的数据的访问的方法,包括:
[0169] 维护包括多个节点的计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据块相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一个与存储子节点的数据块相关联,所述子节点提供所述计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一个与存储除所述计数器完整性树以外的数据的数据块相关联;以及[0170] 响应于对所述受保护存储器区域的目标数据块的访问,通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;
[0171] 其中,所述计数器完整性树的节点中的至少一个包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一个指定的各个次要计数值的组合。
[0172] (20)一种非暂态存储介质,所述非暂态存储介质存储用于控制数据处理设备以执行根据条款(19)所述的方法的计算机程序。
[0173] (21)可以提供一种用于控制主机数据处理设备以提供指令执行环境的计算机程序,所述计算机程序包括:
[0174] 存储器访问程序逻辑,用于控制对存储在存储器中的数据的访问;以及[0175] 存储器安全程序逻辑,用于验证存储在所述存储器的受保护存储器区域中的数据的完整性;其中:
[0176] 所述存储器安全程序逻辑被配置为维护包括多个节点的计数器完整性树,每个节点指定与所述受保护存储器区域的各个数据块相关联的多个计数器,所述多个节点包括至少一个父节点和至少一个叶节点,对所述至少一个父节点来说所述计数器中的至少一个与存储子节点的数据块相关联,所述子节点提供所述计数器完整性树的另外的计数器,而对所述至少一个叶节点来说所述计数器中的至少一个与存储除所述计数器完整性树以外的数据的数据块相关联;
[0177] 响应于对所述受保护存储器区域的目标数据块的访问,所述存储器安全程序逻辑被配置为通过将与所述目标数据块相关联的存储的认证码与计算出的认证码相比较来验证所述目标数据块的完整性,所述计算出的认证码是基于所述目标数据块及所述计数器完整性树的与所述目标数据块相关联的目标计数器而生成的;并且
[0178] 所述计数器完整性树的节点中的至少一个包括拆分计数器节点,所述拆分计数器节点指定至少两个计数器,所述至少两个计数器各自被定义为在所述至少两个计数器之间共享的主要计数值和分别地为所述至少两个计数器中的每一个指定的各个次要计数值的组合。
[0179] 在本申请中,单词“被配置为……”用于意味着设备的元件具有能够执行所定义的操作的配置。在这种上下文中,“配置”意指硬件或软件的互连的布置或方式。例如,设备可以具有提供所定义的操作的专用硬件,或者处理器或其他处理器件可以被编程为执行功能,“被配置为”不暗示需要以任何方式改变设备元件以提供所定义的操作。
[0180] 尽管已在本文中参考附图详细地描述了本发明的说明性实施例,然而应当理解的是,本发明不限于那些精确的实施例,并且在不脱离如由所附权利要求所限定的本发明的范围和精神的情况下,本领域的技术人员可在其中实现各种改变和修改。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈