经验证的引导和密钥轮转的制作方法

文档序号:18516666发布日期:2019-08-24 09:30阅读:232来源:国知局
经验证的引导和密钥轮转的制作方法

本申请要求于2017年01月12日提交的美国临时专利申请序列号62/445,717的权益,所述申请的全文内容通过引用并入本文。

本说明书涉及电子设备的安全,包括经验证的引导和密钥轮转。



背景技术:

计算设备通常在引导过程期间被初始化,所述引导过程加载操作系统和其它软件模块。如果在引导过程期间加载了不安全的或恶意的软件,则用户的设备和数据可能存在风险。因此,需要用于在引导期间验证软件完整性的技术。



技术实现要素:

在一些实施方式中,系统使得设备能够在引导期间验证它们的软件映像的内容,从而避免执行可能有危险的代码。软件可以使用这样的密钥布置而被签名:该密钥布置允许来自许多不同提供者的软件组件被单独签署和验证。有关软件组件的整体组合的信息还由产品开发者的密钥来签署,这指示软件映像中的组件的整体组合是获得批准的。例如,具有与软件映像的组件相关的元数据的分区可以被开发者的密钥所签署。在映像层级签名被核实时,设备能够确定存在正确的模块集合。利用该系统,开发者能够确保所期望版本的操作系统、硬件驱动程序和其它组件全部被一起使用。针对个体软件组件的签名可以被用来验证该个体组件尚未受到不恰当的更改。

该系统可以支持各种不同签署密钥的轮转以提升安全性。设备可以确保对软件组件和软件映像进行签名所使用的密钥版本满足最低版本要求,使得过时的密钥不被信任。每个设备可以实施密钥版本要求并且维持指示所允许的最低密钥版本的安全数据。被提供至设备的软件更新可以在所签署数据中包括密钥版本号,使得设备能够验证所指示的版本号是正确的。

签署密钥的布置可以准许服务器系统或其它计算系统使生成所签署软件更新的过程自动化。产品开发者能够将签署权限委托给平台提供者系统,所述平台提供者系统可以存储许多产品和开发者的私有密钥。每个产品可以具有其自己的密钥集合,平台提供者系统可以定期或按需地对其进行更新。平台提供者系统使用这些密钥来为产品开发者生成软件映像以及更新。

该平台提供者系统可以维持来自不同供应商的软件模块的库或数据库,所述不同供应商例如操作系统供应商、硬件平台供应商等。该平台提供者系统还存储各个软件模块的签名和公共密钥信息。开发者可以使用与平台提供者系统的接口从库中选择软件模块的集合来组装为期望的系统映像。然后,平台提供者系统将所选择的软件模块封装为软件映像,包括利用针对该产品规定的密钥对该模块组合进行签署。通过使用多个层级的签名,例如对个体软件模块以及模块的整体组合进行签名,平台提供者系统可以有效率地为大量产品和开发者生成软件更新。平台提供者系统还可以使生成签名和软件更新的过程自动化,并且可以代表开发者来分发经更新的软件。

如下文进一步讨论的,该密钥布置可以包括使用由高度安全的根密钥所签署的中间密钥。不同于该根密钥,该中间密钥被用来证实开发者的密钥,该开发者的密钥用于证实整个软件映像。使用中间密钥的该步骤在一定程度上将开发者的密钥与信任根(root-of-trust)解耦,同时允许权限被回溯至根密钥。这允许开发者密钥和中间密钥被轮转——例如被改变——从而提高安全性,同时仍然使用与根密钥相对应的相同公共密钥信息来核实中间密钥和开发者密钥的新版本。这种轮转中间密钥的灵活性使中间密钥在连网环境中的使用可接受。如果中间密钥被怀疑受到了危害,则可以发布使用经更新的中间密钥版本的软件更新来致使设备停止信任可能不安全的密钥。

在一个总体方面,一种核实设备的软件的方法包括:由所述设备从所述设备的安全数据存储区域提取公共密钥;由所述设备提取用于中间密钥的第一证书和用于签署密钥的第二证书,所述第一证书和所述第二证书是从系统映像所提取的;由所述设备使用所述公共密钥来验证所述第一证书的签名;在验证所述第一证书的签名之后,由所述设备使用所述第一证书中的公共密钥来验证所述第二证书;以及响应于验证所述第二证书,由所述设备在所述设备的引导过程期间加载所述系统映像。

实施方式可以包括以下的一个或多个特征。例如,在一些实施方式中,该方法包括:确定(i)由用于所述中间密钥的所述第一证书所指示的第一密钥版本号;和(ii)由用于签署密钥的所述第二证书所指示的第二密钥版本号;确定(i)所述第一密钥版本号大于或等于所述设备所存储的第一最低版本号,所述第一最低版本号对应于所述中间密钥,以及(ii)所述第二密钥版本号大于或等于所述设备所存储的第二最低版本号,所述第二最低版本号对应于所述签署密钥。加载所述系统映像是进一步基于确定(i)所述第一密钥版本号大于或等于所述第一最低版本号,以及(ii)所述第二密钥版本号大于或等于所述第二最低版本号。

在一些实施方式中,所述系统映像包括多个软件模块,所述多个软件模块中的每个软件模块包括在所述设备的所述引导过程期间被执行的可执行代码,以及其中,所述系统映像包括所述多个软件模块中的每个软件模块的签名。所述系统映像包括针对包括所述多个软件模块的签名的数据集合体所生成的映像层级签名,所述映像层级签名是使用所述签署密钥所生成的。所述方法进一步包括使用所述第二证书中的公共密钥来验证所述映像层级签名。加载所述系统映像是进一步基于使用所述第二证书中的公共密钥验证所述映像层级签名。

在一些实施方式中,基于所述多个软件模块的相应签名来验证所述多个软件模块中的每个软件模块的真实性。加载所述系统映像是进一步基于验证所述多个软件模块中的每个软件模块的真实性。

