使用签名的地址验证转让专利

申请号 : CN201910110123.3

文献号 : CN110134619B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : B.C.塞雷布林

申请人 : 谷歌有限责任公司

摘要 :

用于生成签名的地址的、包括在计算机存储介质上编码的计算机程序的方法、系统和装置。所述方法中的一个包括:通过组件从设备接收多个第一请求,每个第一请求用于物理地址并且包括虚拟地址,由所述组件使用所述虚拟地址确定第一物理地址,生成用于第一物理地址的第一签名,并且为所述设备提供包括第一签名的响应;从设备接收多个第二请求,每一个第二请求用于访问第二物理地址并且包括第二签名,对于所述多个第二请求中的每一个,由所述组件使用第二签名确定第二物理地址是否是有效的,并且对于第二物理地址被确定为有效的每一个第二请求,向对应的第二请求提供服务。

权利要求 :

1.一种计算机实施的用于访问存储器的方法,包括:由组件从设备接收请求,该请求包括物理地址和错误检测代码值,并且该请求请求访问由该物理地址所标识的存储器位置;

响应于接收到该请求,由该组件使用该物理地址生成用于该物理地址的签名,其中该请求不包括该签名并且错误检测代码值是先前使用该签名而生成的;

响应于生成该签名,使用所述请求和签名来生成第二错误检测代码值;

响应于生成第二错误检测代码值,通过将第二错误检测代码值与所述错误检测代码值比较来确定第二错误检测代码值是否是与所述错误检测代码值相同的值;以及响应于确定第二错误检测代码值是与所述错误检测代码值相同的值,由所述组件服务该请求。

2.如权利要求1所述的方法,其中使用所述请求和所述签名来生成第二错误检测代码值的步骤包括:使用用于该设备的标识符来确定用于该设备的密钥值;

使用所述物理地址和所述密钥值生成哈希值;以及使用该哈希值的至少一部分生成所述签名。

3.如权利要求1所述的方法,其中服务所述请求的步骤包括向第二组件转发该请求。

4.如权利要求3所述的方法,包括在向第二组件转发该请求之前更新所述请求中的设置数据以指示该请求不包括校验和。

5.如权利要求3所述的方法,包括:

从第二组件接收响应;以及

向所述设备提供所述响应的至少一部分。

6.如权利要求1所述的方法,其中所述组件响应于接收到所述请求而生成用于所述物理地址的签名的步骤包括:响应于接收到该请求,确定该请求是否包括虚拟地址;以及响应于确定该请求不包括虚拟地址,而使用所述物理地址生成用于所述物理地址的签名。

7.如权利要求1所述的方法,其中由所述组件从所述设备接收所述请求包括由存储器管理单元从连接到包括存储器管理单元的主板的设备接收所述请求。

8.如权利要求7所述的方法,其中由所述存储器管理单元从所述设备接收所述请求包括由所述存储器管理单元从连接到包括存储器管理单元的主板的外围设备接收所述请求。

9.一种用于访问存储器的系统,其包括数据处理装置,以及与该数据处理装置进行数据通信并且存储指令的非瞬时性计算机可读存储介质,所述指令可由该数据处理装置运行并且一旦进行这样的运行就使得所述数据处理装置执行包括以下的操作:从设备接收请求,该请求包括物理地址和错误检测代码值,并且该请求请求访问由该物理地址所标识的存储器位置;

响应于接收到该请求,使用该物理地址生成用于该物理地址的签名,其中该请求不包括该签名并且错误检测代码值是先前使用该签名而生成的;

响应于生成该签名,使用所述请求和该签名来生成第二错误检测代码值;

响应于生成第二错误检测代码值,通过将第二错误检测代码值与所述错误检测代码值比较来确定第二错误检测代码值是否是与所述错误检测代码值相同的值;以及响应于确定第二错误检测代码值是与所述错误检测代码值相同的值,服务该请求。

10.如权利要求9所述的系统,其中使用所述请求和所述签名来生成第二错误检测代码值的操作包括:使用用于该设备的标识符来确定用于该设备的密钥值;

使用所述物理地址和所述密钥值生成哈希值;以及使用该哈希值的至少一部分生成所述签名。

11.如权利要求9所述的系统,其中服务所述请求包括向一组件转发该请求。

12.如权利要求11所述的系统,所述操作包括在向所述组件转发该请求之前更新所述请求中的设置数据以指示该请求不包括校验和。

13.如权利要求11所述的系统,所述操作包括:从所述组件接收响应;以及

向所述设备提供所述响应的至少一部分。

14.如权利要求9所述的系统,其中响应于接收到所述请求而生成用于所述物理地址的签名包括:响应于接收到该请求,确定该请求是否包括虚拟地址;以及响应于确定该请求不包括虚拟地址,而使用所述物理地址生成用于该物理地址的所述签名。

15.如权利要求9所述的系统,其中:

数据处理装置包括存储器管理单元;以及

从所述设备接收所述请求包括从连接到包括存储器管理单元的主板的设备接收所述请求。

16.如权利要求15所述的系统,其中从所述设备接收所述请求包括从连接到包括存储器管理单元的主板的外围设备接收所述请求。

17.一种存储指令的非瞬时性计算机可读存储介质,该指令可由数据处理装置运行,并且一旦进行这样的运行就使得所述数据处理装置执行包括以下的操作:从设备接收请求,该请求包括物理地址、错误检测代码值以及指示该请求不包括校验和的设置数据,并且该请求请求访问由所述物理地址标识的存储器位置;

响应于接收到该请求,确定用于该物理地址的签名,其中该请求不包括该签名并且错误检测代码值是先前使用该签名而生成的;

响应于确定所述签名,使用所述请求和所述签名来生成第二错误检测代码值;

响应于生成第二错误检测代码值,通过将第二错误检测代码值与所述错误检测代码值比较来确定第二错误检测代码值是否是与所述错误检测代码值相同的值;以及响应于确定第二错误检测代码值是与所述错误检测代码值相同的值,服务该请求。

18.如权利要求17所述的计算机可读存储介质,其中使用所述请求和签名来生成第二错误检测代码值包括:使用用于该设备的标识符来确定用于该设备的密钥值;

使用所述物理地址和所述密钥值生成哈希值;以及使用该哈希值的至少一部分生成所述签名。

19.如权利要求17所述的计算机可读存储介质,其中服务所述请求包括向组件转发该请求。

20.如权利要求19所述的计算机可读存储介质,所述操作包括:从所述组件接收响应;以及

向所述设备提供所述响应的至少一部分。

21.如权利要求17所述的计算机可读存储介质,其中响应于接收到所述请求而确定用于所述物理地址的签名包括:响应于接收到该请求,确定该请求是否包括虚拟地址;以及响应于确定该请求不包括虚拟地址,而使用物理地址生成用于物理地址的签名。

22.如权利要求17所述的计算机可读存储介质,其中:数据处理装置包括存储器管理单元;以及

从所述设备接收所述请求包括从连接到包括存储器管理单元的主板的设备接收所述请求。

23.如权利要求22所述的计算机可读存储介质,其中从所述设备接收所述请求包括从连接到包括存储器管理单元的主板的外围设备接收所述请求。

说明书 :

使用签名的地址验证

[0001] 本申请是国际申请日为2016年5月13日、中国申请号为201680019968.6、发明名称为“使用签名的地址验证”的发明专利申请的分案申请。

背景技术

[0002] 本说明书涉及验证存储器访问请求。
[0003] 图形处理单元(GPU)可以具有对随机地址的高度并行访问,并且可以包括在GPU上的硬件以执行地址转换,地址转换产生针对中央处理单元(CPU)动态随机存取存储器(DRAM)的地址。类似地,一些网络接口卡(NIC)和固态驱动器(SSD)可以执行它们自己的地址转换。
[0004] 外围组件互连(PCI)地址转换服务(ATS)允许设备从输入/输出存储器管理单元(IOMMU)请求地址转换,并在设备上本地缓存该转换。设备对转换范围的后续访问可以被标记为已转换并且绕过IOMMU。

