用于生成有签名的有界指针的设备及方法与流程

文档序号:15739576发布日期:2018-10-23 22:03阅读:173来源:国知局
本技术涉及数据处理的领域。
背景技术
::一些数据处理装置可支持其中指示特定地址的指针与指示该指针的可允许地址范围的范围信息相关联的有界指针。例如,这样的指针可称作“胖指针”。除范围信息之外,这样的有界指针还可具有其他关联属性,定义关于使用指针的一个或多个限制/许可。因此,通过对如何使用有界指针指定的指针值设置约束,使用该有界指针可提供强安全性。尽管已经开发了能够使有界指针与在寄存器及存储器两者内的通用数据区别开的技术,但有时情况为,需要将该有界指针输出至诸如盘片之类的备用存储库中,并且在这种情况下,可将有界指针分解成仅被视为备用存储器内的通用数据的格式。随后,可能有必要试图从备用存储库中的通用数据重构该有界指针,但需谨慎地控制用于从通用数据重构这样的能力而提供的任何方法,否则可能损害来自使用该有界指针的安全性益处。技术实现要素:在一个示例性配置中,提供了一种装置,包括:处理电路,该处理电路响应于有界指针生成请求而执行生成操作以在满足至少一个生成条件情况下从指定数据生成有界指针,该有界指针包含指针值及关联属性,该关联属性包括指示当使用该指针值时地址的可允许范围的范围信息;处理电路响应于从指定数据检测到待生成的有界指针为并入有签名的有签名的有界指针,以至少在满足签名条件时作为生成操作的一部分而执行插入签名操作,在该插入签名操作期间,该签名根据指定数据的一部分来确定并被并入在所生成的有界指针内;以及存储库,其用以存储由该处理电路生成的有界指针。在另一示例性配置中,提供了一种生成有签名的有界指针的方法,包括:响应于有界指针请求而执行生成操作,以在满足至少一个生成条件情况下从指定数据生成有界指针,该有界指针包含指针值及关联属性,该关联属性包括指示当使用该指针值时地址的可允许范围的范围信息;响应于从指定数据中检测到待生成的有界指针为并入有签名的有签名的有界指针,以至少当满足签名条件时,作为生成操作的一部分而执行插入签名操作,在该插入签名操作期间,该签名根据指定数据的一部分来确定,并被并入在所生成的有界指针内;以及输出所生成有界指针以供存储在存储库位置中。在另一示例性配置中,提供了一种装置,其包含:处理装置,其用以响应于有界指针生成请求而执行生成操作,以在满足至少一个生成条件情况下从指定数据生成有界指针,该有界指针包含指针值及关联属性,该关联属性包括指示当使用该指针值时地址的可允许范围的范围信息;处理装置,该处理装置用以响应于从指定数据检测到待生成的有界指针为并入有签名的有签名的有界指针,以至少当满足签名条件时,作为生成操作的一部分而执行插入签名操作,在该插入签名操作期间,该签名根据指定数据的一部分来确定,并被并入至所生成的有界指针内;以及存储库装置,其用以存储由该处理手段生成的有界指针。附图说明仅通过举例的方式,参照如附图所示的实施例进一步描述本技术,其中:图1是根据一个实施例的设备的框图;图2示出了若存在尝试设置或存取有界指针存储元件组内的指针值则可触发错误的指令类型的示例,其中该指针值用以指定在由关联范围信息指示的范围外的地址;图3示出了根据一个实施例的与有界指针相关联的标志位的使用;图4示意性地示出了根据一个实施例的签名操作及后续授权操作;图5示出了根据一个实施例的在有界指针的关联属性内的签名信息的使用;图6是示出了根据一个实施例的签名操作的流程图;图7为示出根据一个实施例的授权操作的流程图;图8示出了其中相对于有界指针的指针值存储该有界指针的范围信息的示例性布置;图9为示出了根据一个实施例执行以确保有签名能力(也被称为有签名的有界指针)的不变性的操作的流程图;图10为示出了根据一个实施例当允许修改有签名能力的指针值时可执行的操作序列的流程图;图11为示出根据一个实施例执行的解参考操作的流程图;图12为示出了根据一个实施例的能力签名操作如何可限于其中输入能力尚未签名的情况的流程图;图13为示出根据一个实施例执行的剥离操作的流程图;图14A至图14C示出了在一些实施例中可执行以确定是否允许剥离的各种示例检查;图15示出了根据一个实施例的替代的有签名的能力编码;图16A和图16B为分别示出了在其中根据图15的方法将签名添加至有界信息的实施例中的签名操作及授权操作的流程图;图17为根据一个实施例示意性地示出了可用以从保持在备用存储库中的数据重构能力的重建过程的示图;图18为示出了可根据一个实施例执行的能力重建过程的流程图;以及图19A至图19C示出了在一些实施例中可执行以确定在这样的能力重建过程期间是否允许签名的各种检查。具体实施方式在参考附图讨论实施例之前,提供了实施例的以下描述。一些处理装置可支持有界指针的使用。例如,指针本身可指出(或用于确定)待存取的数据值的地址或待执行的指令。然而,指针还可具有在使用该指针时指示可允许地址范围的关联范围信息。例如,这可用于确保依据指针确定的地址保持于某些边界内以维持行为的安全性或功能正确性。例如,对基于能力的架构越来越感兴趣,在该基于能力的架构中某些能力经定义用于给定过程,且若尝试执行在所定义能力以外的操作,则可触发错误。用于有界指针的范围信息可为针对该架构所定义的能力信息的部分,且在基于能力的架构内,该有界指针(包含其相关联的能力信息)可被称为能力。因此,装置可具有用于存储具有关联范围信息的指针的有界指针存储装置元件,该相关联的范围信息在使用指针时指示可允许地址范围。每个有界指针存储装置元件可以是寄存器或通用存储器中的存储器位置,例如,堆栈存储器上的位置。某些指令可用以参考该有界指针存储元件,以便获得随后用以在指令操作期间导出所需存储器中的地址的指针。该指针可直接用以直接标识存储器地址,或可用以例如通过将偏移加至指针值来导出存储器地址。面向软件的一个问题为控制流程完整性(controlflowintegrity;CFI)。具体而言,可尝试破坏经由计算机程序的所欲控制流程,例如通过试图修改所欲分支行为以便以不同于所欲者的方式有效地将程序代码的部分接合在一起。例如,若一个任务可重写由另一任务使用的返回地址,则这可引起其他任务随后分支至非所欲代码区域。诸如在上述基于能力的架构中使用的有界指针的某些性质可在一定程度上减轻CFI问题。例如,关联范围信息可限制地址的范围,当从存储在有界指针存储元件中的指针导出目标地址时,该地址的范围可由分支指令来作为目标。在基于能力的架构中,还已知提供防止通用数据用作能力以导出分支目标地址的机制,并且进一步地可以限制其中可维持某些能力的位置。然而,在这些限制内,欺诈过程仍然可能以引起破坏经由计算机程序的所欲控制流程的方式操纵有界指针,例如通过使控制转移至计划外程序地址来操纵。为了进一步提高有界指针的安全性,预想的是,提供签名过程以使得能够签名有界指针,还提供对应授权过程以允许将有签名的有界指针转回至无签名形式。在签名过程期间,可将签名插入有界指针中,并且在授权过程期间,建立授权签名,随后将其与签名比较以确定是否存在匹配。若存在匹配,则授权过程可进行以取消签名有界指针,以便建立有界指针的无签名形式,随后可用于后续操作。当允许在无签名有界指针之外还使用有签名的有界指针时,当该有界指针被分解并作为通用数据存储在备用存储库内时,会引起额外的复杂化,并且随后需要从通用数据重构有界指针。本文所述的技术意欲提供一种有效且安全的机制,用于不仅使无签名的有界指针,而且使有签名的有界指针从备用存储库中的通用数据得以重建。在一个实施例中,提供一种装置,其具有处理电路,该处理电路响应于有界指针生成请求来执行生成操作以在满足至少一个生成条件情况下从指定数据生成有界指针。该指定数据可采取各种形式,但例如可为包含在诸如盘片之类的备用存储库中的数据。需要生成的有界指针将包含指针值及关联属性,其中该关联属性包括指示当使用该指针值时地址的可允许范围的范围信息。处理电路响应于从指定数据检测到待生成的有界指针为并入有签名的有签名的有界指针,以至少当满足签名条件时,作为生成操作的一部分而执行插入签名操作,在该插入签名操作期间,该签名根据指定数据的一部分来确定并被并入在所生成的有界指针内。随后输出所生成的有界指针以存储在适宜存储元件中,例如存储器内的寄存器或存储库位置。可选择至少一个生成条件,目的为确保处理电路仅能从指定数据建立有界指针,其关联属性标识允许处理电路保持的权限。此举确保处理电路不能仅任意地从备用存储库中的通用数据建立有界指针。生成条件可以以各种方式指定。在一个实施例中,若满足生成条件,则将允许处理电路执行插入签名操作。然而,在替代实施例中,可以指定额外签名条件,需要在允许处理电路执行插入签名操作之前满足该额外签名条件。因此,这可以进一步限制允许处理电路使用通用数据以形成待添加至有界指针中以形成有签名的有界指针的签名。通过上述方法的使用,处理电路可被布置为从指定数据重构有界指针,但可以适当地限制此操作的权限。另外,还可能通过对插入签名操作的适宜控制来支持从指定数据重构有签名的有界指针。在一个实施例中,有签名的有界指针还包括在关联属性内的签名信息。在这样的实施例中,处理电路可还被布置为,在执行插入签名操作时,在所生成的有界指针的关联属性内设置签名信息以标识该有界指针已经被签名。通过在关联属性内包括这样的签名信息,装置能够轻易地区分有签名的有界指针与无签名的有界指针,并且这可使某些操作能够被限制为仅对无签名的有界指针执行,或者当处理有签名的有界指针而非无签名的有界指针时至少实施不同的功能性。在一个实施例中,处理电路被布置为仅当满足该签名条件时,作为生成操作的一部分而执行插入签名操作。随后,响应于确定不满足签名条件,处理电路被布置为阻止生成有界指针。因此,在此实施例中,若不满足签名条件,则生成有界指针的请求失败。处理电路可以多种方式防止有界指针的生成。例如,当确定不满足签名条件时可引起处理器错误,其可例如引起发生异常,或者可仅将索取到的数据作为通用数据输出,而不是将其标记为有界指针。在替代实施例中,在不满足签名条件的情况下,处理电路可被布置为将有界指针生成为无签名的指针。这在以下情况下可能是适当的:例如,预期通过将有界指针生成为无签名的有界指针,这会在处理电路试图使用有界指针时引起以后的错误,因为此时处理电路期望有签名的有界指针,而相反有界指针为无签名的。然而,在安全敏感的应用中,若不满足签名条件,则可认为更适当的是防止生成任何有界指针。可以多种方式确定是否满足签名条件。例如,在一个实施例中,当处理电路在至少一个预定特权状态下操作时,可认为满足签名条件。因此,使用插入签名操作可限于在处理电路上执行的某些特权代码。在替代实施例中,当在至少一个预定特权状态下操作时,可提供处理电路可写入的配置存储元件,并且可认为当该配置存储元件标识允许执行插入签名操作时满足签名条件。因此,使用插入签名操作仍然由预定特权状态有效地控制,但当处理电路在配置存储元件允许的其他状态下时可以使用。在另一替代实施例中,可提供用于存储签名能力的能力存储元件。例如,插入签名操作可通过插入签名指令的形式的插入签名请求来发起,该插入签名指令标识签名能力作为输入操作数中的一者,另一操作数标识待用以形成签名的通用数据。在此实施例中,处理电路被布置为从能力存储元件获得签名能力作为插入签名操作的操作数,并且当该签名能力标识允许执行插入签名操作时,确定满足签名条件。尽管在三个不同实施例中可使用上文三种标识选项,但在一个实施例中可组合使用这些选项中的多个,使得若满足这些选项的任一个或多个,则确定满足签名条件。所述至少一个生成条件可以多种方式指定。在一个实施例中,处理电路被布置为在执行生成操作期间能够存取通用能力,该通用能力提供足以从该通用能力导出任何允许的有界指针的信息。处理电路被布置为参照指定数据对通用能力执行细化过程,并且当该细化过程导致生成与该指定数据一致的允许的有界指针时,满足至少一个生成条件。经由使用该细化过程,可以确保,指定数据仅能用以生成在有关由通用能力传达的权限方面所允许的有界指针。具体而言,若不可能经由细化过程生成与指定数据一致的允许的有界指针,则检测到失败条件,随后该过程可防止生成有界指针。细化过程可以采取各种形式,但在一个实施例中,在细化过程期间,处理电路试图缩小在通用能力内标识的范围信息及一个或多个许可,以便匹配指定数据中对应部分的值。此外,在一个实施例中,在细化过程期间,处理电路还试图将指针值设置为由通用能力允许的并与指定数据的对应部分匹配的值。因此,可以看出,细化过程用于试图将通用能力改正为其与指定数据匹配的形式,但在过程期间,其不可能超过由通用能力给出的任意权限,该通用能力实际上提供了可由被视作允许的有界指针的有界指针提供的所有可能权限的超集。当待生成的有界指针为无签名的有界指针时,则细化过程可试图获得在指定数据内的精确匹配与通用能力的细化版本,并且在这种情况下将确定允许有界指针,因此将允许将有界指针输出为有界指针以存储在存储器中。然而,当指定数据指示待生成的有界指针将为有签名的有界指针时,则将不可能从通用能力重建有签名的有界指针的特定于签名的信息。相反,将有必要使用插入签名操作(在一些实施例中由签名条件限制),以使得在建立有界指针时能够将必要签名信息添加至该有界指针。在一个这样的实施例中,当细化过程生成与指定数据的除含有特定于签名信息的任何部分之外的那些部分匹配的允许有界指针时,可认为满足至少一个生成条件。随后只要允许关于任何指定签名条件的操作,可以使用插入签名操作添加特定于签名的信息。特定于签名的信息可采取各种形式,但在一个实施例中,指定数据的含有特定于签名的信息的部分为确定签名的那部分。在签名信息还包括在所生成的有界指针的关联属性内的实施例中,则指定数据的含有特定于签名的信息的那部分还包括数据字段,该数据字段提供将插入在所生成的有界指针的属性内以标识该有界指针已签名的签名信息。因此,通过上述过程,若确定在重建期间允许签名,则标识签名以对应于指定数据(例如,从备用存储库索取到的数据)内的位的序列并且插入在用以形成所生成的能力的数据的标识部分中。能力可以以各种方式生成,并且在插入签名操作期间如何将签名并入在所生成的能力中将相应地变化。在一个实施例中,能力从通用能力的细化版本生成,并且因此将签名并入在通用能力的细化版本内。可选地,可以从指定数据(例如,从备用存储库索取到的数据的副本)生成能力,并且在这种情况下,签名的并入有效地包括允许指定数据的那部分偏离通用能力的细化副本。用以容纳签名的有界指针的部分可根据实施例而变化。在一个实施例中,处理电路被布置为将所生成的有界指针内的签名并入至复数个指定位内,在有界指针的无签名版本内的该指定位的内容可从有界指针的其他位再现。因此,将签名并入在有效地含有冗余信息的有界指针的部分内,因此不存在由于签名并入而引起的信息丢失。具体而言,当随后为了建立无签名版本移除签名时,则通过签名改写的无签名有界指针的位可从有界指针的剩余位重建。在一个实施例中,复数个指定位用以含有在有界指针的无签名版本内的指针值的一部分,并且该指针值的彼部分可从指针值的剩余部分导出。然而,在替代实施例中,复数个指定位用以含有在有界指针的无签名版本内的范围信息的一部分,并且由范围信息指定的范围可在范围信息的剩余部分内表示。现在将参考附图描述特定实施例。图1示意性地示出了包含用于处理指令的处理流水线4的数据处理设备2的示例。在此示例中,处理流水线4包括多个流水线级,该等流水线级包括提取级6、解码级8、发出级10、执行级12及回写级14,但应理解,可提供其他类型或组合的级。例如,在一些实施例中可以包括用于执行寄存器重命名的重命名级。待处理的指令逐级移动,并且当指令在一个级搁置时另一指令可在流水线4的不同级搁置。提取级6可从1阶(L1)指令高速缓存20提取指令。提取级6通常可从连续指令地址顺序地提取指令。然而,该提取级还可具有用于预测分支指令的结果的分支预测器22,并且若预测进行分支,则提取级6可从(非顺序)分支目标地址提取指令,或若预测不分支,则从下一个顺序地址提取指令。分支预测器22可包括一个或多个分支历史表,其用于存储供预测是否采取还是不采取某些分支的信息。例如,分支历史表可包括用于跟踪先前执行分支的实际结果或表示对分支做出的预测的置信度的计数器。分支预测器22还可包括用于缓存分支指令的先前目标地址的分支目标地址高速缓存(BTAC)24,以便可以在以后遇到相同分支指令时预测这些地址。将所提取的指令传递至解码级8,解码级8解码指令以生成经解码的指令。经解码的指令可包含用于控制执行级12执行适宜处理操作的控制信息。对于从高速缓存20中提取的一些更复杂的指令,解码级8可将这些指令映射至多个解码指令,这可称作微操作(μops或uops)。因此,在从L1指令高速缓存20提取的指令与由流水线的后续级所见的指令之间可能不存在一对一关系。一般而言,本申请案中的“指令”的引用应解释为包括微操作。将经解码的指令传递至发出级10,其确定用于执行指令所需的操作数是否可用并且当操作数可用时发出指令以供执行。一些实施例可支持按序处理,使得发出指令以用对应于从L1指令高速缓存20提取的指令的程序顺序的顺序来执行。其他实施例可支持无序执行,使得可以与程序顺序不同的顺序向执行级12发出指令。无序处理可用以提高性能,因为尽管较早指令在等待操作数时停滞(stall),但可首先执行其操作数可用的程序顺序中的后续指令。发出级10向执行级12发出指令,执行级12处执行指令以实施各种数据处理操作。例如,执行级可包括多个执行单元30、执行单元32、执行单元34,其包括:用于对整数值执行算术或逻辑操作的算术/逻辑单元(ALU)30;用于对以浮点形式表示的值执行操作的浮点点(FP)单元32;以及加载/存储单元34,其用于执行用于将来自1阶(L1)数据高速缓存36的数据值加载至寄存器40的加载操作,或者用于执行用以将来自寄存器40的数据存储至L1数据高速缓存36的存储操作。应理解,这些仅为可提供执行单元的类型的一些示例,并且还可提供许多其他类型。为执行处理操作,执行级12可从一组寄存器40读出数据值。随后,执行指令的结果可通过回写级14回写至寄存器40。L1指令高速缓存20及L1数据高速缓存36可为包括多阶高速缓存的高速缓存层级的一部分。例如,还可提供2阶(L2)高速缓存44并且视情况提供其他阶的高速缓存。在该示例中,L2高速缓存44在L1指令高速缓存20与L1数据高速缓存36之间共享,但是其他示例可具有单独L2指令及数据高速缓存。当待提取的指令不在L1指令高速缓存20中时,则可从L2高速缓存44中提取指令,并且类似地,若指令不在L2高速缓存44中,则可以从主存储器50中提取。类似地,响应于加载指令,若数据不在L1数据高速缓存36中则数据可从L2高速缓存44中提取,并且若需要可从存储器50中提取。任何已知方案可用于管理高速缓存层级。由流水线4用以引用程序指令及数据值的地址可为虚拟地址,但至少主存储器50,以及视情况还有高速缓存层级的至少一些位阶应实体寻址。因此,可提供转换旁看缓冲器52(TLB),用于将由流水线4使用的虚拟地址转换为用以存取高速缓存或存储器的实体地址。例如,TLB52可包括各自指定虚拟地址空间的对应页面的虚拟页面地址及虚拟页面地址将映射至的对应实体页面地址的多个条目,以便将对应页面内的虚拟地址转换成实体地址。例如,虚拟及实体页面地址可对应于对应虚拟及实体地址的最高有效部分,其中当将虚拟地址映像至实体地址时,剩余最低有效部分保持不变。除了地址转换信息,每个TLB条目还可包括指定存取许可的一些信息,该存取许可诸如指示地址的某些页面是否可在流水线4的某些模式中存取。在一些实施例中,TLB条目还可定义地址的对应页面的其他性质,诸如缓存策略信息,其定义响应于读取或写入操作而更新高速缓存层级的哪些位阶(例如,高速缓存是否应在回写还是直写模式中操作);或者信息,其定义存取对应页面中地址的数据是否可与由流水线4发出数据存取的顺序相比通过存储器系统重新排序。尽管图1示出了单阶TLB52,但是应理解,可提供TLB的阶层使得1阶(L1)TLB52可包括用于转换在多个最近存取页面中的地址的TLB条目,且可提供2阶(L2)TLB以存储用于更大量页面的条目。当所需条目不存在L1TLB中时,则其可从L2TLB中提取,或从层级中的其他TLB中提取。若用于待存取的页面的所需条目不在TLB的任一者中,则可执行页表走查(pagetablewalk)以在存储器50中存取页表。任何已知TLB管理方案可用于本方法中。此外,应理解,一些系统可能支持多阶地址转换,使得例如第一TLB(或TLB的层级)可用以将虚拟地址转换至中间地址中,以及使用一个或多个其他TLB的第二阶地址转换随后可将中间地址转换至实体地址中,该实体地址用以存取高速缓存或存储器。这可用于支持虚拟化,其中该第一阶地址转换可由操作系统管理,且该第二阶地址转换可由(例如)超管理器管理。如图1所示,装置2可具有一组有界指针寄存器60。尽管有界指针寄存器组在图1中被示出为实体上与通用数据寄存器组40分隔,但在一个实施例中,相同实体存储库可用以提供该通用数据寄存器及该有界指针寄存器两者。每个有界指针寄存器60包括:指针值62,其可用以确定待存取数据值的地址;及范围信息64,其指定当使用对应指针62时地址的可允许范围。有界指针寄存器60还可包括可定义关于指针的使用的一个或多个限制/许可的限制信息66(本文中还被称为许可信息)。例如,限制66可用以限制可使用指针62的指令类型,或可使用指针的流水线4模式。因此,可认为范围信息64及限制信息66为定义在其内允许使用指针62的能力。当尝试使用在所定义能力之外的指针62时,可触发错误。范围信息64可用于例如确保指针保持在某些已知界限内并且不偏离可能含有敏感性或安全性信息的存储器地址空间的其他区域。在相同实体存储库用于通用数据寄存器及有界指针寄存器两者的实施例中,则在一个实施例中,指针值62可例如存储在与用于对应通用寄存器的相同的存储位置内。图2示出了可允许范围用以防止对数据或指令的未授权存取的指令类型的示例。如图2的顶部所示,特定有界指针寄存器PR1包括给定指针值62及范围信息64,其在该示例中使用定义可允许范围的下限的下限地址68及定义可允许范围的上限的上限地址69指定。例如,设置界限68、界限69以定义地址范围80000至81000。当某些指令引用有界指针寄存器PR1并且由指针62确定的地址在该范围之外时,可触发错误。例如,如图2的A部分所示,在一些系统中,若试图将指针寄存器60内的指针62的值设置为位于由范围信息64指定的范围之外的值(这里可假定该指针直接指定地址)则可触发错误。这避免指针62采用指定范围外的任何值,使得确保使用该指针的任何存取可安全地位于所允许范围内。或者,如图2的B部分所示,当指令试图存取由指针62的地址标识的位置时,在该地址位于指定范围外时,可触发错误。因此,仍然可允许将指针62设置为在指定范围之外的值,但是一旦尝试将数据存取在指针地址(或从指针导出地址),则若该地址位于该允许范围之外,可触发错误。其他系统可响应于在图2的A部分及B部分所示的两个指令类型来触发错误。范围信息64可以不同的方式设置。例如,安全代码或操作系统或超管理器可指定允许给定指针的范围。例如,指令集架构可包括用于设置或修改给定指针62的范围信息64的多个指令,并且该等指令的执行可限制于处理器4的某些软件或某些模式或异常状态。可以使用用于设置或修改范围信息64的任何已知技术。除了当执行引用指针的某些指令时可在执行状态12使用的有界指针存储元件组60外,程序计数器能力(PCC)寄存器80还可用以当正从一阶指令高速缓存20中提取指令时在提取级6提供类似功能性。具体而言,程序计数器指针可存储在字段82中,其中PCC80还提供范围信息84及任何适宜限制信息86,类似于与有界指针存储元件组60中的每个指针一起提供的范围及限制信息。图3示意性地示出了如何结合个别数据块使用标记位以标识这些数据块表示能力(即,有界指针及关联限制信息)还是表示正常数据。具体而言,存储器地址空间110将存储一系列数据块115,这些数据块115通常将具有指定大小。仅为了说明的目的,可假设在该示例中每个数据块包含128个位。与每个数据块115相关联,提供了标记字段120,在一个示例中,标记字段120为称作标记位的单位字段,将其设置以标识关联数据块表示能力,并且将其清除以指示该关联数据块表示正常数据,因此不能将其视为能力。应理解,与设置状态或清除状态相关联的实际值可根据实施例而变化,但仅以说明的方式,在一个实施例中,若该标记位具有值1,其指示该关联数据块为能力,并且若其具有值0,其指示该关联数据块含有正常数据。当将能力加载至有界指针寄存器60(本文中还被称为能力寄存器)的一个(诸如图3中所示的能力寄存器100)中时,则标记位随能力信息移动。因此,当将能力加载至能力寄存器100中时,将指针102、范围信息104及限制信息106(以下称为许可信息)加载至该能力寄存器中。另外,与该能力寄存器相关联,或作为其内的指定位字段,将设置标记位108以标识内容表示能力。类似地,当将能力存储回存储器时,将关联其中存储能力的数据区块设置相关标记位120。通过该方法,可以区分能力与正常数据,因此确保正常数据不能用作能力。图4为示意性地示出可用以将无签名能力转换至有签名能力的签名操作,以及随后可用以将有签名能力转回无签名能力的对应授权操作的示图。提供无签名能力150(还称为无签名有界指针)作为用于签名操作的输入操作数,能力150包含指针部分155及属性部分160。在指针部分155内指定指针值,并在属性部分160内指定范围信息,以及指示允许使用在该无签名能力内提供的指针值的各种许可信息。例如,该许可信息可标识对哪种类型的操作允许引用指针,并且因此例如该指针是否可用以标识待加载或存储的数据,以标识待提取的指令等。另外,如前所述,提供标记位165,将其设置为标识信息的关联块表示能力。能力的大小可根据实施方式变化,但与先前所述示例(其中能力包含128个位)一致,则在一个实施例中,指针部分155可包含64个位,并且属性部分160也可包含64个位。用以将无签名的能力转换至有签名的能力的加密签名功能170接收多个输入,这些输入用以导出待添加以形成有签名的能力的签名。具体而言,功能170可存取加密签名密钥,并另外存取盐值(saltvalue)。该盐值可以采取各种形式,但在一个实施例中,其表示将仅对取消签名该有签名能力将合理地需要的一个或多个任务可用的上下文信息,因此其应能成功地执行关于有签名能力的授权操作。该上下文信息可采取各种形式,但在一个实施例中例如可为将仅对合理地想授权有签名的能力的一个或多个任务已知的堆栈指针位置。另外,功能170接收在指针部分155内存储的指针值的至少一部份。在一个实施方式中,预期该指针值将包含一定数目的唯一指针位,其中剩余最高有效位为该唯一指针位的签名扩展版本(因此为全一或全零,取决于该唯一指针位的最高有效位),或该唯一指针位的零扩展版本(即全零)。在一个实施例中,将该指针值的一定数目的最高有效位中的基本冗余信息用作在其中一旦生成即插入的签名的位置,从而使该签名能并入在有签名的能力内而无任何损失信息。在替代实施例中,处理可被布置为将签名插入至能力的另一部分中,例如在属性部分160的多个位内,例如稍后将参考图15对此进行讨论。在另一示例性实施例中,情况可能为,在无签名的能力编码中存在足够未使用位,这些未使用的位可在有签名的能力内使用以保持该签名值。在图4示出的实施例中,假设将签名插入在指针部分155的上位中,并且尤其在将含有全一或全零的区域中。在图4示出的实施例中,情况为,指针值的整体仍然用作签名功能170的输入,并且使用指针值、加密签名密钥及盐值执行加密签名功能,以便生成本文还称为散列的签名。任何适宜的加密签名功能可用于此目的。在替代实施例中,过程可被布置使得仅将唯一指针位用作对加密签名功能170而非整个指针值的输入。无论采取哪种方法,若将签名添加在有签名能力内的指针值的上部中,则所述实施例的过程将执行检查以确保指针“规范”,使得签名字段(即,被签名改写的指针值的部分)含有唯一指针位的签名扩展或零扩展版本。则这将确保在用以建立有签名能力的有效签名过程接着用以建立有签名能力的无签名版本的有效授权过程将提供对应原始无签名能力150的所得无签名版本。可以多种方式执行此检查。例如,在一个实施例中,执行检查以确保在签名之前此条件为真,稍后将参考图6的示例对此进行讨论。或者,在签名过程之后,测试认证可并入在功能170内,以便将原始能力与授权能力(即,在授权有签名能力之后建立的能力)进行比较。如图4示出,一旦已经建立签名,则其将插入在有签名能力175的一部分176的区段179中。随后,将唯一指针位保留在部分176的区段177内。在许可部分180内,提供了签名字段182,将签名字段182设置为标识能力175为有签名能力,并且此外,将标记位185保留在设置状态以指示数据的关联128个位表示能力。通过提供独立签名字段182,使得某些所请求的操作能够取决于输入能力具有无签名能力还是具有有签名能力而不同地表现。例如,这使得设备能够防止执行某些关于有签名能力的动作,从而提供进一步增强的安全性。如图4的下部示出,可以调用授权功能190以便试图取消签名有签名的能力175。首先,标识唯一指针位177,随后对其进行签名扩展操作192,以便生成在执行签名功能170时使用的原始指针值。若该原始指针值以零扩展格式表示,则在步骤192,将改为执行零扩展操作。此外,若只有唯一指针位用作对签名时功能170的输入,则在步骤192不需要签名扩展或零扩展操作,并且相反唯一指针位可直接提供至授权签名生成功能195。如图4所示,授权签名生成功能195还可存取加密签名密钥及盐值。应理解,除非授权签名生成功能195能存取由加密签名功能170曾使用的相同盐值(即,上下文信息的相同项),否则其不可能将生成与插入在有签名能力的区段179内的签名匹配的授权签名。随后,由授权签名生成功能195使用相关指针位、加密签名密钥及盐值生成的授权签名将被输入至比较块198,此处与保持在有签名能力的区段179内的签名进行比较。在匹配的情况下,则认为已经通过授权,并且生成有签名能力175的无签名版本。否则,标识失败条件,导致采取预定动作,稍后将参考图7以示例的方式对此进行讨论。假设通过授权检查,则通过从区段179移除签名,并且使用区段177中的唯一指针位的签名扩展(或取决于实施方式的零扩展)版本替代其来建立无签名能力,从而重建初始指针值。另外,清除签名信息182以标识能力现在为有签名的。签名字段182可以采取各种形式。图5示出了两种示例性方法。根据一个方法,提供了专用单位签名字段,其中第一值指示能力无签名并且第二值指示能力有签名。在图5所示的示例中,假设当将值设置为逻辑一值时,此指示能力有签名,而若将其清除为逻辑零值,此指示能力无签名。然而,应理解,在不同实施例中,签名字段182内的逻辑零值及逻辑一值的含义可颠倒。在替代实施例中,可提供多位类型字段,而非提供用于签名信息的专用位,使得可除了标识是否有签名之外,还可标识有界指针的至少一个其他性质。一些可能编码如图5所示。可期望表示的其他类型的能力将根据实施例明显地变化。仅以说明的方式,多位类型字段可用以标识何时能力为密封能力。如例如在No.850技术报告(由剑桥大学计算器实验室RWatson等人所写的标题为“CapabilityHardwareEnhancedRISCInstructions:CHERIInstruction-SetArchitecture”(能力硬件增强RISC指令:CHERI指令集架构),UCAM-CL-TR-850,ISSN1476-2986)中所讨论的,可将密封件用作能力锁以便防止其被使用。只有具有权限密钥的实体(锁定其的实体,并且大体实施为能力本身)才能解锁它。通过使用多位类型字段,在存在可以表示的多于两个不同类型的能力的情况下,此可导致在能力的可用属性空间内的更有效的编码。图6为示出根据一个实施例的签名操作的流程图。在步骤200,例如通过执行签名指令的处理器来请求能力的签名。此后,在步骤205,标识由签名改写的指针的位。根据图4的示例,该标识的位将为作为唯一指针位的签名扩展版本的指针值的上位。在步骤210,随后确定所有标识的位是否具有与指针的剩余部分的最高有效位相同的值,即,它们是否真的为唯一指针位的签名扩展版本。如前所述,在替代实施例中,可使用零扩展格式,并且在这种情况下,在步骤210将确定是否所有标识位为零。若在步骤210确定所有标识位不满足所需条件,即在图6的示例中位不具有与指针的剩余部分的最高有效位相同的值,则处理进行至步骤235,此处采取预定动作。预定动作可采取各种形式,但在一个实施例中其可涉及生成处理器错误,以便导致发生异常以处理进一步处理。或者,可使得所标识的输入能力为无效,例如通过清除标记位,使得将能力有效地转换为通用数据,并且不能再用作能力。通过执行步骤210并当不满足条件时进行至步骤235,这防止签名无签名能力的动作,及随后授权有签名能力的可能性,可引起与原始无签名能力不匹配的所得无签名能力,即在图4的示例中,因为签名及取消签名的过程可能建立了不同指针值。尽管签名及后续授权的动作不改变指针值很重要,但签名及授权的动作不能改变与能力相关联的权限同样重要,例如改变由范围信息指定的范围,或改变为能力指定的许可。在一个特定实施例中,由于能力内的编码空间限制,可以布置成相对于指针值指定范围信息,因此,当合理地改变指针值时,需要执行一过程以适当地重新编码范围信息。在此种环境内,显然更重要的是确保签名及授权的动作不能引起指针值变化,因为若引起变化,则可引起范围信息同时变化,并且由此改变与能力相关联的权限。假设在步骤210通过检查,并且因此确定所有标识位具有与指针值的剩余部分的最高有效位相同的值,则过程进行至步骤215,此处从指针值、签名密钥及盐值建立签名。此后,在步骤220,如先前参考图4所讨论的,使用签名替代指针的所标识位,并且在步骤225,签名属性字段182可被设置为指示能力已签名。此后,在步骤230,可以输出有签名能力,例如用于存储在能力寄存器60的一者中。图7为示出根据一个实施例执行的授权过程的流程图。在步骤250,例如由执行授权指令的处理器来请求有签名能力的授权。在步骤255,则标识唯一指针位大小。这对确保使用正确位执行授权过程很重要。在一个实施例中,可固定唯一指针位部分的大小,因此其不会变化。在一个替代实施例中,在指针值内的唯一指针位部分的大小可在软件控制下例如通过在预定特权级别下执行的软件全局配置。在另一示例中,唯一指针位部分的大小可为上下文敏感的,并且可再次在软件控制下被设置,其中值取决于当前上下文。通常将在与用于关联签名操作的相同的上下文中执行授权。若必要,可执行检查以确认满足该条件,以便允许进行授权。在步骤255之后,在步骤260提取唯一指针位,随后在步骤265对其进行签名扩展以形成全指针值。如前所述,若在无签名指针中使用了零扩展格式,则在步骤265所提取的位将为零扩展。在步骤270,执行授权签名生成功能195以便从指针值、签名密钥及盐值建立授权签名。此后,在步骤275确定授权签名是否匹配在有签名能力内提供的签名,并且若不匹配,则过程进行至采取预定动作的步骤295。该预定动作可采取各种形式。例如,可生成处理器错误以便发生异常,或例如通过清除标记位可使得有签名能力无效。在另一示例性布置中,可决定将能力留为有签名的,并且因此不完成授权过程。随后可预期能力的任何后续使用将失败,因为后续使用将期望使用无签名能力,并且该能力将在那时仍然为有签名的。若在步骤275确定授权签名匹配有签名能力中的签名,则认为已经通过了授权过程,并且过程进行至步骤280,此处能力中的签名由在步骤265从缩小大小指针导出的签名扩展位替换。另外,在步骤285,清除签名属性信息以指示能力无签名,并且此后在步骤290输出无签名能力,例如用于存储在能力寄存器60的一者内。如前所述,尽管在一个实施例中范围信息可以以绝对项指定,因此对指针值的任何变化本身不改变范围,在例如其中将编码空间限制在能力内的替代实施例中,可相对于指针指定范围信息以便减少待存储在指定范围的能力内的信息量。这样的布置例如示出在图8中。具体而言,可指定两个偏移305、偏移310以形成范围信息,它们标识从指针至基准的偏移及从指针至极限的偏移,因此实现范围315的两端的标识。随后可使用指针值300及相关偏移信息执行限制确定过程307、312以标识范围315的极限。尽管此可提供指定范围信息的所需位的数目的减少,但当改变指针值时其需要调整范围信息,以便确保由于对指针的调整而不改变范围。通过在有签名能力的字段182内提供签名信息,有可能轻易地标识输入能力是有签名还是无签名,并且取决于能力是有签名还是无签名,导致处理器操作不同。这使得例如对使用有签名能力的方式施加某些限制,其中这样的限制可不存在于能力为无签名的情况下。图9示出了执行有签名能力的不变性的一个示例性选项。因此,在步骤350,假设请求对请求所指定的输入能力的一些方面进行修改。此可例如采取指定输入能力的指令的形式,例如参考能力寄存器60的一者,并且为致使修改能力的一部分的指令类型。在步骤355,索取所标识的输入能力,并且检查签名属性信息以查看其指示能力为有签名还是无签名。若该能力为无签名,则过程进行至步骤360,在步骤360,根据在步骤350接收的请求,执行正常能力修改处理。然而,若确定指定输入能力为有签名,则相反过程进行至采取预定动作的步骤365。这可例如引起生成处理器错误,或使输入能力无效。作为另一选项,可确定保留已签名但未修改的能力。然而,在一些情况下,可不将此视为适当的选项,因为可期望具有修改行为为错误的一些直接指示。通过使有签名能力不可变,这会产生两个强性质。首先,欺诈实体无法将有签名能力改变为将更易授权的不同形式,因为在能力有签名时无法改变能力。另外,在可相对于指针值指定界限信息的情况下,不需要考虑对有签名能力进行改变的潜在的影响,因为对修改有签名能力的任何尝试将引发错误,或导致能力无效。作为使整个有签名能力不变的替代,相反可布置成有签名能力内的某些字段为不变的,因此可取决于在步骤350请求的修改类型来执行检查355,尤其对待修改的有签名能力的字段。图10示出了图9的替代选项,其中允许对有签名能力,尤其是对指针值的改变。因此,在步骤370,请求对指针值的改变。在步骤372,从所指定的输入能力的签名属性确定能力是否有签名。若没有,则过程进行至步骤374,此处将指针值解释为具有完整大小,即根据图4的示例的全64位,并且在步骤376,根据在步骤370接收的请求调整全大小指针值。在该示例中,假设根据先前参考图8所讨论的布置,相对于指针值指定界限信息,并且因此除了调整指针值本身外,在步骤378执行界限调整操作以调整界限信息(即范围属性)来考虑全大小指针中的变化。然而,若在步骤372,从签名属性确定输入能力为有签名,则采取指针值的不同解释。具体而言,在步骤380,将指针值解释为具有减小的大小,即全大小减去已插入的签名的大小。通过在有签名能力中对指针值解释不同于其在无签名能力中的解释,此可避免当签名能力及当后续取消签名能力时需要改变界限信息。相反,若仍然认为指针值具有全大小,则在指针字段的最高有效位中插入的签名的位将有效地改变指针值,并且当插入签名时(因此引起对指针值的第一次改变)及在授权过程期间当后续移除签名时(因此引起对指针值的另一改变)将需要相应地试图两次调整界限信息。通过当能力有签名时使用指针值的不同解释来避免这些并发情况,并且由于在能力内使用签名属性信息182,可轻易地实施该两个不同解释的使用,以标识它们为有签名还是无签名,因此使处理器能够轻易地区分有签名能力与无签名能力。返回至图10,随后在步骤382,确定对减小大小指针值的所请求改变是否将指针保留在可用减小大小内,即不存在溢出条件。若不为这种情况,则过程进行至步骤388,此处采取预定动作,诸如先前所述的生成处理器错误或使能力无效。然而,假设可将所请求的改变容纳在减小的大小指针内,则在步骤384,调整减小的大小指针,随后在步骤386,调整界限信息以考虑在减小大小指针中的变化。通过轻易地使处理器能够经由使用关联属性中的有签名信息来区分有签名能力与无签名能力,此使得处理器能够取决于指定输入能力为有签名还是无签名的来调整其他类型的操作。例如,在如图11示出的一个实施例中,禁止有签名能力的解参考,从而确保有签名能力无法用以标识待存取的存储器地址。具体而言,在步骤400,接收对解参考能力的请求。例如,此可由执行加载指令或存储指令来生成,该加载指令或存储指令标识用于导出待存取的存储器地址的指定输入能力。在步骤405,根据签名属性信息确定指定能力为有签名还是无签名。若为无签名的,则过程仅进行至步骤410,此处以标准方式使用能力内的指针值来存取存储器,假设从指针导出的存储器地址在由能力指定的界限内,并且请求存取的类型由能力的许可属性所允许。然而,若在步骤405确定输入能力为有签名的,则在步骤415采取预定动作,例如生成处理器错误或使能力无效。作为对步骤415的替代选项,可认为允许从完整指针值字段导出存储器地址为适当的,因为在最高有效位内的签名的并入可被布置为确保指针将标识存储器中的错误地址,因此引起存储器存取失败。然而,在其他实施方式中,可确定这样的方法不能给出期望的安全级别,因为其依赖于指针值的使用,该指针值中指定指针值的最高有效位的签名将标识错误地址。图12为示出了另一类型操作的流程图,其中所执行的处理可取决于指定输入能力为有签名还是无签名的。具体而言,根据图12的实施例,例如通过执行标识输入能力的签名指令来调用能力签名过程。在步骤425,通过参考签名属性信息确定输入能力是否已签名。若没有,则可在步骤430执行正常能力签名过程,例如使用图6的先前描述的方法。然而,若在步骤425确定能力已签名,则可在步骤435例如通过触发错误条件或使能力无效来采取预定动作。另一替代选项可为将能力保留为具有原始签名信息的有签名能力。因此,通过在能力的关联属性内使用签名信息,可当执行签名操作时区分有签名能力与无签名能力,因此,若需要,可防止再签名有签名能力。在替代实施例中,可确定允许有签名能力再签名,因此将使用图12的过程。尽管在一个实施例中取消签名有签名能力的唯一方式可为使用诸如先前参考图7所讨论的授权过程,其中在允许取消签名能力之前需要签名匹配检查过程,在另一实施例中可提供额外功能以允许在某些情况下取消签名有签名能力。具体而言,可提供剥离功能,在某些条件下其允许将有签名能力转换为无签名能力而无需执行签名匹配检查。在图13中仅以示例的方式说明这样的过程。具体而言,在步骤450,例如通过执行指定输入能力的剥离指令,请求对有签名能力的剥离。在步骤455,确定是否允许剥离,稍后将参考图14A至图14C的示例更详细地讨论该步骤。若不允许剥离,则在步骤490采取预定动作,例如通过生成处理器错误、使能力无效或将能力留为有签名的。若允许剥离,则在步骤460标识唯一指针位大小,之后在步骤465提取唯一指针位,随后在步骤470经签名扩展以形成全指针值。当描述授权过程时,步骤460、步骤465、步骤470基本上与之前参考图7讨论的步骤255、260、265相同。随后对应图7的步骤280、285及290的步骤475、480及485导致能力中的签名由签名扩展位替换、清除签名属性信息、并且输出所得无签名能力。从图13与图7的比较可看出,随后允许提供剥离,不需要建立任何授权签名或检查授权是否与有签名能力中的签名匹配。因此,应理解,剥离功能为一种潜在强大工具,因此在一个实施例中,可认为对某些预定情况限制使用剥离功能为适当的。图14A至图14C中阐明可对使用剥离功能设置一些示例性限制。首先考虑图14A,随后在步骤500假设请求对有签名能力的剥离。在此情况下,在步骤505确定处理器是否在预定提高的权限状态下操作。根据实施例预定提高的特权状态可采取各种形式,但例如考虑虚拟机类型环境,该预定提高的特权状态可为超管理器位准。若确定处理器不在预定提高的特权状态下操作,则过程进行至步骤515,此处发生错误,即执行在图13的步骤490中标识的预定动作的一者。然而,若处理器处于预定提高的特权状态下,则在步骤510通过遵循来自图13的步骤455的“是”路径执行剥离功能。图14B示出了一种替代方法,其中步骤520、530及535对应于图14A的步骤500、510及515,但其中测试505由测试525替代,并且尤其确定特权配置寄存器是否已被设置为允许剥离。特权配置寄存器可例如为当在预定特权状态下操作时由处理器设置的寄存器,因此相应地其值只能由在预定特权状态下操作的处理器修改。假设配置寄存器的内容指示允许剥离,则在步骤530执行剥离功能,否则在步骤535生成错误。图14C示出了定义剥离能力的另一替代方法。如前所述,能力有效地标识处理器可用的一组权限,并且尽管大多数能力可采取较早所述的有界指针的形式,但并非所有能力需要为有界指针。相反,可定义能力为仅标识与特定功能相关的某些权限。因此,可定义剥离能力,其例如可保持在能力寄存器60的一者内,并且被指定为剥离操作的输入。因此,剥离指令例如可以将其操作数的一者标识为剥离能力,并且将请求剥离的能力标识为另一操作数。在这样的布置中,在步骤540确定已经请求对有签名能力的剥离之后,在步骤545可从相关能力寄存器索取到由剥离指令标识的剥离能力,随后分析该剥离能力以确定其内容。随后,在步骤550确定剥离能力是否允许剥离所标识的有签名指针。若是,则在步骤555执行剥离功能,否则在步骤560生成错误。尽管在一个实施例中,该剥离能力可为专用以标识是否允许剥离的能力,在替代实施例中,可在能力寄存器60内保持的单个能力可标识多个许可,其中的一个为剥离许可。在诸如先前讨论的装置内,可由处理器执行的指令集可包括多个能力指令,即,具体地标识为一个或多个操作数能力的指令。例如,为支持先前描述的签名、授权及剥离功能,可提供以下三个指令:CSIGN-将能力转换至有签名能力(作为源及目的地的(一个或多个)能力寄存器,以及可选的上下文信息,例如盐值)CAUTH-将有签名能力转换至经受成功授权的无签名能力(作为源及目的地的(一个或多个)能力寄存器,以及可选的上下文信息,例如盐值)CSTRIP-将有签名能力转换为无签名能力而无需授权过程(作为源及目的地的(一个或多个)能力寄存器)在这些示例的每一者中,源及目的地能力寄存器可为两个不同能力寄存器,或者可将相同的寄存器指定为源及目的地,因此导致无签名能力由有签名能力重写,或反之亦然。除了提供用于签名、授权及剥离功能的专用指令外,另外,若需要,此功能性可与其他功能组合。例如,在一个实施例中,可提供以下两个指令以将授权过程分别与加载操作及与分支操作组合:CLDRA-将有签名能力(从能力寄存器)转换为经受成功授权的无签名能力(可使得在能力寄存器中的有签名能力不改变),并且使用指针以标识从其将项目(能力或数据)加载至寄存器的存储器地址。CBRA-将有签名能力(从能力寄存器)转换至经受成功授权的无签名能力(可使得在能力寄存器中的有签名能力不改变),并且使用指针以确定对程序计数值的更新。因此,通过这样的功能,作为另一操作的一部分,可将能力保留为有签名的但将来取消签名,因此当执行操作的剩余部分时允许使用无签名的变体,同时将原始有签名能力保留在能力寄存器内。这可以在使用有签名能力操作的代码内提供某些性能改进。在先前示例中,假设将签名添加至指针值的一定数目的最高有效位。然而,在替代实施例中,可改为将签名添加至属性字段的一部分中,例如在界限信息内。这在图15中以示例的方式说明。在图15的示例中,无签名能力包括指针部分600、及包括界限区段605及许可区段610的属性部分。还可提供标记位615,将其设置为标识关联内容表示能力而非通用数据。当签名能力时,则在该示例中指针值保持不变,而是将签名插入在界限信息的可用空间的一部分内,如散列字段625示出。这导致了减小大小界限字段620,稍后将参考图16A更详细地讨论。根据较早的示例,还提供了签名属性字段632,并且将其设置为指示能力已签名,从而导致修改许可区段630。标记位625保持设置为标识关联信息仍然为能力。该方法的一个潜在好处为指针不由签名过程改变,因此在其中相对于指针指定界限信息的情况下对界限信息没有潜在影响。另外,即使不存在指针值的充足数目的最高有效位,该指针值含有签名扩展或零扩展位,即有效地冗余信息,还可使用该方法。然而,根据该方法,在界限信息中需要充足的冗余信息以容纳签名的插入。图16A为示出在其中将签名添加至界限信息的情况下签名过程的流程图。在步骤650,例如通过执行签名指令来请求签名能力,随后在步骤655确定在界限信息位中是否存在足够冗余以容纳签名。例如,可能情况为界限信息包含对基值及极限值的指定,并且这些值的两者在其上位中具有一定数目的冗余信息。若这些上位足以并入签名而无任何信息损失,则将确定在界限信息中存在充足冗余以容纳签名。在一些情况下,即使不是这种情况,还可能减小界限信息中的精度以建立充足冗余,因此使用界限信息的降低精度集来替代原始界限信息,并且因此为签名释放充足空间。若在步骤655,确定在界限信息中没有充足冗余以容纳签名,则过程进行至采取预定动作的步骤680,例如生成处理器错误或使输入能力无效。然而,假设存在充足冗余,则在步骤660,从指针值、签名密钥及盐值建立签名,随后在步骤665使用签名替代在界限信息中所标识的冗余位。另外,在步骤670,将签名属性信息设置为指示能力已经签名,随后在步骤675输出有签名能力,例如用于存储在能力寄存器60的一者内。图16B为示出了若将签名添加至界限信息则执行对应授权过程的流程图。在步骤700,接收对授权有签名能力的请求,随后在步骤705从指针、签名密钥及盐值建立授权签名。通过将图16B与第7进行比较,应理解,不需要标识唯一指针位,因为可使用完整的指针,并且不受签名操作的影响。在步骤710,确定授权签名是否匹配有签名能力中的签名,若不匹配,则在步骤730采取预定动作,这些动作对应于在先前参考图7的步骤295讨论的预定动作。假设授权签名匹配有签名能力中的签名,则在步骤715使用冗余界限信息替代签名。例如在一个实施例中这可包括将全零值存储在先前用作签名的那些位中。此外,在步骤720,清除签名属性信息以标识能力现在有签名,随后在步骤725输出无签名能力。如前所述,例如参考图3,当能力在存储器与能力寄存器之间移动时,标记位随能力移动以标识存储在存储器中的关联数据块实际上为能力。然而,在一些实施例中,有必要将能力从存储器存储至诸如盘片之类的备用存储库中,例如由于没有充足空间以将所有能力信息保留在存储器内,或当支持冬眠(hihernation)时。在一个实施例中,此包括将每个能力分解成单独数据及标记部分,并且将标记视作在备用存储库内的数据。这在图17中示意性地示出,其中,根据先前参考图3描述的方法,当能力在能力寄存器800与存储器805之间移动时,则标记位815随每个数据块810移动。因此,在存储器805内的每个数据块可被标识为表示能力或者通用数据。当将数据块移动至备用存储库825时,则使用分解过程820以将能力分解成数据824及标志信息822,将该标志信息视作数据。因此,在备用存储库内,信息仅作为数据持久存在,并且备用存储库为未知能力。当从存储在备用存储库的数据重构能力时,需要限制重建过程,因为若可能仅从备用存储库的通用数据建立能力,则可损害经由使用能力而可用的安全性。具体而言,当操作请求建立能力,并且标识在备用存储库内的数据以形成能力时,期望过程就位以检查所标识的数据(若转换为能力)将形成处理器有权拥有的能力。在一个实施例中,这通过执行重建操作830以参考主能力(本文中还被称为通用能力)来重建能力来实现。具体而言,在一个实施例中,通用能力提供足以使任何所允许的能力从通用能力导出的信息。因此,考虑有界指针的形式的能力,指定通用能力使得重建操作835将仅能从该通用能力生成可允许的有界指针。用以重建能力的过程可采取各种形式,但在一个实施例中,该处理器被布置为参考从备用存储库825索取的指定数据来对通用能力执行细化过程。因此,可以调用能力重建操作,标识在备用存储库825内的数据块及标志数据的关联项目(在一个实施例中,其可从备用存储库移至一个或多个寄存器中以允许数据随后由处理器操纵),以及使用该信息,操作830可试图细化主能力使得所得能力匹配所标识的数据。若这是可行的,则这指示所标识的数据实际上可表示能力,并且相应地,过程830可将标记位与数据相关联而设置,并且将其输出为用于在存储器805中存储的能力。在此处用以生成能力的数据在一个实施例中可为主能力的细化版本,或者可为从备用存储库索取到的数据。在任一情况下,在此阶段,相关数据将通常保持在寄存器中,因此存储操作可例如用以将能力从寄存器存储至存储器805中。然而,若不能使关于主能力执行的细化过程生成与指定数据匹配的能力,则这指示来自备用存储库的数据不能用以标识能力,并且生成错误。尽管主能力835可用以有效地表示与有效能力相关联的所有可用许可及范围的超集,但当考虑有签名能力的问题时,应理解,不可能从主能力的细化中导出签名。在一个实施例中,通过在某些受控制条件下允许使用来自备用存储库的数据以在所重建的能力内形成签名,从而允许重建过程830亦重建有签名能力来解决该问题。参考图18的流程图更详细地讨论此过程。具体而言,如在步骤850所示出,当调用该重建过程时,从备用存储库索取标识用于该重建过程的数据。在一个实施例中,所索取的数据存储在一个或多个工作寄存器中。例如,可潜在地表示能力的数据块部分(即,在先前讨论的实施例中的128位数据)可存储在一个或多个能力寄存器800中,但其中标记位经清除以指示其(当前)不表示有效能力。另外,从备用存储库索取且指示标记位的数据位可存储在通用寄存器中。此后,在步骤855确定形成标记信息的数据位(即,现存储在通用寄存器中的位)是否指示数据将形成能力。若不是,则过程仅进行至步骤857,此处可将所索取的数据从能力寄存器输出至存储器805,标记位被清除以标识数据块为通用数据。然而,若形成标记信息的数据位指示所索取的数据将形成能力,则在步骤860调用细化过程以试图使用所索取的数据来细化主能力的副本以缩小主能力的许可及界限,并且还用以设置指针值。应理解,可以各种方式实现细化过程,但在一个实施例中该细化过程可为迭代过程(例如,通过执行细化指令的序列)。在步骤865,确定从备用存储库索取的原始数据是否指示将签名能力。例如,可检查表示能力的关联属性内的签名信息的数据中的相关字段,以便查看其是被设置还是被清除,并且因此该数据(若其已转换为能力)表示有签名能力还是无签名能力。作为步骤865的结果,若确定将建立的能力为无签名的,则过程进行至步骤867,其中确定所需能力是否可由主能力835的细化成功地建立。在一个实施例中,若关于主能力执行的细化过程导致位的序列具有与从备用存储库索取的位相同的值,则将此条件视为通过,因此指示从备用存储库索取的数据可表示有效能力。在那种情况下,过程进行至步骤895,此处通过与主能力(在此处,其将通常保留在寄存器内)的细化版本相关联设置标记位来建立能力,随后将能力输出至存储器805(维持标记位被设置以标识数据块实际上为能力),例如通过执行适宜的存储操作。在替代实施例中,可在此处从自备用存储库索取的数据副本生成能力,设置该标记位后输出至存储器805。上述步骤895可以各种方式实现。例如,可以执行“SetTag(设置标记)”指令以标识在其中临时存储正用以形成能力的数据的源(能力)寄存器,以及所生成的能力将存储至其中及为其将标记位设置以将其标识为能力的目的地能力寄存器。在一个实施例中,源及目的地寄存器可为相同寄存器。在“SetTag”指令的一个变体中,可以有效地具有两个源寄存器,即含有从步骤860所得的主能力的细化版本的寄存器,及含有从备用存储库索取的原始数据的寄存器,因为当生成所得能力时可参考这两个寄存器(如例如将在下文参考步骤885、890进行讨论的)。随后可以执行单独的存储指令以将能力从寄存器存储至存储器。若在步骤867确定能力不能由主能力的细化成功地建立,则过程进行至其中发生错误的步骤870。例如,可以生成处理器错误以便导致生成异常。作为另一选项,数据可保留在临时索取了数据的能力寄存器800中,但其中维持在清除状态中的标记位用以将数据标识为通用数据而非能力。另一替代方案将设置可有效测试的处理器条件,例如通过设置条件旗标,或通过将值置于可使用测试及分支指令检查的通用寄存器中。若在步骤865确定原始数据指示待签名能力,则如前所述,将不可能通过主能力的细化生成签名。因此,若待重建有签名能力,则将必须允许至少将表示签名的数据直接复制至能力中。因此,过程进行至步骤869而非步骤867,在步骤869中确定能力的所有部分而不是关于能力的有签名特性的部分,尤其签名及签名属性信息是否可成功地由主能力的细化建立。若不是,则在步骤870生成错误。然而,否则过程进行至步骤875,此处确定是否在重建期间允许签名。如稍后将参考图19A至图19C进行讨论的,在本阶段存在多个可执行的可能检查,但可设想,大体一些约束将置于其中允许使用从备用存储库索取的数据直接签名能力的情况。若在步骤875确定在重建期间不允许签名,则在步骤880生成错误。在步骤880可用的选项可例如对应于在步骤870可用的选项。或者,若到达步骤880则可生成能力为无签名能力,而不是生成错误。若确定在重建期间允许签名,则标识签名以对应于从备用存储库索取的位的序列,并且在步骤885插入在用以形成所生成的能力的所标识部分中,例如若使用先前讨论的图4中的方法则插入在指针值的一定数目的最高有效位中。另外,若将在所生成的能力的属性部分内提供签名属性信息,则(如步骤890指示)将签名属性信息设置在用以形成所生成的能力的数据的另一标识部分内,并且将指示当生成能力时能力为有签名能力。此后,过程进行至步骤895,此处生成能力并将能力输出至存储器,其中将标记位设置为标识关联数据块为能力。若在步骤895从主能力的细化版本生成能力,则在步骤885及步骤890,临时保持细化版本的寄存器将由从备用存储库索取的原始数据的相关部分更新。若相反能力从自备用存储库索取的数据的副本生成,则步骤885及步骤890有效地允许原始数据的相关部分与主能力的细化版本偏离,并且因此实施由步骤885及步骤890定义的插入及设置功能。应注意,尽管在先前描述的实施例中,有签名能力包括签名属性字段以将相关联的能力标识为有签名的或无签名的,但可实现参考图17及图18讨论的通用重建过程而不管该额外签名信息是否在属性字段内提供。因此,即使在不使用该签名属性字段的情况下,当从备用存储库中保持的数据重构能力时,仍然可使用所述过程以通过使用从备用存储库索取的数据插入相关签名来生成有签名能力。图19A至图19C示出了可执行以确定在图18的步骤875的重建期间是否允许签名的各种检查。从图19A至图19C与图14A至图14C的比较可见,在一个实施例中,这些检查类似于可执行以确定是否允许剥离有签名能力的检查。因此,考虑图19A,当在步骤900在重建期间请求签名时,可在步骤905确定处理器当前是否在预定提高的特权状态下操作,并且若允许,则在步骤910允许插入签名,否则在步骤915生成错误(步骤915对应于图18的步骤880)。根据图19B的替代方法,步骤920、930及935对应于图19A的步骤900、910及915,但确定905由确定925替代,此处检查是否已将特权配置寄存器设置为允许插入签名。当处理器在至少一个预定特权状态下操作时,该特权配置寄存器将通常仅可由处理器写入。根据图19C的替代示例,则提供签名能力,其可例如存储在能力寄存器60的一者内。该签名能力提供标识是否在从备用存储库中保持的数据重构能力期间允许签名的信息。因此,当在步骤950请求在重建期间签名时,根据本实施例,将标识相关签名能力,并且将在步骤955索取该签名能力以便允许分析其内容。例如,插入签名指令可用以在从通用数据重构能力期间开始插入签名,并且可将该签名能力标识为插入签名指令的操作数。一旦已经索取相关签名能力,则在步骤960确定签名能力是否允许插入签名,并且若允许,则过程进行至步骤965,此处使用在备用存储库中保持的数据插入签名。否则,在步骤970生成错误。尽管可将图19A至图19C的选项可视为可选的,但在一些实施例中,可以组合使用,使得若满足任何一个测试,则认为允许签名的插入。图18的过程可以各种方式实现。例如,其可在硬件中实现,其中硬件响应于启动重建过程的单指令,以执行在图18中标识的所有步骤。可选地,该处理可通过使用序列指令以实现图18的重建过程而在软件中实施。根据后一种方法,可例如执行一系列指令以逐一检查来自备用存储库的所索取的原始数据的相关数据字段,以细化主能力以便设置界限、许可等,并且以将所细化的主能力写入存储器。图17至图19的重建过程可以在各种情况下使用。例如,可能的是,诸如寻呼系统任务的任务A可在将控制传递至任务B之前,具有充足的能力(通过其存取通用能力835)来为另一任务(任务B)建立能力。寻呼系统任务可经由采用图17至图19的过程建立所需的能力,并将其存储在共享存储器中,随后可将这些能力分配至任务B。应理解,此仅为可以如何使用能力重建过程的一个示例性情形,并且应理解,还存在其中从备用存储库中的数据重构能力的能力将有用的其他情形。通过使用上述技术,应理解,通过使用签名操作以生成有签名能力,可以进一步提高通过使用能力提供的强安全性。例如,通过将签名功能与能力组合,则进一步提高由能力提供的固有安全性,以便进一步减小欺诈实体试图规避控制流程完整性的可能性。在本申请中,使用用语“被配置为”以意指装置的组件具有能够执行所定义操作的配置。在此上下文中,“配置”意指硬件或软件的互连布置或方式。例如,装置可具有提供所定义操作的专用硬件,或者处理器或其他处理装置可被程序化以执行该功能。“被配置为”并不暗指装置组件需要以任何方式改变以便提供所定义操作。尽管本文已参考所附附图详细地描述本发明的说明性实施例,但应理解,本发明并不限于这些精确实施例且本领域技术人员可在不脱离如所附权利要求所定义的本发明的范围和精神的情况下在其中实施各种改变、添加及修改。例如,在不脱离本发明的范围的情况下,可以利用独立权利要求的特征对从属权利要求的特征进行各种组合。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1