在一些实施方式中,验证所述多个软件模块中的每个软件模块的真实性包括:针对所述多个软件模块中的每个软件模块生成签名;以及将针对每个模块的所生成的签名与在被处理以生成映像层级签名的数据集中所包括的、针对该模块的所存储的签名相比较。

在一些实施方式中,该方法包括:从所述设备的安全数据存储区域获得第一产品标识符;从所述第二证书获得第二产品标识符;以及验证所述第二产品标识符与所述第一产品标识符相匹配。加载所述系统映像是进一步基于验证:所述第二产品标识符与所述第一产品标识符相匹配。

在一些实施方式中,所述设备是电话。

在一些实施方式中,所述系统映像是特定产品的系统映像,并且其中,所述系统映像包括(i)开发者所选择的多个软件模块,(ii)包括所述多个软件模块的所述模块签名的数据集,和(iii)使用所述特定产品的私有密钥所生成的系统映像签名,所述系统映像签名是基于包括所述多个软件模块的所述模块签名的数据集。

在一些实施方式中,所述数据集包括所述模块签名以及与用来生成所述模块签名的私有密钥相对应的公共密钥,并且其中,所述数据集不包括所述软件模块。

在一些实施方式中,所述系统映像包括:用于第一密钥的第一证书,所述第一证书被用来生成用于第二密钥的第二证书;以及用于所述第二密钥的所述第二证书,其中,所述系统映像签名是使用所述第二密钥来生成的。

在一些实施方式中,所述设备限制所述设备的引导直至所述第二证书以及所述第一证书的签名被验证。

在另一个总体方面,一种方法包括:由一个或多个计算机识别与产品的开发者相关联的所述产品;由所述一个或多个计算机访问与所述产品相关联的私有密钥;由所述一个或多个计算机接收指示所述开发者所选择的多个软件模块的数据;由所述一个或多个计算机获得所述多个软件模块中的每个软件模块的模块签名;由所述一个或多个计算机使用与所述产品相关联的私有密钥来生成系统映像签名,所述系统映像签名是针对包括所述多个软件模块的模块签名的数据集所生成的;由所述一个或多个计算机生成系统映像,所述系统映像包括(i)所述开发者所选择的所述多个软件模块,(ii)包括所述多个软件模块的模块签名的所述数据集,和(iii)所述系统映像签名;以及由所述一个或多个计算机将所述系统映像提供至一个或多个其它设备。

实施方式可以包括以下一个或多个特征。例如,在一些实施方式中,所述数据集包括所述模块签名以及与用来生成所述模块签名的私有密钥相对应的公共密钥,并且其中,所述数据集不包括所述软件模块。

在一些实施方式中,该方法包括向作为所述产品的实例的设备提供所述系统映像来作为用于所述设备的软件更新。

在一些实施方式中,生成所述系统映像包括生成所述系统映像以进一步包括:用于第一密钥的第一证书,所述第一证书被用来生成用于第二密钥的第二证书;以及用于所述第二密钥的所述第二证书,其中,所述系统映像签名是使用所述第二密钥来生成的。

在一些实施方式中,生成所述系统映像包括:确定所述第一密钥或所述第二密钥的当前版本的密钥版本号;改变所述第一密钥或所述第二密钥;增加所述第一密钥或所述第二密钥的密钥版本号;以及在所述第一证书或所述第二证书中指示增加后的密钥版本号。

在一些实施方式中,将所述系统映像提供至一个或多个其它设备包括:通过通信网络将所述系统映像提供至均具有与所述产品相对应的产品标识符的多个设备。

这些方面的其它实施例包括相对应的系统、装置和计算机程序,它们都被配置为执行在计算机存储设备上编码的该方法的动作。例如,一种系统包括一个或多个计算机以及存储指令的一个或多个存储设备,所述指令在被所述一个或多个计算机执行时能够进行操作而致使所述一个或多个计算机执行操作。

本发明的一个或多个实施例的细节在附图和以下描述中阐述。其它特征和优势将由于说明书、附图和权利要求书而显而易见。

附图说明

图1是用于经验证的引导和密钥轮转的自动化签名生成的示例系统的示图。

图2是用于促进系统映像和签名的生成的用户界面的示例的示图。

图3是图示用于提供的系统的示例的框图

图4图示了包括用于经验证的引导的数据的用户设备处的数据存储的示例。

图5是图示用于经验证的引导的过程的示例的流程图。

图6是图示用于核实软件映像的公共密钥的过程的示例的流程图。

各图中相似的附图标记和名称指示相似的要素。

具体实施方式

本文档中的技术准许设备的安全的、可扩缩的、经多方验证的引导,并且还允许安全且有效率的密钥轮转。在一些实施方式中,经验证的引导过程可以被用来确保在设备上运行的软件的完整性。经验证的引导可以确保具有可执行代码的所有分区在代码被执行之前都由适当权限方(authority)所签署。该过程可以向设备的用户保证该软件没有被篡改。通常,密钥可以被用来为软件模块生成签名。如果软件模块随后发生变化,则设备可以检测到该签名对于变化后的模块不再有效,并且该设备可以拒绝引导更改的模块。这允许设备防范未核准或恶意软件的执行。

平台提供者可以提供使得独立开发者能够从各种所支持的硬件选项中创建他们自己的设备的基础设施。开发者可以为其设备指定软件的定制组合,并且平台提供者可以管理定制软件封装的签署和验证。例如,开发者可以提供一个或多个要运行的应用,操作系统(os)提供者可以提供os,并且硬件供应商提供os支持(例如,驱动程序软件)和引导加载器。平台提供者为开发者构建系统映像并且对最终用户的设备派发更新。为了支持该过程,平台提供者需要针对每个产品的每个版本组装唯一的经验证的引导栈,并且该引导栈包括来自至少三方的代码,其中的每一方具有他们自己的签署密钥来对他们的软件部分进行签署。