发明内容

[0005] 存储器管理单元从例如连接到主板的设备接收地址转换请求,并生成用于每一个请求的物理地址的签名。存储器管理单元向设备提供签名,并且当从设备接收存储器访问请求时,使用对应的签名来验证正在被访问的存储器的位置、验证正在发送请求的设备、或者验证两者。
[0006] 通常,本说明书中描述的主题的一个创新方面可以体现在方法中,所述方法包括以下动作:由组件从设备接收多个第一请求,所述多个第一请求中的每一个用于对应的物理地址并且包括对应的虚拟地址,对于所述多个第一请求中的每一个,由所述组件使用对应的虚拟地址确定第一物理地址,生成用于第一物理地址的第一签名,第一签名用于验证第一物理地址,以及向设备提供包括第一签名的响应;从设备接收多个第二请求,所述多个第二请求中的每一个用于访问对应的第二物理地址并且包括对应的第二签名,对于所述多个第二请求中的每一个,由所述组件使用对应的第二签名确定对应的第二物理地址是否是有效的,并且对于使用对应的第二请求的第二签名被确定为第二物理地址有效的每一个第二请求,向对应的第二请求提供服务。该方面的其他实施例包括对应的计算机系统、设备和记录在一个或多个计算机存储设备上的计算机程序,所述一个或多个计算机存储设备中的每一个被配置为执行所述方法的动作。一个或多个计算机的系统可以被配置为通过将软件、固件、硬件或其组合执行特定的操作或动作,所述软件、固件、硬件或其组合安装在运行中的系统并且致使系统执行动作。一个或多个计算机程序可以被配置为通过包括当被数据处理装置执行时致使装置执行动作的指令来执行特定的操作或动作。
[0007] 上述和其他实施例可以每个可选地以单独的或组合的方式包括以下特征中的一个或多个。该方法可以包括对于使用对应的第二请求的第二签名被确定为第二物理地址无效的每一个第二请求,不向对应的第二请求提供服务。对于所述多个第二请求的不同的第二子集,不向第二请求提供服务可以包括对于第二子集中的每一个第二请求,拒绝相应的第二请求。对于所述多个第二请求的不同的第二子集,不向第二请求提供服务可以包括对于第二子集中的每一个第二请求,记录指示相应的第二请求的对应错误。对于所述多个第二请求的不同的第二子集,不向第二请求提供服务可以包括复位或停止所述设备。不向对于使用对应的第二请求的第二签名被确定为第二物理地址无效的每一个第二请求的对应的第二请求提供服务可以包括改变设备的密钥值(secret value)。不向对于使用对应的第二请求的第二签名被确定为第二物理地址无效的每一个第二请求的对应的第二请求提供服务可以包括禁用设备对存储器的访问。该方法可以包括向所述多个第二请求中的至少一个提供服务,而不向所述多个第二请求中的至少另外一个提供服务。
[0008] 在一些实施中,该方法包括从设备接收特定请求,确定特定请求是否包括虚拟地址,以及确定特定请求是否是i)所述多个第一请求中的一个,响应于确定特定请求包括虚拟地址或ii)所述多个第二请求中的一个,响应于确定特定请求不包括虚拟地址。所述多个第一请求中的每一个可以包括对应的虚拟地址和用于设备的标识符。对于所述多个第一请求中的每一个,生成用于第一物理地址的第一签名可以包括:使用标识符确定密钥值、使用第一物理地址和密钥值生成哈希值、并且使用哈希值的至少一部分生成第一签名。
[0009] 在一些实施中,对于所述多个第一请求中的每一个,向设备提供包括第一签名的响应包括将第一签名与第一物理地址连接,以及提供响应,该响应包括与响应的单个字段中的第一物理地址连接的第一签名。用于设备的标识符可以包括用于设备的设备总线号码。所述多个第二请求中的每一个可以包括对应的第二物理地址、对应的第二签名和用于设备的标识符。对于所述多个第二请求中的每一个,由组件使用对应的第二签名确定对应的第二物理地址是否是有效的可以包括:使用标识符确定密钥值、使用对应的第二物理地址和密钥值生成哈希值、使用哈希值的至少一部分生成第三签名、确定对应的第二签名和第三签名是否相同、以及响应于确定对应的第二签名和第三个签名相同而确定对应的第二物理地址是有效的。
[0010] 在一些实施中,所述多个第二请求中的每一个包括对应的第二物理地址、对应的第二签名、和用于设备的标识符。对于所述多个第二请求中的每一个,由组件使用对应的第二签名确定对应的第二物理地址是否有效可以包括:使用标识符确定密钥值、通过使用所述标密钥值解密对应的第二物理地址生成第三物理地址、使用第三物理地址和密钥值生成哈希值、使用哈希值的至少一部分生成第三签名、确定对应的第二签名和第三签名是否相同、以及响应于确定对应的第二签名和第三签名相同而确定对应的第二物理地址是有效的。
[0011] 在一些实施中,对于所述多个第一请求中的每一个,使用哈希值的至少一部分生成第一签名包括使用来自所述哈希值的预定数量的最低有效位来生成第一签名。对于所述多个第一请求中的每一个,使用哈希值的至少一部分生成第一签名可以包括使用全部哈希值生成第一签名。通过使用密钥值加密第一物理地址而生成哈希值可以包括使用密钥值作为伽罗瓦消息认证码(Galois Message Authentication Code)(GMAC)处理的输入来确定密文和加密第一物理地址的认证标签、以及使用认证标签作为哈希值。
[0012] 在一些实施中,该方法可以包括使用标识符确定用于设备的至少一个权限值。通过使用密钥值加密第一物理地址而生成哈希值可以包括通过使用所述至少一个权限值加密第一物理地址而确定哈希值。所述至少一个权限值可以包括读取权限位、写入权限位、执行权限位、可告诉缓存位、缓存级别提示位、业务类别、或虚拟通道号码中的至少一个。
[0013] 在一些实施中,所述多个第二请求中的每一个包括用于设备的标识符。每一个第二签名可以包括加密的物理地址。对于所述多个第二请求中的每一个,由组件使用对应的第二签名确定对应的第二物理地址是否是有效的可以包括:使用所述标识符确定密钥值、通过使用密钥值解密对应的加密物理地址来确定解密值、确定解密值是否包括具有预定长度的零的前缀、当确定解密值包括具有预定长度的零的前缀时确定对应的第二物理地址是有效的、并且使用解密值作为对应的第二个物理地址。通过使用密钥值解密对应的加密物理地址来确定解密值可以包括通过使用密钥值作为对块密码的输入解密对应的加密物理地址来确定解密值。通过使用密钥值解密对应的加密物理地址来确定解密值可以包括通过使用密钥值作为高级加密标准处理的输入解密对应的加密物理地址来确定解密值。
[0014] 在一些实施中,从设备接收所述多个第二请求包括:对于所述多个第二请求中的每一个,通过交换芯片从设备接收对应的第二请求;对于所述多个第二请求中的每一个,由交换芯片确定对应的第二请求包括未知地址;以及对于所述多个第二请求中的每一个,通过交换芯片发送对应的第二请求到组件。
[0015] 在一些实施中,对于所述多个第一请求中的每一个,向设备提供包括第一签名的响应包括对于所述多个第一请求中的每一个,使用错误检测码字段中的第一签名和响应的主体中的第一物理地址生成响应。对于所述多个第一请求中每一个,使用错误检测代码字段中的第一签名和响应的本体中的第一物理地址生成响应可以包括使用第一签名和来自响应的内容而非来自错误检测代码字段的内容生成错误检测代码值,以及在响应的错误检测代码字段中使用错误检测代码值。对于所述第二请求中的每一个,由组件使用对应的第二签名确定对应的第二物理地址是否是有效的可以包括:对于所述多个第二请求中的每一个,使用来自所述多个第二请求中的对应的一个第二请求中的错误检测代码字段的对应的第二签名验证对应的第二物理地址。对于所述多个第二请求中的每一个,由组件使用对应的第二签名确定对应的第二物理地址是否是有效的可以包括:对于所述多个第二请求中的每一个,使用来自所述多个第二请求中的对应的一个第二请求中的错误检测代码字段的错误检测代码值验证对应的第二物理地址和所述多个的第二请求中的对应的一个第二请求的完整性(integrity),其中,错误检测代码值使用对应的第二签名生成。
[0016] 在一些实施中,对于至少一个第二请求,向对应的第二请求提供服务包括:确定所述第二请求包括读取请求;由组件向与对应的第二物理地址相关联的第二设备提供读取请求,读取请求包括对应的第二签名;从第二设备接收对读取请求的第二响应,第二响应包括目的地地址和签名;以及使用签名确定目的地地址是否有效。该方法可以包括对于使用签名确定目的地地址有效的至少一个第二请求中的每一个,向设备提供来自第二响应的内容,并且对于使用签名被确定为目的地地址无效的至少一个第二请求中的每一个,丢弃第二响应。所述方法可以包括对于所述至少一个第二请求中的一个,向设备提供来自第二响应的内容,并且对所述至少一个第二请求中的另一个,丢弃第二请求。
[0017] 本说明书中描述的主题可以在特定实施例中实施,并且可以导致以下一个或多个优点。在一些实施中,下面描述的系统和方法可以阻止设备访问设备允许范围之外的物理地址,例如对于执行其自己的地址转换的设备、或者当系统仅在转换时验证地址时。例如,每当设备请求访问地址时,系统可以验证设备应该被允许访问地址。在一些实施中,下面描述的系统和方法可以防止设备的恶意或错误的软件或硬件利用设备中的有意或意外缺陷来访问设备预期允许访问的系统范围之外的存储器,例如,当设备构建器不能够验证设备硅与设备的设计匹配时。在一些实施中,下面描述的系统和方法可以防止签名的暴力猜测,因为良好运转的设备从不会发出无效地址,并且系统可以在设备第一次向系统提供无效地址时停止、复位设备或者进行这两者。
[0018] 在一些实施中,下面描述的系统和方法可以允许:用于每个请求,系统通过依赖设备中的地址的存储、用于地址的签名或这两者、而不依赖于设备被信任只生成有效的地址来验证设备的存储器访问请求,而不访问用于设备的有效地址的映射。在一些实施中,下文描述的系统和方法与其它系统(例如具有转换旁视(lookaside)缓冲器)相比,基于所需要的密钥值的数量,可能需要较少的存储器空储存间。在一些实施中,下面描述的系统和方法可以帮助限制系统中需要被信任的组件的数量,例如,限于中央处理单元(CPU)和在与CPU相同芯片上的组件或这两者,其可以不经对现有硬件或全部现有硬件的改变而被实施。在一些实施中,组件可以使用用于单个设备的多个键(key)、索引、或者这两者来移除设备对设备先前已经访问的一些而非所有存储器位置的访问。
[0019] 本说明书的主题的一个或多个实施例的细节在附图和下面的说明中阐述。通过说明、附图和权利要求,本主题的其他特征、方面和优点将变得显而易见。