在一些现有的经验证的引导情形中,针对每个更新仅需要单个签名,并且签署需要受信任的雇员来收集、认证并生成用于验证的签名。在签署密钥高度安全的情况下通常并不需要密钥轮转。然而,在为许多开发者提供平台时,人工签署更新并不可行,并且不轮转密钥会危害安全性。例如,平台提供者可能需要为数十、数百、数千或数万个产品定期签署更新,其中的每一个产品可能具有从多个代码源所生成的不同的软件组合。为了可行的、可扩缩的系统,软件封装的签署应当是自动化的。类似地,密钥轮转和撤销也应当是自动化的。

如下文讨论的,可以使用各种技术来提供密钥保护、密钥轮转、以及软件签署和分发的可扩缩自动化。在一些实施方式中,平台提供者系统可以提供满足以下要求的自动化签署和验证系统。首先,融合到设备硬件中的任何公共密钥都具有隔离(air-gapped)的私有密钥(例如,私有密钥无法经由网络来访问)。其次,任何未隔离的私有密钥都必须定期轮转,并且先前版本必须不再被设备所信任。第三,平台提供者系统应当为自动化签署提供高的可用性和性能。第四,平台提供者系统应当以并不违背其它要求的方式来组合来自多方的签名。

图1是用于促进经验证的引导和密钥轮转的示例系统100的示图。系统100包括平台提供者系统110、开发者系统120、供应商系统130、用户设备140和网络150。

平台提供者系统110提供自动化密钥存储和签署能力,并且通过网络150与系统100的其它要素进行通信。平台提供者系统110为要被自动签署并分发给用户设备140的经更新软件提供可扩缩的平台。

开发者系统120表示电子设备的各个独立开发者,例如物联网(iot)设备的开发者。开发者使用来自供应商的硬件和软件的各种组合来创建并更新用户设备140。

供应商通过供应商系统130提供与他们的软件模块相关的信息。通常,供应商系统130将他们的各个软件模块132的副本提供至平台提供者系统110,所述平台提供者系统110可以具有由不同供应商供应的各个软件模块的数据库112或其它数据存储。在供应商更新他们的模块时,经更新版本被提供至平台提供者系统110,所述平台提供者系统110存储经更新的模块并且针对要发送至用户设备140的更新生成签名。

此外,开发者系统120与所述平台提供者系统110进行交互以规定要被包括在每个开发者的设备中的软件模块的组合。例如,所述平台提供者系统110可以例如通过网页或web应用来提供用户界面或者应用编程接口(api),其使得开发者能够发送用于创建或更新软件映像的指令122。开发者可以指示适用于他们相应的设备的软件模块132的具体组合。所述平台提供者系统110可以为每种类型的用户设备140生成针对开发者所指定的软件模块的组合的产品层级签名。该产品层级签名可以证明设备140的开发者批准该软件映像——例如软件模块132的特定组合——在设备140上使用。

为了能够生成签名,所述平台提供者系统110可以存储密钥数据114和签名数据116。每个个体软件模块132可以被签署,并且该模块的签名数据可以包括相对应的签名和公共密钥。在一些实例中,供应商可以连同可执行软件模块132一起提供相对应的签名数据。在其它实例中,供应商或开发者可以将签署任务委托给平台提供者系统110。如下文所讨论的,平台提供者系统110可以为供应商和开发者生成并存储私有密钥从而允许平台提供者系统110为个体软件模块132以及为针对用户设备140形成软件映像的软件模块132的组合生成签名。

由于平台提供者系统110存储软件模块132和相对应的签名数据116,所以平台提供者系统110可以有效率地生成软件更新以发送至用户设备140。特别地,由于软件模块132被分别签署,所以平台提供者系统110可以针对软件模块132重用已有签名。例如,具有公共硬件平台的所有用户设备140可以使用相同的硬件驱动程序软件模块,具有使用硬件供应商的私有密钥所生成的相同签名。该模块可以充当不同开发者用来生成他们自己的系统映像的构件之一。每个开发者可以向硬件驱动程序软件模块添加操作系统或其它软件。每个开发者指令平台提供者系统110利用该开发者的唯一私有密钥来签署其自己的软件模块组合。平台提供者系统110将开发者私有密钥存储在密钥数据114中,这允许平台提供者系统110代表任何开发者以及针对任何开发者产品进行签署。

然后,平台提供者系统110封装所产生的经签署的映像118以供分发至用户设备140。平台提供者系统110可以为每个用户设备140提供与其产品标识符相对应的软件映像。软件可以作为完整映像、作为增量更新来提供,或者以其它方式提供。特定产品的软件映像可以被提供至该产品的所有实例,例如具有相同型号编号或产品标识符的数千个设备可以接收相同的经更新的软件映像。

如下文讨论的,为了使安全性有所提升,用来签署软件模块132和映像118的私有密钥可以被轮转,例如定期变化。供应商、开发者和其它方的密钥全部可以独立轮转。换言之,用来签署个体模块和/或整个映像的密钥可以一起被改变或者在不同时间被改变。此外,用户设备140中的每一个可以实现多种技术来确保使用早期密钥版本的签名不再被接受。

作为密钥轮转过程的一部分,平台提供者系统110生成使用一个或多个经更新的密钥的新映像118。该映像118指示密钥的新的版本代码,例如版本号。当用户设备140接收到经更新映像并且验证内容时,用户设备140更新防篡改存储中的本地值以指示新的版本代码。用户设备140的引导过程的一部分包括:对照所存储的版本代码来检查密钥版本代码以验证所使用的密钥是当前的。在引导期间,如果用户设备140确定软件模块132是使用过时的密钥所签署的,则用户设备140可以阻止该软件模块的执行或者终止引导过程来避免运行可能不安全的软件。

图2是用于促进软件映像和签名的生成的用户界面200的示例的示图。用户界面200示出了供开发者(“developercorp.”)选择将包括在特定产品(“xyzproduct”)的软件映像中的软件模块的选项。