附图说明

[0020] 图1是其中存储器管理单元为多个设备生成并且提供用于物理地址的签名的环境的示例;
[0021] 图2是用于处理请求的过程的流程图。
[0022] 图3是可以结合本文中描述的计算机实施的方法使用的计算系统的框图。
[0023] 相同的附图标记和标号表示相同的元件。

具体实施方式

[0024] 概要
[0025] 在一些实施中,例如在外围组件互连(PCI)根联合体(root complex)中,输入/输出存储器管理单元(IOMMU)对于来自设备的每个地址转换请求使用随机产生的密钥值生成签名,该密钥值作为加密键(cryptographic key)的一部分,只有IOMMU可以访问。IOMMU向设备提供签名,并且设备必须在将来访问转换的物理地址的所有未来请求中向IOMMU提供签名,以便IOMMU可以例如以简单的计算来验证和接受或拒绝访问请求。IOMMU可以使用签名来防止设备欺骗任何其他物理地址或重放无效地址,例如用于访问设备所允许范围之外的存储器。IOMMU可以对提供给设备的包(例如,PCI express(PCIe)包)的地址或另一个字段中的签名(例如加密签名)编码。
[0026] 例如,设备可以从存储器管理单元(MMU)接收转换的地址,MMU使用PCI标准设备地址转换或占据设备中页表条目的MMU设备驱动地址映射操作确定该转换的地址。在一些示例中,MMU可以调用MMU驱动代码来分配每个设备独有的设备虚拟地址,并且创建将该虚拟地址转换为指定的中央处理单元(CPU)物理地址的MMU页表映射。
[0027] 例如,当MMU创建页表映射时,MMU添加签名到映射中的物理地址中的每一个。随后,当设备经由地址转换服务(ATS)请求从MMU的转换时,MMU向设备提供签名或提供签名和地址这两者。在一些示例中,MMU设备驱动器例如可以将虚拟和物理地址(包括签名)发送到设备,因此设备包括本地页表,并且不需要请求从MMU的转换。
[0028] 在一些实施中,系统可以依赖于这样的机制:当生成签名时,该机制防止设备欺骗设备的身份的一部分例如,PCIe设备标识符可以是称为总线/设备/功能(BDF)的16位元组,并且PCI的访问控制服务(ACS)可以阻止设备改变设备的总线号。当生成签名时,MMU可以使用设备的总线号,例如,通过用元组替换提供给设备的物理地址:“地址、哈希(MMU密钥值、物理地址、读取权限位、写入权限位、执行权限位、设备总线号)”。在一些实施中,除了上述那些之外或代替上述那些,MMU可以使用其他位或值作为哈希函数的输入。在一些示例中,地址和签名一起可以是六十四位。MMU可以使用任何适当的方法来生成签名,包括下面描述的附加方法。
[0029] 在一些示例中,当地址(例如PCIe地址)可以编码64位以识别每个地址时,并且典型的页面分配粒度是4KB、2MB和1GB,系统对于每个相应的页面大小可以使用每个页面粒度的53、44或35最高有效位或最低有效位以生成签名。在一些示例中,MMU例如可以提供53位用于签名的4KB大小的转换,因此MMU不必确定原始页面转换大小、或计算三个签名,每个签名被来自哈希计算的不同的低阶位掩码。在一些实施中,MMU可以在响应(例如PCIe包)中添加页面大小指示,并且将该字段包括在哈希数据中,并且例如使用页面大小来确定用于签名的位数以及表示地址的位数。
[0030] 设备包括用于该特定物理地址的每个存储器访问请求中的该特定物理地址的签名,例如其通常包含特定物理地址和设备的BDF。比如,在运行时,设备将在用于特定物理地址的每个存储器业务中发送特定的物理地址和签名。
[0031] 例如,在PCIe根联合体中,MMU可以在并行验证签名的同时开始处理该请求,并且如果MMU确定该签名是无效的,可以中止该请求的处理,并且例如在MMU首次从设备接收到无效地址时,停止、复位设备或对设备进行这两者。在一些示例中,当MMU检测到无效地址或周期性地检测到无效地址时,MMU可以轮换密钥值以有效地摧毁攻击设备可能具有的所有可用信息。例如,密钥值可以是每个设备密钥值,并且MMU可以仅改变为MMU提供了无效地址的设备的密钥值。在一些示例中,MMU可以对于每个设备有两个密钥值,例如用于密钥值轮换。
[0032] 在一些实施中,MMU可以从操作系统或管理程序(例如,管理程序驱动器码)接收密钥值。在一些实施中,MMU可以在内部生成密钥值,并且例如永远不会将密钥值直接曝光给软件。系统可以使用任何适当的方法来生成密钥值。
[0033] 签名生成和验证
[0034] 图1是其中存储器管理单元102生成并向多个设备A-B 104a-b提供物理地址的签名的环境100的示例。比如,存储器管理单元102可以在时间TA接收来自设备A 104a的地址转换请求并且使用将虚拟地址(诸如地址转换请求中包括的虚拟地址)与物理地址相关联的地址映射106。
[0035] 然后,存储器管理单元102在时间TB确定所请求地址的签名。存储器管理单元102可以先前已经生成签名,例如,当为设备A 104a创建地址映射106并且将签名存储在地址映射106中时,或者可以响应于地址转换请求的接收而生成签名。存储器管理单元102可以确定所请求的地址的签名类型108,例如,使用地址转换请求中的虚拟地址,对应的物理地址,存储器管理单元102从其接收到地址转换请求的设备A 104a,存储器管理单元102从其接收到地址转换请求的设备A 104a或存储区器管理单元102的功能性,或包括这些中的两个或更多个的组合的任何其他适当的方法。
[0036] 在一些实施中,存储器管理单元102可以使用设备A 104a的密钥值、物理地址以及读取权限位、写入权限位、执行权限位或设备总线号来生成物理地址的签名。密钥值对于存储器管理单元102并可选地对于设备A 104a是特定的。当密钥值对于存储器管理单元102是特定的时,并且设备向存储器管理单元102发送无效访问请求,例如其具有无效地址、无效签名或两者,存储器管理单元102可以复位密钥值并确定设备可访问的所有地址的新签名。当密钥值对于特定设备(例如设备A 104a)是特定的时,并且特定设备向存储器管理单元
102发送无效访问请求时,存储器管理单元102可以复位密钥值并且确定该特定设备可访问的所有地址、而不是其他设备可访问的地址的新的签名。在一些示例中,存储器管理单元
102可以使用对于两个存储器管理单元102均特定而不是对于其他存储器管理单元特定的密钥值,并且其对于特定设备(例如,设备A 104a)也是特定的。在这些示例中,特定设备仅将数据访问请求发送到存储器管理单元102,而不是不具有用于确定请求中的签名的密钥值的另一存储器管理单元。
[0037] 存储器管理单元102可以确定设备A 104a的权限,并且使用这些权限中的一个或多个(例如读取、写入或执行)来产生签名。在一些示例中,存储器管理单元102可以使用用于设备A 104a的任何数量的模式或权限位,诸如可缓存性位、缓存级提示位、业务类或虚拟通道号码中的一个或多个。存储器管理单元102可以使用哈希函数(例如强加密哈希函数)来生成签名。
[0038] 存储器管理单元102可以选择哈希函数以生成签名、并包括具有地址108a的签名,其例如在时间TC提供给设备A 104a的响应中附加或连接到地址的结尾或开始,使得设备A 104a将在对由物理地址108a识别的存储器位置的访问的任何请求中包括签名。比如,在时间TD,设备A 104a可以包括用于访问由地址108a指定的存储器位置的请求中的签名。
[0039] 当存储器管理单元102在时间TD从设备A 104a接收到地址108a时,存储器管理单元102在时间TE使用签名来验证地址,以确保地址、签名或两者都没有由设备A 104a修改、另一个设备不使用地址108a、并且请求设备A 104a应被允许访问对应的存储器位置。例如,存储器管理单元102可以使用签名和设备总线号码或者该特定设备的密钥值或这两者验证只有设备A 104a、而设备B 104b没有向存储器管理单元102提供地址108a。
[0040] 在一些实施中,存储器管理单元102可以通过生成用于地址的新签名并且将新签名与来自请求的签名进行比较以确定签名是否匹配来使用签名来验证地址或请求。如果签名匹配,则存储器管理单元102确定地址和请求是有效的。如果签名不匹配,则存储器管理单元102确定地址和请求是无效的。存储器管理单元102可以使用包括在请求中的签名来执行任何适当的方法,以确定地址和对应的请求是否有效。
[0041] 在验证访问请求时,存储器管理单元102在时间TF可以向该请求提供服务或者致使该请求例如由另一个组件提供服务。比如,存储器管理单元102可以允许设备A 104a访问包括由存储器访问请求中的物理地址标识的位置的存储器110。
[0042] 当存储器管理单元102确定地址、签名或两者均已经被修改,或者确定另一设备(例如,设备B 104b)将地址108a提供给存储器管理单元102时,存储器管理单元102例如不向请求提供服务,并且可以复位或引起设备A-B 104a-b中的一个或两个的复位。比如,当地址或签名已经被修改时,存储器管理单元102或环境100中的其他组件(诸如PCIe根联合体)复位设备A 104a。在一些示例中,如果存储器管理单元102确定设备B 104b向存储器管理单元102提供了地址108a,则当存储器管理单元102向设备A104a提供地址108a时,存储器管理单元102可以复位设备B 104、设备A 104a或者致使设备B 104、设备A 104a或两者的复位。
[0043] 当存储器管理单元102复位设备或致使设备复位时,存储器管理单元102可以改变设备的密钥值。在一些示例中,当存储器管理单元102改变设备的密钥值而不复位设备时,存储器管理单元102可以向设备提供更新的签名,以防止存储器管理单元102例如接收到具有使用先前的密钥值生成的签名并确定该请求是无效的。例如,存储器管理单元102可以向设备提供更新的页表。
[0044] 在一些实施中,存储器管理单元102可以使用高级加密标准(AES)处理来生成签名。比如,存储器管理单元102可以使用伽罗瓦/计数器模式(Galois/Counter Mode)(GCM)作为10轮AES-128加密处理来生成签名。存储器管理单元可以使用伽罗瓦消息认证码(GMAC)处理来生成签名。除了任何其他适当的输入值,存储器管理单元102例如可以使用物理地址、设备的密钥值、请求设备的权限以及请求设备的总线号码作为AES-GCM处理的输入。在一些示例中,存储器管理单元102例如可以使用结果标签(例如,认证标签或GMAC标签)作为签名,并丢弃所生成的密文。
[0045] 在一些实施中,存储器管理单元102可以在时间TB使用包括在地址108b中的零的前缀位来生成签名。比如,存储器管理单元102可以确定地址108b中包括的前导零位的数量,例如使用存储器管理单元102或请求设备A 104a的密钥值、以及可能的其他值(诸如如上所述的访问位或值)加密地址108b,并且在时间TC向请求设备提供加密的地址。
[0046] 验证期间,在时间TE,响应于对与加密地址相对应的存储器的访问请求,存储器管理单元102例如使用密钥值和其他值来解密地址,并且确定包括在解密地址108b中的前导零位的数量是否正确。如果前导零位的数量正确,则存储器管理单元102在时刻TF服务该请求。如果例如前导零位的数量与最初包含在地址中的前导零位的数量不匹配并且不正确,则存储器管理单元102不向该请求提供服务,并且可以复位或停止设备或致使该设备的复位或停止。
[0047] 在一些示例中,存储器管理单元102可以使用块密码来加密地址108b。比如,存储器管理单元102可以使用具有8字节块大小的块密码或具有地址108b的计数器模式中的AES作为随机数生成的输入。当存储器管理单元102使用计数器(例如,每个密钥值一个计数器)时,存储器管理单元102例如包括在时间TC发送到设备A 104a的响应中用于加密处理的计数器的当前值,使得存储器管理单元102可以在解密处理期间使用计数器值。存储器管理单元102可以使用密钥值作为块密码的输入。存储器管理单元102可以使用任何适当的方法来加密地址108b和可以使用对应的方法来解密加密的地址。
[0048] 在一些实施中,存储器管理单元102可以在时间TB生成地址108c的签名,并将签名存储在时间TC向请求设备(例如,设备A 104a)提供的响应的另一个字段中。在一些示例中,存储器管理单元102可以将签名存储在响应校验和中,该响应校验和例如由PCIe定义,以检测电信号线上的噪声。比如,存储器管理单元可以生成用于响应包的业务层包(packet)摘要,并且将物理地址包括在响应包的主体中。存储器管理单元可以在业务层包摘要中包括签名,例如作为链路循环冗余校验(LCRC)附加到摘要的末尾,并且请求设备接收响应包。
[0049] 当请求设备A 104a需要访问由物理地址指定的存储器位置时,请求设备A 104a在时间TD向存储器管理单元102提供具有业务层包摘要和签名的响应包,可能使包通过一个或多个交换器(switch)。存储器管理单元102在时间TE使用位于校验和中的签名验证地址,并确保地址、签名或两者都未被修改或损坏,并且确保该请求应该被提供服务。
[0050] 在一些实施中,响应包括可以包括指示校验和是否存在的设置数据。比如,组件或设备一般可以使用校验和来确定响应包是否已被破坏。在这些实施中,从请求设备A 104a将数据包传递到存储器管理单元102的任何交换器或其他组件被阻止使用校验和来确定包是否已经被破坏,例如,设置数据可以指示校验和不存在,尽管签名存储在校验和位置中。存储器管理单元102或环境中的另一个组件可以使用任何适当的方法来确保将包传递到存储器管理单元102或从存储器管理单元102传递到请求设备A 104a的中间组件不使用校验和字段中的签名来确定数据包是否已损坏。
[0051] 在一些实施中,存储器管理单元102可以使用签名和包的内容生成校验和,并将该校验和存储在包中。然后,存储器管理单元102可以使用校验和来验证包的内容和地址的签名。例如,当存储器管理单元102从设备A 104a接收到对存储器的访问请求时,存储器管理单元102可以使用请求中的地址生成签名,并使用签名和地址来生成新的校验和。如果新的校验和与包括在请求中的校验和相匹配,则存储器管理单元102向该请求提供服务、或者使得该请求被提供服务,并且例如已经验证了包的地址和完整性两者。如果新的校验和与包括在请求中的校验和不匹配,则存储器管理单元102确保请求不被提供服务。
[0052] 当存储器管理单元102确定用于物理地址的存储器访问请求不包括签名时,存储器管理单元102不向该请求提供服务。比如,当恶意设备为了访问对应于物理地址的存储器而向存储器管理单元102发送物理地址或欺骗的物理地址(例如无效物理地址)时,存储器管理单元102确定恶意设备在请求中不包括签名。存储器管理单元102可以复位恶意设备或停止恶意设备或致使恶意设备复位或停止。在确定请求是否包括签名之前,存储器管理单元102可以确定请求中的地址不是虚拟地址,例如,如下文更详细地描述的。
[0053] 设备间请求
[0054] 在一些示例中,当存储器管理单元102向请求提供服务时,存储器管理单元102可以在时间TJ向另一设备B 104b提供请求。在这些示例中,请求可以是读取请求或写入请求。存储器管理单元102可以在发送到另一设备B 104b的请求中提供所请求的地址的签名。比如,当存储器管理单元102将从设备A 104a接收到的请求转发到另一设备B 104b时,转发的请求可以包括例如设备A 104a所请求的地址或目的地地址的签名。存储器管理单元102可以在请求的地址字段、报头(header)或两者中包括签名。
[0055] 另一设备B 104b相应于请求确定数据,并在时间Tk向存储器管理单元102提供响应。另一设备B 104b包括来自响应中的请求的签名,例如在主体、报头或二者中。例如,另一个设备B 104b可以在响应的目的地地址中、用于响应的校验和中、响应的主体中、或这些中的两个或更多个的组合中包括签名,如下面更详细地描述的。
[0056] 存储器管理单元102在时间TL接收响应并使用签名来验证响应。比如,存储器管理单元102使用上述方法之一来验证响应,以将响应(例如,目的地地址)唯一地连接到请求设备A 104a。存储器管理单元102可以验证(例如请求设备A 104a的)目的地地址、所请求的数据的地址、或这两者。
[0057] 在验证响应时,存储器管理单元102向设备A 104a提供响应。当存储器管理单元102确定响应无效时,存储器管理单元102不向响应中标识的目的地提供响应。存储器管理单元102可能对目的地不提供响应,例如可能破坏响应,以阻止未经请求的响应被发送到设备,例如作为拒绝服务攻击的一部分。
[0058] 在一些实施中,当向另一设备转发请求时,存储器管理单元102可以在时间TJ向另一个设备B 104b提供请求,该请求包括请求设备A 104a和将服务该请求的另一设备的B 104b的签名。比如,存储器管理单元102可以使用设备的对应密钥值、对应的总线号码以及要访问的存储器位置的物理地址来确定每个设备的两个签名。
[0059] 另一个设备B 104b然后将以响应于请求的数据和两个签名响应请求,这两个签名或者在响应的主体中、报头中或在这两者中,例如一个签名在主体中,且另一签名在报头中。存储器管理单元102然后使用这两个签名来验证响应,并且仅响应于使用这两个签名的验证来向请求设备提供响应。这可以阻止其他设备B 104b向从未提供给该另一设备B 104b的请求发送“响应”。
[0060] 在一些实施中,当设备可以在对等环境(例如,没有监视通信的存储器管理单元)中进行通信时,每个设备可以生成签名并执行类似于上述的验证。例如,请求设备A 104a可以从另一设备B 104b请求针对虚拟地址的地址转换,并接收具有或不具有地址的签名以响应。请求设备A 104a然后可以向另一个设备B 104b发送对对应的物理存储器位置的访问请求,并且包括该请求的签名。另一个设备B 104b然后使用签名验证该请求,并且仅响应于确定该请求有效而响应该请求。
[0061] 在一些示例中,从请求设备A 104a发送的请求可以包括两个签名,另一他设备B 104b使用这两个签名中的一个以验证该请求,请求设备A 104a使用这两个签名中的另一个用于验证响应。比如,第一签名可以被包括在请求的地址字段中,而另一个设备B 104b可以使用第一签名来确定该请求是否有效。第二签名可以被包括在请求的报头中,使得另一设备B 104b在响应中包括第二签名,并且请求设备A 104a使用第二签名确定响应是否有效。
当设备A 104a接收到例如在报头中不包括签名的“响应”时,设备A 104a例如通过丢弃数据来拒绝该响应。
[0062] 示例处理流程
[0063] 图2是用于处理请求的过程200的流程图。例如,过程200可以由来自环境100的存储器管理单元102使用。
[0064] 系统接收多个请求,每个请求用于物理地址(202)。比如,存储器管理单元、转换器或根联合体接收请求。
[0065] 对于每个请求,系统确定请求是否包括未知地址(204)。例如,当诸如交换芯片的组件接收到请求时,交换芯片可以确定交换芯片不识别地址,并且应该将地址转发到存储器管理单元,该存储器管理单元例如包括在交换芯片或其他组件中(诸如根联合体)。
[0066] 在一些示例中,当交换芯片包括在主板中时,交换芯片可以接收包括来自设备(例如,视频卡)的地址的请求。交换芯片可以确定其不知道包括在请求中的地址的目的地,例如,该地址是虚拟地址或包括签名,以及该地址是未知的。然后,交换芯片可以确定是否将请求转发到存储器管理单元用于处理,例如从虚拟地址转换到物理地址或使用包括在地址中的签名的验证。
[0067] 响应于确定请求不包括未知地址,系统处理请求(206)。例如,组件例如通过将请求转发到可具有响应于该请求的数据的另一个设备或组件而向请求提供服务。
[0068] 响应于确定请求包括未知地址,系统将请求发送到存储器管理单元(208)。例如,交换芯片将请求发送到存储器管理单元,因为交换芯片不能使用请求中的目的地地址来确定请求的目的地。
[0069] 系统确定请求是否包括虚拟地址(210)。例如,组件确定地址类型字段是否指示请求包括虚拟地址或物理地址。在一些示例中,当请求是PCIe请求时,地址类型字段可以具有用于非转换的虚拟地址的第一编码、对于转换请求(例如包括虚拟地址)的第二编码、用于转换的地址(例如包括物理地址)的第三编码。
[0070] 响应于确定请求包括虚拟地址,系统使用虚拟地址确定物理地址(212)。例如,组件使用将虚拟地址与物理地址(例如,页表)相关联的映射来确定物理地址。
[0071] 系统生成物理地址的签名(214)。比如,组件使用本说明书中描述的方法之一来生成签名并将签名存储在例如响应的地址字段主体中、响应的报头或者这两者中。组件可以使用设备的标识符来确定在生成签名时要使用的密钥值。在一些示例中,组件可以使用例如对于组件是特定、而对于其他特定设备不是特定的的通用密钥值。
[0072] 在一些示例中,系统可以使用物理地址中的两个或更多个、组件的密钥值、设备的密钥值、设备的标识符(例如设备总线号码)、读取权限位、写入权限位、执行权限位或与组件或设备或这两者相关联的其他适当值来生成哈希。该系统可以使用哈希的全部或一部分作为签名,例如预定数量的最高有效位或最低有效位。在一些示例中,设备的标识符可能对于设备的功能是特定的。在一些实施中,设备的标识符可以是设备的总线号码、设备号码或功能号码中的一个或多个,其例如由PCIe指定。
[0073] 在一些实施中,组件可以生成用于物理地址的签名、将签名连接到物理地址、并且对连接的签名和物理地址进行加密。组件可以将加密的连接签名和物理地址放在响应中。在一些示例中,组件可加密物理地址,生成用于加密物理地址的签名,并将加密的物理地址或物理地址的明文版本放在具有签名的响应中。加密的物理地址的物理地址和签名可以在响应的相同字段(例如,主体)中,或者可以在不同的字段中,例如,加密或明文的物理地址可以在主体中,并且签名可以在响应的报头中。
[0074] 系统提供包括签名的响应(216)。例如,组件向请求设备提供响应。响应可以包括具有签名的明文物理地址,例如均在响应的主体字段中或在有签名的报头中。响应可以包括具有签名的加密物理地址,例如均在响应的主体字段中或者在有签名的报头中。响应可以包括在响应的主体中的加密物理地址,使得物理地址的解密版本在物理地址的预定部分中包括已知的良好值,例如明文地址的最前N个位必须全部是零。在一些例子中,N是32位。
[0075] 响应于确定请求不包括虚拟地址,系统使用对应的签名来确定针对请求的物理地址是否是有效的(218)。例如,组件生成用于物理地址的签名,并将新生成的签名与请求中包含的签名进行比较,以确定两个签名是否相同。
[0076] 在一些实施中,组件可以使用包括在请求中的请求设备的标识符来确定设备的密钥值,或者当组件不具有每个设备的密钥值时,该组件可以使用通用密钥值。然后,组件使用与组件先前用于生成包括在请求中的签名的相同方法生成用于物理地址的签名,例如使用密钥值,然后将新生成的签名与请求中包括的签名进行比较,以确定物理地址和请求是否被验证有效。
[0077] 在一些实施中,当签名是地址中的预定数量的零时,组件可以通过解密包括在请求中的加密物理地址、并将解密地址中的连续的零(例如在物理地址的开始或结尾)的数量与一已知值(例如指定地址中应有的连续零的数量)进行比较来确定地址是有效的。如果解密地址中的连续的零的数量与已知值相同,则组件确定签名和请求验证有效。如果解密地址中的连续零的数量与已知值不相同,则组件确定签名和请求验证无效。
[0078] 响应于使用对应签名确定请求的物理地址验证有效,系统向该请求提供服务(220)。例如,组件将请求转发到目标设备或组件。
[0079] 响应于使用对应签名确定请求的物理地址验证无效,系统不向该请求提供服务(222)。比如,组件可以拒绝该请求、复位或停止向组件发送请求的设备、记录标识该请求的错误(例如,在错误日志中)、更改请求设备的密钥值、禁止请求设备访问内存、或这些中的两个或更多个的任意组合。在一些实施中,例如当存储器管理单元确定该请求不应被提供服务时,交换芯片或根联合体响应于来自存储器管理单元的消息而禁用请求设备对存储器的访问。
[0080] 上述过程200中的步骤的顺序仅是说明性的,并且请求的处理可以以不同的顺序执行。例如,在接收到虚拟地址到物理地址的转换请求(例如,步骤202)之前,系统可以生成物理地址的签名,例如执行步骤214。
[0081] 在一些实施中,过程200可以包括额外的步骤、更少的步骤、或者步骤中的一些可以被分成多个步骤。例如,组件可以执行步骤202、210和218到222而不执行剩余的步骤。在一些示例中,组件可以执行步骤202和210至216,而不执行剩余的步骤。在一些实施中,过程200可以不包括步骤204至208。
[0082] 在一些实施中,第一组件(例如交换芯片)可以最初接收每个请求,然后将请求转发到例如存储器管理单元的第二组件,例如作为步骤202的一部分。第一组件可以确定每个请求包括未知地址,例如,虚拟地址或具有签名的地址,然后将该请求提供给第二组件(例如存储器管理单元)。在一些实施中,第一组件可以执行步骤202和204,并且可选地,对于一些请求执行步骤206,然后将未使用步骤206处理的请求转发到第二组件进行处理。当例如请求被拒绝或者请求设备被停止时,第一组件和第二组件可以通信以向或不向该请求提供服务。
[0083] 在一些实施中,当交换芯片中的存储器管理单元执行处理200中的步骤时,存储器管理单元可以在发送请求到另一个设备或组件进行处理之前将包括签名的请求转换为“标准”请求,例如无签名。比如,在确定请求是有效的之后,存储器管理单元可以将请求转换为仅包括物理地址而没有签名、并将转换的请求转发到另一设备或组件(例如,根联合体)以进行处理。在一些示例中,无论存储器管理单元位于系统中的何处,存储器管理单元在将请求转送到目的设备之前将请求转换为没有签名的标准请求,例如,无论存储器管理单元是否为交换芯片、根联合体或另一组件的一部分。在将请求发送到另一设备(例如根联合体)之前,存储器管理单元可以将包括该请求的包标记为“转换的地址”。
[0084] 可选实施细节
[0085] 在一些实施中,存储器管理单元可以平衡设备可能在第一尝试中利用签名的长度(例如,较短签名)成功地确定签名的概率。例如,如果存储器管理单元使用密码处理并且签名是N位长的,则取决于所使用的加密过程,该设备具有1/2^N的概率来猜测用于地址的有效签名该设备不应被允许访问的权限。设备可以存储有效地址和有效的签名,并且可以使用有效地址和有效签名使某种形式的已知明文攻击可获得。
[0086] 在一些示例中,存储器管理单元可以例如通过去除诸如零的不必要的位来截断地址。比如,当存储器管理单元使用64位地址时,存储器管理单元可以创建16位签名,例如通过从对应的地址去除前导的16位,并且使用48位用于地址。当接收到对存储器位置的访问请求时,存储器管理单元可以使用地址的48位来生成新的签名,并将新签名与包括在地址中的签名进行比较,以确定两个签名是否匹配。如果这两个签名匹配,则存储器管理单元可以处理该请求。如果两个签名不匹配,则存储器管理单元不处理该请求,并且例如可以复位、停止请求设备或对请求设备进行这两者。
[0087] 在一些实施中,当组件(例如PCIe交换芯片)通过地址路由存储器访问请求时,执行路由的组件可以执行验证。在一些示例中,当执行路由的组件接收到未知地址(例如,包含签名和截断地址)时,执行路由的组件可以将未知地址转发到存储器管理单元(例如包括存储器管理单元的PCIe根联合体)用于处理。
[0088] 在一些实施中,环境可以包括用于地址的位和用于签名的位之间的可配置分区,使得可配置分区可以被调整以实现设备猜测有效签名的期望概率。例如,在包括1TB的随机存取存储器(RAM)的环境中,存储器管理单元可以使用24位用于签名。存储器管理单元可以基于RAM或环境中的另一存储器的大小来调整签名的大小。例如,当包括存储器管理单元的计算机最初被开启时,存储器管理单元可以确定签名的大小。
[0089] 在一些实施中,存储器管理单元在接收到用于将虚拟地址转换为对应的物理地址的请求时生成签名。在一些实施中,当向设备提供对应的虚拟地址时或者响应于接收到用于设备的虚拟地址的标识,存储器管理单元生成用于所有物理地址的签名。在这些实施中,存储器管理单元可以将签名存储在地址映射中。在一些示例中,存储器管理单元可以向设备提供地址映射,并且在地址映射的地址字段中包括签名。
[0090] 在一些实施中,存储器管理单元例如响应于对相应物理地址的请求而向设备提供单个签名。在一些实施中,存储器管理单元一次为设备提供多个签名,例如对于物理地址块或者设备可以访问的所有物理地址。存储器管理单元可以响应于检测到设备而向设备提供多个签名。
[0091] 在一些实施中,存储器管理单元可以响应于地址转换请求(例如,当地址被加密时)仅向请求设备提供签名。在一些实施中,响应于地址转换请求,存储器管理单元可以向请求设备提供签名和地址两者。
[0092] 在一些实施中,存储器管理单元可以使用上述方法中的两种或更多种来生成签名。例如,存储器管理单元可将标签的一部分存储在包的地址字段中,并将部分签名的一部分存储在报头字段(例如校验和字段)中。在一些示例中,存储器管理单元可以确定前导零的数量、加密地址、确定加密地址的签名、并将签名存储在将加密的地址包括在主体中的包的报头字段(例如校验和字段)中。当确定访问请求的地址是否有效时,存储器管理单元可以生成新的签名、将新的签名与包括在访问请求中的签名进行比较、解密地址、确定解密地址中的前导零的数量、并且只有在解密地址中的前导零的数量正确、并且新签名和包括在访问请求中的签名相同时才向该请求提供。
[0093] 在一些实施中,除存储器管理单元之外的组件或输入/输出存储器管理单元可以生成和验证签名或执行上述步骤中的一些。例如,交换器、根联合体或中央处理单元可以生成并验证签名。在一些示例中,单个类型的组件(例如,存储器管理单元)可以生成签名,并且多个不同类型的组件(例如存储器管理单元和交换器两者)可以验证签名。
[0094] 物理系统可以包括多个存储器管理单元和生成及验证地址的其他组件。在这些示例中,特定组件可以为特定设备生成、验证地址或进行这两者。在一些实施中,组件可以共享用于特定设备的密钥值以允许多个组件为特定设备生成、验证签名或进行这两者。
[0095] 在一些实施中,组件可以包括用于单个设备的多个键。比如,组件可以使用不同的键为设备生成和验证不同的地址。当系统将针对设备的访问转移到某些地址时,组件会删除或更改这些地址的键,从而也可能使其他地址无效。为了最小化无效地址的数量,组件使用多个键,使得只有具有相同键的地址无效,并且如果设备仍然可以访问这些地址中的一些地址,则可能需要重新签名,而使用其他秘钥签名且验证有效的地址不需要重新签名。
[0096] 例如,当设备是图形处理单元或使用大量存储器分配的另一设备时,该设备可能具有大量页面,其一部分是持久性的,并且其另一部分快速地流失(churn)并迅速失效。比如,由于垃圾回收,设备可能具有对该部分的持久访问。在这些示例中,组件可以使用用于地址的第一子集(例如,设备将继续访问的第一子集)的第一密钥、以及用于地址的第二子集(例如,快速地失效)的第二密钥。然后,当设备不再能够访问一个或多个地址时,组件可以改变第二密钥,以阻止设备访问由地址的第二子集中的地址标识的对应的存储器位置。
[0097] 组件可以使用多于两个键来实现键轮换的进一步细化。例如,组件可以对于设备将继续访问的地址的第一子集使用第一键或两个第一键,以及对于设备将仅具有临时访问、或对于由于存储器被其他部件或设备覆盖而对应的存储器位置的内容迅速改变的地址的第二子集使用十个第二键。组件可以比一个或多个第一键更快地轮换第二键或第二键中的任一个。
[0098] 组件可以在签名中包括索引标识符,以确定用于特定地址的键。例如,组件可以将键保持在阵列中,并且当生成签名时将索引标识符包括在签名中,例如在签名的开始或结束处。当组件接收到存储器访问请求时,组件从签名确定索引标识符,并使用索引标识符来确定阵列中包括在验证存储器访问请求有效时要使用的键的位置,例如,包括在存储器存访问请求中的地址。
[0099] 在一些示例中,组件可以使用页表中的标识符,例如页表条目,其指示对于特定地址要使用哪个键。当创建用于地址的签名时,组件可以设置标识符,并使用标识符来确定在验证地址有效时要使用哪个键。例如,当对于每个设备使用单个键时,或者当对于一个或多个设备使用多个密钥时,或这两者时,组件可以使用标识符,以确定对于每个设备使用哪个键。
[0100] 在一些实施中,组件可以使用索引而不是用于单个设备的多个键来允许设备访问的地址的子集的无效,同时允许设备继续访问另一个地址子集。例如,签名的一部分可以是组件用于确定设备是否能够访问对应的存储器位置的索引。当组件接收到存储器访问请求时,组件确定缓冲器中的对应位置是否包含预定值。如果缓冲器中的对应位置包含预定值,并且组件验证签名有效,则组件允许设备访问对应的存储器位置。如果缓冲器中的对应位置不包含预定值,或者组件未验证签名有效,则组件不向存储器访问请求提供服务,例如该组件阻止设备访问对应的存储器位置。
[0101] 在一些示例中,组件可以对于设备将继续访问的页面的地址预留第一组索引并且对于设备快速失效的页面的地址预留第二组索引。第二组索引中的索引的数量可以大于第一组索引中的索引的数量。
[0102] 组件可以使用用于每个索引值的具有1位的位向量。为了允许设备访问与特定索引相关联的存储器位置,例如,该特定索引包括表示位向量中的特定索引的位置的特定索引值,组件将位向量中的特定索引的位置的值设定为预定值,例如设定为一。当组件使用设备的键生成签名时,组件包括签名中的特定索引值,例如在签名的开始或结束处。当组件从设备接收到存储器访问请求时,组件确定与从包括在存储器访问请求中的签名检索到的、对应于特定索引值的位向量中的位置是否为预定值。当位向量中的位置是预定值并且组件验证存储器访问请求有效时,该组件允许对存储器访问请求进行服务。当位向量中的位置不是预定值或者组件未验证存储器访问请求有效时,该组件阻止对存储器访问请求进行服务。
[0103] 在一些示例中,组件可以使用用于单个设备的多个键和使用索引来确定该单个设备是否应该访问特定存储器位置。例如,组件可以使用页表条目中的第一位来指示哪个键用于生成对应地址的签名,以及使用页表中的第二位以指示哪个索引用于允许设备访问相应的存储器位置。
[0104] 在一些实施中,当设备本地缓存地址时,组件可以通过向设备发送ATS无效消息或任何其他适当类型的消息来使地址无效(例如,设备不再具有访问的存储器位置)。在一些实施中,组件可以使地址无效,以改变与地址相关联的秘钥、索引或这两者。
[0105] 例如,当组件将设备具有访问权限的地址的第一子集中的每个地址与特定键、特定索引或这两者相关联、并且确定设备不应该能够访问由来自地址的第一个子集的第一地址标识的存储器位置时,组件可以改变键、索引值或这两者。为了允许设备继续访问由地址的第一子集中的其他地址标识的一个或多个其他存储器位置,组件向设备发送地址无效的消息(例如,第二地址),如果需要,生成用于该地址的新签名、或者将索引更改为新的索引值或进行这两者,并使用新签名、新索引值或这两者向设备发送另一个消息。然后,当组件接收到对其他地址之一(例如第二地址)的访问请求时,假定新键、新索引或这两者都仍然有效,组件验证访问请求有效。组件可以将该其他地址分配给初始地可能包括或不包括其他地址的地址的第二子集,例如,组件可以将第二地址分配给已经用于第三地址、或者还没有被用于任何地址的键或索引或这两者。
[0106] 附加实施细节
[0107] 本说明书中描述的主题和功能性操作的实施例可以在计算机硬件中、在计算机软件或固件的有形实施中的数字电子电路中实现,包括本说明书中公开的结构及其结构等同物,或以他们中的一个或多个的组合。本说明书中描述的主题的实施例可以被实现为一个或多个计算机程序,即,在有形的非暂时性程序载体上编码的计算机程序指令的一个或多个模块,以通过数据处理装置执行或控制数据处理装置的操作。替代地或另外,程序指令可以在人为生成的传播信号(例如,机器生成的电、光或电磁信号)上进行编码,其被生成以编码用于传输到合适的接收机装置的信息,以被数据处理装置执行。计算机存储介质可以是机器可读存储设备、机器可读存储基板、随机或串行存取存储器件、或其中的一个或多个的组合。
[0108] 术语“数据处理设备”是指数据处理硬件,并且包括用于处理数据的所有种类的装置、设备和机器,以示例的方式包括可编程处理器、计算机或多个处理器或计算机。该装置还可以是或者进一步包括专用逻辑电路,例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)。除了硬件之外,该装置可以可选地包括为计算机程序创建执行环境的代码,例如构成处理器固件的代码、协议栈、数据库管理系统、操作系统或他们中的一个或多个的组合。
[0109] 可以以任何形式的编程语言(包括编译或解释语言、或声明性或程序性语言)来编写计算机程序,所述计算机程序也可以被称为程序、软件、软件应用程序、模块、软件模块、脚本或代码,并且其可以以任何形式部署,包括作为独立程序、或作为模块、组件、子例程、或作为适用于计算环境的其他单元。计算机程序可以但不一定对应于文件系统中的文件。程序可以存储在保存其他程序或数据(例如存储在标记语言文档中的一个或多个脚本)的文件的一部分中、专用于所讨论的程序的单个文件中、或者在多个协调的文件中,例如存储一个或多个模块、子程序或代码的部分的文件。可以将计算机程序部署为在位于一个站点处的一个计算机上或跨过多个站点分布并由通信网络互连的多个计算机上执行。
[0110] 本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程计算机执行,以通过对输入数据进行操作并产生输出来执行功能。处理和逻辑流程也可以由专用逻辑电路(例如,FPGA(现场可编程门阵列))或ASIC(专用集成电路))执行,并且装置也可以被实施为专用逻辑电路(例如,FPGA或ASIC)。
[0111] 适用于执行计算机程序的计算机以示例的方式包括通用或专用微处理器或两者、或任何其他类型的中央处理单元。通常,中央处理单元将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元素是用于执行或实施指令的中央处理单元以及用于存储指令和数据的一个或多个存储设备。通常,计算机还将包括用于存储数据的一个或多个大容量存储设备,或被可操作地耦合以从用于存储数据的一个或多个大容量存储设备接收数据或传输数据到所述一个或多个大容量存储设备,例如,例如磁性、磁光盘或光盘。然而,计算机无需具有这样的设备。此外,计算机可以嵌入在另一个设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏控制台、全球定位系统(GPS)接收器或便携式存储设备,例如通用串行总线(USB)闪存驱动器,仅举几例。
[0112] 适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设别,以示例的方式包括半导体存储器件,例如EPROM、EEPROM和闪速存储器件;磁盘,例如内部硬盘或可移动盘、磁光盘、和CD ROM和DVD-ROM磁盘。处理器和存储器可由专用逻辑电路补充或并入在专用逻辑电路中。
[0113] 为了提供与用户的交互,本说明书中描述的主题的实施例可以在具有用于对用户显示信息的显示设备(例如CRT(阴极射线管)或LCD(液晶显示器)监视器)的计算机上实现、以及键盘和指示设备,例如鼠标或轨迹球,用户可以通过他们向计算机提供输入。也可以使用其他类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档并从其接收文档来与用户进行交互;例如,通过响应于从网络浏览器接收的请求,将网页发送到用户设备上的网络浏览器。
[0114] 图3中示出这种类型计算机的示例,其示出了通用计算机系统300的示意图。根据一个实施,系统300可以用于关联于先前描述的任何计算机实施的方法而描述的操作。系统300包括处理器310、存储器320、存储设备330和输入/输出设备340。组件310、320、330和340中的每一个使用系统总线350互连。处理器310能够处理用于在系统300内执行的指令。在一个实施中,处理器310是单线程处理器。在另一实施中,处理器310是多线程处理器。处理器
310能够处理存储在存储器320中或存储在存储设备330上的指令,以在输入/输出设备340上显示用于用户界面的图形信息。
[0115] 存储器320存储系统300内的信息。在一个实施中,存储器320是计算机可读介质。在一个实施中,存储器320是易失性存储器单元。在另一实施中,存储器320是非易失性存储器单元。
[0116] 存储装置330能够为系统300提供大量存储。在一个实施中,存储设备330是计算机可读介质。在各种不同的实施中,存储设备330可以是软盘设备、硬盘设备、光盘设备或磁带设备。
[0117] 输入/输出设备340为系统300提供输入/输出操作。在一个实施中,输入/输出设备340包括键盘和/或指示设备。在另一实施中,输入/输出设备340包括用于显示图形用户界面的显示单元。
[0118] 虽然本说明书包含许多具体的实现细节,但是这些不应被解释为对可要求保护的范围的限制,而应被解释为对特定于特定实施例的特征的描述。在本说明书中,在单独的实施例的上下文中描述的某些特征也可以在单个实施例中组合地实施。相反,在单个实施例的上下文中描述的各种特征也可以分开地或以任何合适的子组合在多个实施例中实施。此外,虽然以上可以将特征描述为以某些组合的方式起作用且甚至最初以这样的方式要求保护,但来自要求保护的组合的一个或多个特征在某些情况下可以从该组合中被去除,并且所要求保护的组合可以转变为子组合或子组合的变型。
[0119] 类似地,虽然在附图中以特定顺序描绘了操作,但是这不应被理解为要求以所示的特定顺序或按顺序执行这种操作、或者执行所有所示的操作以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的分离不应被理解为在所有实施例中需要这样的分离,并且应当理解,所描述的程序组件和系统通常可以集成在单个软件产品中或打包成多个软件产品。
[0120] 已经描述了主题的具体实施例。其他实施例在所附权利要求的范围内。例如,权利要求中所述的动作可以以不同的顺序执行,并且仍然实现期望的结果。作为一个示例,附图中所示的过程不一定需要所示的特定顺序或顺序来实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。