在该示例中,开发者可以从操作系统的若干不同版本当中进行选择。开发者还能够从来自不同供应商、硬件型号和驱动程序版本的驱动程序当中选择硬件驱动程序。在一些实施方式中,平台提供者系统110可以存储与特定产品的硬件相关的信息,并且过滤选项来针对适当供应商和硬件,从而允许开发者在对于该硬件的不同版本或封装当中进行选择。用户界面200还示出了例如针对不同供应商、硬件型号或驱动程序的软件版本而从不同的无线网络接口驱动程序中进行选择的选项。除了所图示的软件类型之外或作为其替代,可以选择其它类型的软件。开发者还可以选择开发者已经为了在特定产品中使用而已经上传的一个或多个模块。

在开发者已经选择了所期望的软件模块集合之后,开发者能够例如通过选择控件210来指令平台提供者系统110生成软件映像和适当签名。平台提供者系统110检索所选择的软件模块,并且还将有关它们相对应的签名的信息放在该软件映像中所包括的经验证的引导元数据(“vbmeta”)分区中。除其它数据之外,该vbmeta分区可以包括每个被批准的模块的列表以及它们相对应的签名和公共密钥。个体模块的这些签名可以已经由平台提供者系统110生成或者由提供该模块的一方生成。平台提供者系统110通过利用开发者的密钥签署该vbmeta分区来生成映像层级或系统层级签名。这表明开发者批准该映像中的软件模块组合在引导期间在特定产品上加载。平台提供者系统110随后将具有签名的该软件映像提供至开发者,或者可以直接将该映像分发至作为特定产品实例的设备。

在一些实施方式中,开发者可以指定该开发者的密钥应当变为新版本。如果开发者这样做,则平台提供者系统110如下文所讨论来生成新的开发者密钥并且递增版本号。如果所选择的模块中的任何模块都利用它们相对应密钥的新版本被签署,则平台提供者系统110检索的签名将包括利用新密钥所生成的最新签名数据。当该映像被用户设备所接收时,用户设备将递增指示可接受的最低密钥版本的所存储值,使得利用过时的密钥签署的模块不被执行。

图3是图示用于向用户设备提供软件映像的系统300的示例的框图。在该示例中,平台提供者系统110从一个开发者系统120a接收有关用户设备140a的映像的指令。平台提供者系统110还从不同的开发者系统120b接收有关用户设备140b的映像的指令。

平台提供者系统110针对不同的设备140a、140b生成不同的软件映像310a、310b。在该示例中,每个软件映像310a、310b包括三个软件模块。每个软件映像310a、310b还包括具有所包括模块中的每一个的签名数据的vbmeta分区。

当生成软件映像310a、310b时,平台提供者系统110可以重用现有模块代码和所存储的签名数据。除非模块的密钥变为过时的,否则不需要针对模块重新计算所存储的签名数据。在该示例中,前两个模块在映像310a、310b之间共享。针对这些被共享的共享模块,平台提供者系统110在vbmeta分区中包括相同的签名数据。对于软件映像310a、310b中的第三模块,开发者选择了不同的模块,并且平台提供者系统110相应地选择不同模块和相对应的签名。在完成vbmeta分区之后,平台提供者系统110签署每个vbmeta分区以生成映像层级签名320a、320b。每个软件映像310a、310b的签名是使用致使该映像被创建的开发者的唯一私有密钥来生成的。作为结果,即使两个开发者选择了相同的软件模块组合,但由于使用不同的开发者密钥来生成映像的映像层级签名,所以映像的签名也将是不同的。

下文进一步讨论在生成软件映像时所使用的各种签署密钥和签名。重要的是经验证的引导是极度可扩缩的,这意味着平台能够以自动化方式进行扩缩从而为许多开发者和产品服务。这能够利用经验证的引导签署中的非对称密钥集合以及允许平台满足安全和可扩缩能力要求二者的验证过程来实现。利用这些密钥,平台将产品根密钥(prk)与系统签署密钥(ssk)分离,从而允许这些密钥被给予其它各方从而以更加可扩缩的方式使用。

平台提供者系统110使用四个主要密钥来生成签名:产品根密钥(prk)、产品中间密钥(pik)、产品签署密钥(psk)和系统签署密钥(ssk)。在一些实施方式中,这些密钥的不同实例可以被用于不同的开发者或产品。例如,可以存在多个不同的psk,例如每开发者每产品一个。因此,为了支持具有5个产品的开发者,平台提供者系统110可以一次使用5个psk,其中不同的psk用于每个产品。该psk对于每个产品可以是唯一的,从而一个开发者的产品的psk不可以也被用于该开发者的其它产品或者任何其它开发者的产品。

在一些实施方式中,ssk被平台提供者系统110用于特定的硬件平台。作为结果,如果两个开发者使用相同的硬件平台开发产品,则即使psk和其它信息对于不同产品可能不同,也可以使用相同的ssk。这可以允许将在许多不同开发者的许多不同产品中使用的模块和签名数据有效率地用于诸如操作系统的软件。

在一些实施方式中,prk和pik可以由不同开发者和/或产品所共享。例如,单个prk可以被用作一个开发者的多个产品和/或不同开发者的多个产品的信任根。类似地,在给定时间,单个pik可以被用于一个开发者的多个产品和/或不同开发者的多个产品。然而,不同的prk可以被用于不同的产品或开发者。类似地,与相同prk相关联的产品可以与不同的pik相关联。例如,全部与相同prk相关联的不同产品型号的集合可以被划分为不同群组,其中每个群组与不同的pik相关联。在一些实例中,一个pik可以仅被用于单个开发者的产品,或者仅被用于一个特定产品。

除了平台提供者系统所使用的密钥之外,来自其它软件提供者(例如,硬件供应商)的其它密钥也可以供那些软件提供者使用。例如,供应商能够独立于平台提供者系统110来维持他们自己的密钥并且生成他们自己的签名。因此,供应商能够提供具有相对应签名和公共密钥的软件模块。即使不了解供应商所使用的密钥,平台提供者系统也能够以本文所讨论的布置来使用那些签署模块从而在引导期间允许模块的验证。

平台提供者系统110所使用的密钥在以下的表1中描述。

表1

表1中所描述的四个密钥中的每一个描述了作为非对称加密方案的一部分的私有密钥。每个密钥可以表示rsa公共密钥加密系统的私有密钥。

图4图示了用户设备140处的数据存储的示例,其包括用于经验证的引导的数据。该示例示出了三种主要类型的存储:(1)防篡改存储410,(2)融合存储420,以及(3)通用存储,其包括软件映像430。

防篡改存储410是非易失性数据存储区域或设备。用户设备140可以对该区域进行写入,但是写入是受限的以使得设备的操作系统无法对其进行写入。例如,写入仅在引导过程中的特定部分的期间才可能进行,其在控制权被交付操作系统之前就结束。防篡改存储410存储若干密钥中的每一个的最低版本号。这些值例如可以包括pik最低版本号、psk最低版本号以及ssk最低版本号。在用户设备140接收到包括新的密钥版本的模块时,用户设备140增加所存储的最低版本号以等于当前密钥版本。pik、psk和ssk中的每一个都可以被独立改变,相对应的版本号也能够被改变。

融合存储420存储通常在正常操作下无法写入的数据。例如,融合存储420可以在熔丝位、rom、写保护闪存或其它存储中编码数据。融合存储420中的数据通常并不随着产品的寿命而变化。融合存储420还可以包括持久产品属性的散列,其可以被用来验证从其它存储所获得的持久产品属性是正确的。通常,持久产品属性的散列被存储在熔丝位中以限制熔丝位消耗,而不是直接利用熔丝位来指定产品属性。然而,在一些实例中,产品属性可以使用熔丝位而不是通过指示散列来指定。在图4的示例中,包括产品标识符和prk公共密钥在内的持久产品属性在融合存储420之外指定,并且该信息的散列被存储在融合存储420中。

通用存储区域存储软件映像430。该映像包括若干软件模块440a-440d,其中的每一个都可以被存储在不同分区中。软件映像430还包括经验证的引导元数据(“vbmeta”)分区432,其标识软件映像430中的软件模块440a-440d中的每一个并且还包括用于验证各个模块440a-440d的描述符。模块的描述符包括允许设备140例如验证该模块可信的信息。在该示例中,每个模块440a-440d在vbmeta分区432中具有相对应的签名442a-442d和公共密钥444a-444d。例如,模块440a的公共密钥444a是与用来针对模块440a生成签名442a的私有密钥相对应的公共密钥。vbmeta分区432可以指示每个模块440a-440d的起始和结束以及哪个签名442a-442d和公共密钥444a-444d对应于每个模块440a-440d。除此之外或作为替选,vbmeta分区432可以包括其它信息。

vbmeta分区432还可以包括用来验证软件映像的有效性的其它信息。例如,vbmeta分区432还可以包括用于验证vbmeta分区432的签名450、所使用的密钥或者软件映像430的其它组件的有效性的证书和其它信息。软件映像430可以包括用于产品中间密钥(pik)的pik证书452。pik证书430可以包括指示在生成映像430时所使用的pik的版本的pik密钥版本号。pik证书452还包括与pik相对应的pik公共密钥。pik证书452还包括pik证书签名,例如从证书的其它内容所生成的、可以被用来认可pik证书的签名。prk被用来针对pik证书生成签名。

vbmeta分区432可以包括psk证书454,其包括指示用来生成映像430的产品签署密钥(psk)的版本的psk版本号。例如,这可以是用来生成签名450的psk的版本号。psk证书454包括与psk相对应的psk公共密钥。psk证书454包括指示psk与之对应的产品的产品标识符。设备140可以将该产品标识符与融合存储420中的产品标识符相比较。如果这两个标识符匹配,则映像430意图用于设备140。如果标识符不匹配,则该映像和psk是用于不同产品,并且因此设备140可以确定映像430并不适用于产品140。psk证书454包括psk证书签名,例如从该证书的其它内容所生成的可以被用来认可psk证书的签名。pik被用来针对psk证书生成签名。

可以包括其它证书和验证数据。ssk密钥版本号456可以被包括在vbmeta分区432中。在一些实施方式中,类似于pik证书,ssk证书可以被包括以使得ssk公共密钥和ssk证书签名也被包括。通常,ssk被用来签署模块440a-440d中的一个或多个,并且因此ssk公共密钥可以是公共密钥444a-444d中的一个或多个。

如上文讨论的,证书452、454以及版本信息456可以被存储在vbmeta分区432中。替选地,在一些实施方式中,证书452、454以及版本信息456可以被存储在vbmeta分区432之外并且可以独立于vbmeta分区432被签署。

软件映像430还可以包括被用来验证该软件映像的有效性的其它信息。该信息包括vbmeta分区签名450。该签名使用psk——开发者针对该产品的私有密钥之一——所生成。签署vbmeta分区432确保了模块440a-440d无法在没有使签名450无效的情况下被添加、移除或替换。类似地,对证书452、454以及版本号信息456的包括允许使用签名450对这些内容进行验证。另外,由于vbmeta分区432包括用于每个模块440a-440d的签名442a-442d,所以个体模块440a-440d无法在没有使签名442a-442d无效的情况下被更改。这种布置还准许每个模块的提供者使用他们自己的签署密钥的灵活度。例如,硬件供应商和软件供应商可以独立于平台提供者系统110使用他们自己的密钥进行签署,并且简单地提供签名、私有密钥和模块。替选地,一些供应商可以将一些签署权限委托给平台提供者系统110以针对模块生成签名。当权限被给予平台提供者系统110时,平台提供者系统110可以自动签署模块的每个更新以及自动地轮转签署密钥。

图5是图示经验证的引导的过程500的示例的流程图。图5中所示的步骤在诸如用户设备140之一的设备每次被引导时由该设备所执行以验证所安装软件的完整性。该步骤由在引导的时候运行的引导加载器或其它软件所执行。

在步骤502,引导加载器从vbmeta分区432加载vbmeta映像。

在步骤504,引导加载器确定vbmeta分区432上的签名450是否有效。

在步骤506,引导加载器确定用来签署vbmeta分区432的密钥是否受到信任。

在步骤508,引导加载器确定回滚索引值是否大于或等于所存储的回滚索引值。在一些实施方式中,每个软件映像——例如映像430——包括该索引的版本代码。开发者可以使用该版本代码来按照顺序规定更新。设备140可以例如在防篡改存储中存储软件映像的版本代码以验证正被加载的映像至少像所存储的索引一样高。以这种方式,设备140可以检测正被引导的映像是否表示过时的映像,这可以表示攻击者回滚至先前不安全的版本的意图。如果映像的版本号高于所存储的版本号,并且映像以其它方式被确定为是有效的,则设备140可以允许该映像被引导并且还可以将所存储的版本号更新为当前版本。

如果步骤504、506、508中的任何确定结果无法指示映像是当前且有效的,则引导加载器将验证指示为失败,并且可以省略进一步核验。

在步骤510,引导加载器检查软件映像430中的每个软件模块的描述符,并且确定相应模块是否有效。核实描述符的过程在步骤512-526中示出。

在步骤512,引导加载器检查映像432中的软件模块的描述符类型。如果使用链描述符,则引导加载器继续进行步骤514-522。如果使用散列描述符,则引导加载器继续进行步骤524和526。

在步骤514。引导加载器从特定模块440a-440d的分区内加载经验证的引导元数据。相对于与映像层级vbmeta分区432中的数据,该元数据在下文被称作模块特有vbmeta数据。例如,如果模块自身是其它模块的编译,则一些分区可以包括它们自己的vbmeta映像。以这种方式,可以使用多层级的签名,或者映像430的vbmeta分区432可以指向映像430中的特定模块440a-440d内的模块特有vbmeta分区。

在步骤516,引导加载器验证特定模块内的模块特有vbmeta映像上的签名。

在步骤518,引导加载器确定用来签署模块特有vbmeta映像的密钥与映像层级vbmeta分区432内的链描述符中的公共密钥之间是否存在匹配。

在步骤520,引导加载器确定模块的回滚索引是否大于或等于所存储的回滚索引。所存储的回滚索引可以从链描述符获得,例如从映像层级vbmeta分区432中的数据获得。

在步骤522,引导加载器检查模块特有vbmeta映像中的每个描述符。这允许引导加载器验证正被检查的模块的每个组件。

如果验证步骤516-522中的任一个给出了否定结果,则对模块的验证失败。如果验证步骤516-522全部给出了肯定结果,则模块的验证成功。

如果针对模块使用散列描述符,则在步骤524,引导加载器针对该模块计算分区中的整个映像的摘要(digest)。例如,引导加载器可以从该分区生成散列或其它摘要。

在步骤526,引导加载器确定所计算的摘要是否匹配散列描述符中的摘要。如果摘要匹配,则模块被认为是有效的,并且如果摘要不匹配则验证失败。

引导加载器针对软件映像430中的每个模块440a-440d执行验证步骤。在执行其它验证步骤后,如果所有模块都被成功验证,则引导加载器确定软件映像430是真实的、完整的并且适用于其正加载于其上的设备140。引导加载器继续引导设备140并且按照实施引导过程的需要执行每个模块440a-440d中的可执行代码。

图6图示了用于核实软件映像的公共密钥的过程600的示例。过程600可以作为图3的过程500中的步骤506的一部分被执行,以确定与用来签署vbmeta分区432的产品签署密钥(psk)相对应的公共密钥是否受信任。过程600因此可以由用户设备140来执行,例如通过引导加载器或另一种核实机制来执行。

简言之,过程600涉及例如从设备140上受保护的存储——例如融合数据存储420——读取prk公共密钥,并且验证该prk公共密钥的真实性。过程600还涉及读取其它信息,例如(1)从防篡改存储410读取pik、psk和ssk的最低版本值,以及(2)从软件映像430提取pik、psk和ssk的证书数据或其它验证数据。然后,过程600验证pik公共密钥和psk公共密钥。pik、psk和ssk的版本也被验证以确保使用适当的版本。过程600的步骤可以以所示顺序来执行。

在步骤601,设备140从融合数据存储420读取持久产品属性并且提取prk公共密钥和产品id。在一些实施方式中,使用rsa非对称加密,其中模数是公共密钥的参数之一。

在步骤602,如果持久产品属性并未存储在融合存储中,则设备140对持久产品属性进行散列并且对照融合的散列验证该结果。匹配结果验证:所提取的公共密钥和产品标识符对于设备140是有效的。

在步骤603,设备140从防篡改存储410读取pik、psk和ssk最低版本值。

在步骤604,设备140从来自映像430的vbmeta分区432提取pik证书452、psk证书454和ssk版本号456。

在步骤605,设备140使用prk公共密钥来验证pik证书签名。在一些实例中,prk公共密钥的模数被用于该验证。

在步骤606,设备140验证pik证书使用。这可以涉及确定:该证书的发布者核准或意图该密钥被用作pik。pik证书的签署部分中的指示符可以指示发布该证书的证书权限方是否意图该密钥被用作pik。

在步骤607,设备140对照pik最低版本验证pik证书密钥版本。

在步骤608,设备140使用pik证书中的pik公共密钥来验证psk证书。

在步骤609,设备140对照设备140的实际产品标识符(例如,来自于持久产品属性)验证psk证书主体(例如,psk证书454中的产品标识符)。

在步骤610,设备验证psk证书使用。这可以涉及确定该证书的发布者是否核准或意图该密钥被用作psk。psk证书的签署部分中的指示符可以指示发布该证书的证书权限方是否意图该密钥被用作psk。

在步骤611,设备140对照psk最低版本验证psk证书密钥版本。

在步骤612,设备140验证:psk证书454中的psk公共密钥与从图5的步骤506获得的公共密钥相匹配。vbmeta分区432存储可以被用来验证psk公共密钥的公共密钥。该过程确保图5中的过程所使用的psk公共密钥与psk证书中存储的公共密钥相匹配。

在步骤613,设备140对照ssk最低版本验证ssk版本(例如,来自公共密钥元数据的ssk版本)。由于ssk版本信息是由psk所签署的,所以该步骤需要在psk信任判别之后进行,否则并不知道ssk版本是有效的。

在步骤613之后,在设备140已经验证了每个证书的完整性、证书的使用以及每个相关密钥的版本号的情况下,设备140确定当前映像是完善的并且能够继续引导设备140。然而,如果验证步骤605-613中的任一个失败,例如指示与预期值的差异,则设备140可以阻止引导从而避免使用不安全的软件进行操作。类似地,如果执行验证步骤所需的值无法被访问,或者如果持久产品属性并未在步骤602中被成功验证,则设备140可以拒绝引导。

如上文所示出的,过程600验证pik、psk和ssk的版本号中的每一个。这些密钥可以被轮转,由此设备140实现硬件辅助的保护方案以在新密钥被使用时使得所存储的版本号向前轮进。降低版本号是不允许的。

prk不被轮转。换言之,prk及其相对应的公共密钥为设备140终身所使用。prk仅被用来签署pik,所述pik进而被用来认证psk。这允许使签署自动化并且还轮转pik和psk的显著灵活性。

使用pik来认证psk而不是使用prk来签署psk是该布置中提升安全性的部分之一。通过使用prk来签署pik,设备140可以使用prk公共密钥的融合存储来验证任何pik是真实的。该pik进而能够认证任何适当的psk是有效的。由于pik并不被融合到设备140中,所以它可以被轮转。这还使pik的安全性不如prk那么关键。如果prk受到危害,则依赖于设备140的其它密钥可能受到危害,并且将没有方法来改变为新版本。如果pik受到危害,则可以发布具有新pik版本的更新,其将会使得受到危害的pik版本对于更新后的设备140不构成威胁。在执行其它签署功能的同时更新pik的这种能力使得pik适于存储在连网平台中,例如平台提供者系统110,其中pik能够被用来以自动化方式签署psk。prk能够被保存在“隔离”或离线设施中以降低它被获得的风险。

密钥轮转作为一项良好的惯例而定期进行并且还能够响应于可疑的未核准访问而按需进行。除prk之外的所有密钥都进行轮转。每次轮转意味着旧密钥的撤销。设备针对每种类型的可轮转密钥使用回滚保护来确保被撤销的密钥不受信任。

每个个体设备实现密钥回滚保护。存储在设备上的每个pik、psk和ssk公共密钥与例如32位整数、64位整数等的版本号配对。该设备还维持保存在对于主os防篡改的位置中的这些最低版本值中的每一个的最低版本值。在引导期间,最低密钥版本与每个密钥的引导密钥版本相比较,并且该引导在引导密钥版本小于最小值的情况下被中止。每次os更新被引导加载器验证为良好,则所有的最低密钥版本都被更新为os更新中所指定的值。密钥版本与软件映像回滚版本不同且与之独立。还可以连同密钥回滚保护一起执行软件映像版本回滚保护。

为了轮转pik,可以使用以下过程。首先,签署方组装以连署整个过程,包括ca命令。第二,发布ca命令,其生成新的rsa密钥对并且导出包含除签名字段之外的所有信息的部分证书。pik的密钥版本被递增。第三,该部分证书被复制到便携式介质(例如,闪存),其随着签署方去往prk安全设施。第四,签署方使用m-of-n方案向安全设施和hsm进行认证。第五,hsm命令被发布以针对该部分证书生成签名。第六,签名被附加至该部分证书以形成pik的完整证书。第七,签署方离开安全设施。第八,发布导入新证书的ca命令。第九,发布发起向新密钥和证书的滚动的ca命令。

以下讨论轮转psk的过程。用于轮转psk的过程是自动化的并且由开发者所执行。签署者维持每个psk的生存时间(ttl)值和证书。当签署者接收到利用期满psk(或者尚不存在的psk)进行签署的请求时,轮转被同步执行。如果psk尚未期满但是即将期满,则签署者异步地发起轮转。用于轮转psk的步骤如下:(1)签署者生成新的密钥对、ttl值以及其中密钥版本被递增的部分证书。(2)签署者向证书权限方发送签署该部分证书的请求。(3)该证书权限方核实该部分证书,将其签署并且放出完整证书。(4)签署者发起向新密钥和证书的滚动。在一些实施方式中,签署方和证书权限方的角色都由平台提供者系统来实行。例如,平台提供者系统110充当证书权限方,而且还代表开发者来执行签署。

ssk轮转是自动化的并且完全由开发者来执行。签署者针对每个ssk维持生存时间(ttl)值和密钥版本,并且像针对psk那样执行同步或异步轮转。由于通常不存在针对ssk的证书,所以该过程简单地是psk轮转中的步骤(1)和(4)。首先,签署者生成新的密钥对、ttl值并且递增密钥版本。第二,签署者发起向新密钥的滚动。

在上文讨论的用于轮转psk的过程中,正常情况下将由开发者所维持的数据可以由平台提供者系统110所存储并维持。在一些实施方式中,ssk由平台提供者而不是开发者或供应商来控制。例如,平台提供者系统110可以针对每个开发者的每个产品存储指示当前pik、psk和ssk的数据,以及相对应的证书、公共密钥、版本号等。平台提供者系统110例如可以自动确定密钥已经期满或者将在阈值时间量内期满,并且作为响应可以使用经更新的密钥版本生成并分发更新。在一些实施方式中,开发者可以按照需要指定密钥版本应当更新,并且平台提供者系统110作为响应在下一次更新中使用新的密钥版本。

已经描述了多个实施方式。然而将理解,可以进行各种修改而并不背离本公开的精神和范围。例如,以上所示出的各种形式的流程可以在步骤被重新排序、有所添加或去除的情况下被使用。

该说明书中所描述的本发明的实施例以及所有功能操作能够以数字电子电路来实现,或者以计算机软件、固件或者包括该说明书中所公开的结构及其结构等同物的硬件来实现,或者以它们中一个或多个的组合来实现。本发明的实施例能够被实现为一个或多个计算机程序,例如在计算机可读介质上编码以便由数据处理装置执行或者控制其操作的计算机程序指令的一个或多个模块。计算机可读介质可以是机器可读存储设备、机器可读存储基底、存储器设备,产生机器可读传播信号的物质组成,或者它们中一个或多个的组合。术语“数据处理装置”包含用于处理数据的所有装置、设备和机器,例如包括可编程处理器、计算机,或者多个处理器或计算机。除了硬件之外,该装置可以包括为所讨论的计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统或者它们中的一个或多个的组合的代码。传播信号是人为生成的信号,例如机器所生成的电气、光学或电磁信号,它们被生成以编码信息以便传输至适当的接收器装置。

计算机程序(也被称作程序、软件、软件应用、模块、软件模块、脚本或代码)能够以任意形式的编程语言进行编写,包括编译或解释语言,并且其可以以任意形式来部署,包括作为独立程序或者作为适于在计算环境中使用的模块、组件、子程序或其它单元。计算机程序并不一定对应于文件系统中的文件。程序可以存储在保存其它程序或数据(例如,标记语言文档中所存储的一个或多个脚本)的文件的一部分之中,存储在专用于所讨论程序的单个文件中,或者存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。计算机程序能够被部署为在一台计算机上执行或者在位于一个地点或跨多个地点分布并且通过通信网络进行互连的多台计算机上执行。

该说明书中所描述的过程和逻辑流程能够由一个或多个可编程计算机来实现,所述可编程计算机执行一个或多个计算机程序以通过对输入数据进行操作并生成输出来实行功能。所述处理和逻辑流程还能够由例如fpga(现场可编程门阵列)或asic(专用集成电路)的专用逻辑电路所实行,并且装置也能够被实现为所述专用逻辑电路。

适于执行计算机程序的处理器例如包括通用或专用微处理器二者,以及任意类型的数字计算机的任意一个或多个处理器。通常,处理器将从只读存储器或随机访问存储器或者其二者接收指令和数据。计算机的必要要素是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括一个或多个用于存储数据的大型存储设备,或者与之操作耦合以从其接收或向其传送数据,上述大型存储设备例如磁盘、磁性光盘或光盘。然而,计算机并非需要具有这样的设备。此外,计算机可以被嵌入另一个设备中,例如平板计算机、移动电话、个人数字助理(pda)、移动音频播放器、全球定位系统(gps)接收器,仅举数例。适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,例如包括半导体存储器设备,例如eprom、eeprom和闪存设备;磁盘,例如内部硬盘或便携式磁盘;磁性光盘;以及cd-rom和dvd-rom盘。处理器和存储器能够被补充以专用逻辑电路或者整合在其中。

为了提供与用户的交互,本发明的实施方式能够在计算机上实现,该计算机具有例如crt(阴极射线管)或lcd(液晶显示器)监视器的用于向用户显示信息的显示设备以及用户能够通过其向计算机提供输入的键盘和例如鼠标或轨迹球的指示设备。也能够使用其它类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任意形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且来自用户的输入能够以任意形式被接收,包括声音、语音或触觉输入。

本发明的实施例能够在计算系统中实现,该计算系统包括例如作为数据服务器的后端组件,或者包括例如应用服务器的中间件组件,或者包括例如客户端计算机的前端组件,或者一个或多个这样的后端、中间件或前端组件的任意组合,上述客户端计算机具有用户能够通过其而与本发明的实施方式进行交互的图形用户界面或web浏览器。该系统的组件能够通过例如通信网络的任意形式或介质的数字数据通信进行互连。通信网络的示例包括局域网(lan)和例如互联网的广域网(wan)。

计算系统可以包括客户端和服务器。客户端和服务器通常互相远离并且典型地通过通信网络进行交互。客户端和服务器的关系源自于在相应计算机上运行并且互相具有客户端-服务器关系的计算机程序。

虽然该说明书包含了许多具体的实施方式细节,但是这些并不应当被理解为是对任何发明或者可以请求保护内容的范围的限制,而是作为可能特定于特定发明的特定实施例的特征的描述。该说明书中在分开的实施例的背景下所描述的某些特征也能够在单个实施例中组合实现。相反,在单个实施例的背景下所描述的各个特征也能够在多个实施例中分开实现或者以任意适当的子组合实现。此外,虽然特征在上文中可以被描述为以某种组合发生作用并且甚至最初如此要求保护,但是来所请求保护的组合的一个或多个特征在一些情况下能够脱离该组合并且所请求保护的组合可以涉及子组合或子组合的变化形式。

类似地,虽然操作在图中以特定顺序进行描绘,但是这并不应当被理解为为了实现所期望的结果而要求这样的操作以所示出的特定顺序或以连续顺序来执行,或者执行所有所图示的操作。在某些情况下,多任务和并行处理可能是有利的。此外,以上所说明的各个系统模块和组件的划分并不应当被理解为必需这样的划分,并且应当理解的是,所描述的程序组件和系统一般能够共同集成在单个软件产品中或者被封装为多个软件产品。

其中提到html文件的每个实例中,可以替代以其它的文件类型或格式。例如,html文件可以被xml、json、纯文本或者其它类型的文件所替代。此外,在提到表格或散列表的地方,可以使用其它数据结构(诸如,电子表单、关系数据库或结构文件)。

已经描述了本发明的特定实施例。其它实施例处于所附权利要求书的范围之内。例如,权利要求书中所记载的动作可以以不同顺序执行并且仍然实现所期望的结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1