首页 / 专利库 / 电脑编程 / 临时别名 / 用于保护固件的方法和系统,以及计算机可读介质

用于保护固件的方法和系统,以及计算机可读介质

阅读:816发布:2020-05-08

专利汇可以提供用于保护固件的方法和系统,以及计算机可读介质专利检索,专利查询,专利分析的服务。并且本公开涉及用于保护 固件 的方法和系统以及计算机可读介质。所述方法包括生成用于固件的层的固件数字证书。所述固件操作计算 节点 的 硬件 部件。所述固件数字证书包括属性证书。所述固件数字证书包括固件的所述层的累积散列和临时值。所述累积散列包括固件的所述层的散列和所述固件的一个或多个更低层中的每一个的散列的级联。所述方法包括使用可信数据存储来认证固件的所述层。所述可信数据存储包括固件的预期层的二值图像以及包括硬件数字证书和所述固件数字证书的证书链。,下面是用于保护固件的方法和系统,以及计算机可读介质专利的具体信息内容。

1.一种用于保护固件的方法,包括:
生成用于固件的层的固件数字证书,其中所述固件操作计算节点硬件部件,其中所述固件数字证书包括属性证书,并且其中所述固件数字证书包括:
固件的所述层的累积散列,其中所述累积散列包括以下各项的级联:
固件的所述层的散列;和
所述固件的一个或多个更低层中的每一个的散列;以及
临时值;以及
使用可信数据存储来认证固件的所述层,所述可信数据存储包括固件的预期层的二值图像以及证书链,所述证书链包括硬件数字证书和所述固件数字证书。
2.如权利要求1所述的方法,其中用于所述固件的第一层的固件数字证书是利用用于所述硬件部件的硬件数字证书的私有密钥签名的。
3.如权利要求1所述的方法,包括利用所述硬件数字证书的私有密钥对所述固件数字证书进行签名。
4.如权利要求1所述的方法,其中所述固件数字证书包括所述固件的相应多个层的多个测量,其中每个测量包括所述固件的相应层的二值图像的散列。
5.如权利要求1所述的方法,其中所述固件数字证书是基于X.509标准生成的。
6.如权利要求1所述的方法,包括:
生成用于固件的附加层的附加固件数字证书,其中所述附加固件操作所述计算节点的所述硬件部件,其中所述附加固件数字证书由安装在固件的先前层中的私有密钥进行签名,并且其中,所述附加固件数字证书包括:
固件的所述附加层的附加散列;
附加累积散列,其中固件的所述附加层的附加散列被添加至所述附加累积散列;以及新密钥对,所述新密钥对具有安装至固件的所述附加层中的新私有密钥;以及使用所述可信数据存储来认证固件的所述附加层,所述可信数据存储包括固件的所述附加层的附加二值图像,其中所述证书链包括所述附加固件数字证书。
7.如权利要求6所述的方法,其中所述附加固件数字证书包括:
附加累积散列,所述附加累积散列包括以下各项的附加级联:
固件的所述层的加密散列;和
固件的所述附加层的附加加密散列;
所述临时值;以及
别名ID。
8.如权利要求6所述的方法,其中启动器将所述临时值提供给响应器。
9.一种用于保护固件的系统,包括:
处理器;以及
存储器部件,所述存储器部件存储有指令,所述指令使所述处理器:
生成用于固件的层的固件数字证书,其中所述固件操作计算节点的硬件部件,其中所述固件数字证书包括属性证书,并且其中所述固件数字证书包括:
固件的所述层的累积散列,其中所述累积散列包括以下各项的级联:
固件的所述层的散列;和
所述固件的一个或多个更低层中的每一个的散列;以及
临时值;以及
使用可信数据存储来认证固件的所述层,所述可信数据存储包括固件的预期层的二值图像以及证书链,所述证书链包括硬件数字证书和所述固件数字证书。
10.如权利要求9所述的系统,其中用于所述固件的第一层的固件数字证书是利用用于所述硬件部件的硬件数字证书的私有密钥签名的。
11.如权利要求9所述的系统,其中所述指令使所述处理器利用所述硬件数字证书的私有密钥对所述固件数字证书进行签名。
12.如权利要求9所述的系统,其中所述固件数字证书包括所述固件的相应多个层的多个测量,其中每个测量包括所述固件的相应层的二值图像的散列。
13.如权利要求9所述的系统,其中所述固件数字证书是基于X.509标准生成的。
14.如权利要求9所述的系统,其中所述存储器部件还存储有指令,所述指令使所述处理器:
生成用于固件的附加层的附加固件数字证书,其中所述附加固件操作所述计算节点的所述硬件部件,其中所述附加固件数字证书由安装在固件的先前层中的私有密钥进行签名,并且其中所述附加固件数字证书包括:
固件的所述附加层的附加散列;
附加累积散列,其中固件的所述附加层的附加散列被添加至所述附加累积散列;以及新密钥对,所述新密钥对具有安装至固件的所述附加层中的新私有密钥;以及使用所述可信数据存储来认证固件的所述附加层,所述可信数据存储包括固件的所述附加层的附加二值图像,其中所述证书链包括所述附加固件数字证书。
15.如权利要求14所述的系统,其中所述附加固件数字证书包括:
附加累积散列,所述附加累积散列包括以下各项的附加级联:
固件的所述层的加密散列;和
固件的所述附加层的附加加密散列;
所述临时值;以及
别名ID。
16.如权利要求14所述的系统,其中启动器将所述临时值提供给响应器。
17.一种存储有计算机可执行指令的非暂态、计算机可读介质,所述计算机可执行指令当被执行时使计算机:
生成用于固件的层的固件数字证书,其中所述固件操作计算节点的硬件部件,其中所述固件数字证书包括属性证书,并且其中所述固件数字证书包括:
固件的所述层的累积散列,其中所述累积散列包括以下各项的级联:
固件的所述层的散列;和
所述固件的一个或多个更低层中的每一个的散列;
所述固件的相应多个层的多个测量,其中每个测量包括所述固件的相应层的二值图像的散列;以及
临时值;以及
使用可信数据存储来认证固件的所述层,所述可信数据存储包括固件的预期层的二值图像以及证书链,所述证书链包括硬件数字证书和所述固件数字证书。
18.如权利要求17所述的非暂态、计算机可读介质,其中用于所述固件的第一层的固件数字证书是利用用于所述硬件部件的硬件数字证书的私有密钥签名的。
19.如权利要求17所述的非暂态、计算机可读介质,其中所述计算机可执行指令当被执行时使所述计算机利用所述硬件数字证书的私有密钥对所述固件数字证书进行签名。
20.如权利要求17所述的非暂态、计算机可读介质,其中所述固件数字证书是基于X.509标准生成的。

说明书全文

用于保护固件的方法和系统,以及计算机可读介质

技术领域

[0001] 本公开涉及计算系统,尤其涉及用于保护固件的方法、系统和计算机可读介质。

背景技术

[0002] 在计算节点计算机系统或主机的机箱或外壳内可以存在从温度传感器和电源到存储器(memory)模和处理器的数百个可插拔部件。在计算节点的机架或集群(cluster)内,可以存在数千个这种部件。然而,每个部件都可能表示一个安全漏洞,即,潜在的攻击向量(attack vector)。如果部件是伪造的或包含可能损害计算节点的恶意软件,则该部件可能是潜在的攻击向量。一种利用恶意软件感染部件的潜在方式是破坏用于操作该部件的固件。因此,识别已感染的部件对于阻止已感染部件的使用是有用的。发明内容
[0003] 根据本公开的一个方面,提供了一种用于保护固件的方法。该方法包括:生成用于固件的层的固件数字证书,其中所述固件操作计算节点的硬件部件,其中所述固件数字证书包括属性证书,并且其中所述固件数字证书包括:固件的所述层的累积散列,其中所述累积散列包括以下各项的级联:固件的所述层的散列;和所述固件的一个或多个更低层中的每一个的散列;以及,临时值;以及,使用可信数据存储来认证固件的所述层,所述可信数据存储包括固件的预期层的二值图像以及证书链,所述证书链包括硬件数字证书和所述固件数字证书。
[0004] 根据本公开的另一个方面,提供了一种用于保护固件的系统,包括:处理器;以及存储器部件,所述存储器部件存储有指令,所述指令使所述处理器:生成用于固件的层的固件数字证书,其中所述固件操作计算节点的硬件部件,其中所述固件数字证书包括属性证书,并且其中所述固件数字证书包括:固件的所述层的累积散列,其中所述累积散列包括以下各项的级联:固件的所述层的散列;和所述固件的一个或多个更低层中的每一个的散列;以及,临时值;以及,使用可信数据存储来认证固件的所述层,所述可信数据存储包括固件的预期层的二值图像以及证书链,所述证书链包括硬件数字证书和所述固件数字证书。
[0005] 根据本公开的另一个方面,提供了一种存储有计算机可执行指令的非暂态、计算机可读介质,所述计算机可执行指令当被执行时使计算机:生成用于固件的层的固件数字证书,其中所述固件操作计算节点的硬件部件,其中所述固件数字证书包括属性证书,并且其中所述固件数字证书包括:固件的所述层的累积散列,其中所述累积散列包括以下各项的级联:固件的所述层的散列;和所述固件的一个或多个更低层中的每一个的散列;所述固件的相应多个层的多个测量,其中每个测量包括所述固件的相应层的二值图像的散列;以及,临时值;以及,使用可信数据存储来认证固件的所述层,所述可信数据存储包括固件的预期层的二值图像以及证书链,所述证书链包括硬件数字证书和所述固件数字证书。附图说明
[0006] 当结合附图阅读时,从以下详细描述中可以理解本公开。依据行业标准实践,各种特征未按比例绘制。事实上,为了讨论的清楚,各种特征的尺寸可以被任意地增加或减少。
[0007] 关于以下附图描述了本申请的一些示例:
[0008] 图1是用于保护固件的示例系统。
[0009] 图2是用于保护固件的示例固件测量证书(firmware  measurement certificate)。
[0010] 图3是用于对具有固件的部件进行认证的消息流的示意图。
[0011] 图4是具有固件的一个可变层的示例证书链(certificate chain)。
[0012] 图5是具有固件的多个可变层的示例证书链。
[0013] 图6是用于保护响应器(responder)的固件的示例时间轴。
[0014] 图7是具有包含要被保护的固件的多个部件的示例计算节点。
[0015] 图8是用于生成固件测量证书的方法的过程流程图
[0016] 图9是包括存储有用于保护固件的代码的有形、非暂态计算机可读介质的示例系统。

具体实施方式

[0017] 认证的示例包括通用串行总线(USB)C型(Type C)认证,其使得计算节点(即主机)能够对兼容USB的部件进行认证。USB C型认证还形成了潜在的高速外围部件互连(PCIe)认证机制的基础,该PCIe认证机制允许对PCIe部件进行认证。USB C型和PCIe中的认证模式已被很好地理解并且能够被扩展至内部总线以及其他协议和互连。
[0018] 部件认证的目的是在部件中建立信任。上文讨论的认证机制可以查实(establish)部件来自已知且可信的制造商。然而,查实部件来自已知且可信的制造商并不意味着在该部件内运行的固件是正确且可靠的。固件是正确的可以意味着在部件内安装了正确的固件和固件的正确版本。固件是可靠的可以意味着固件可以被信任为不会违反固件正运行在其上的部件的安全。相应地,本公开的示例可以提供部件认证机制,该机制利用固件测量证书来测量和验证部件的固件。固件测量证书可以类似于数字证书。数字证书是可以由发布机构分发的电子文档,该电子文档确保计算机部件、计算节点等的可靠性。然而,代替确保固件的可靠性,固件测量证书也可以提供对加载在存储器中以供部件执行的固件的测量,并且确保测量是准确的。固件测量证书中的测量可以对照指示预期要安装在部件上的固件版本的记录而被确认。相应地,如果记录在固件测量证书中的所测量固件不匹配预期要安装在部件上的固件,则示例可以确定该部件是不可靠的。因此,通过使用固件测量证书,可以查实部件是否来自已知且可信的制造商以及部件是否正运行正确且可靠的固件。另外,示例可以允许固件被更新并且仍然利用固件测量证书来认证。
[0019] 图1是用于保护固件的示例系统100。系统100包括多个部件,启动器102通过一个或多个互连106与响应器104通信。启动器102可以是计算节点(未示出)的正准备使用响应器104来执行任务的部件。例如,启动器102可以是通用计算机处理器,并且响应器104可以是网络接口控制器(NIC)。相应地,通用计算机处理器启动器和NIC响应器可以连接至互连106(诸如PCIe互连),并且通过该互连进行通信。另外,NIC响应器可以连接至网络108。通用计算机处理器启动器可以正在准备调用NIC响应器以通过网络108将敏感信息发送至另一计算节点(未示出)。然而,在信任具有潜在的敏感信息的响应器104之前,启动器102可以使用认证服务128来确定响应器104是否是可靠的。在示例中,认证服务128可以是使用根据公共密钥基础设施(PKI)的数字证书来确定响应器104的可靠性的计算机应用。如果黑客或其他恶意用户具有控制,则响应器104可能不是可靠的。如果响应器104是伪造的硬件部件,或者如果在响应器104上的固件112是伪造的,则恶意用户可能具有对响应器的控制。
[0020] 启动器102和响应器104可以驻留在相同的计算节点上,并且因此通过一个互连106通信,该互连基于特定协议在启动器102与响应器104之间传递消息。互连106可以包括一个或多个互连,诸如USB、PCIe、Gen-Z等。启动器102和响应器104可以包括协议引擎126,该协议引擎可以确保以与相关互连106的协议一致的格式提供启动器102与响应器104之间的消息。在一些实施方式中,启动器102可以使用多个协议引擎126以处理与诸如基板管理控制器(BMC)和通用计算机处理器的不同种类的部件的互连。启动器102和响应器104还可以驻留在不同的计算节点上。在这种情况下,计算节点上的网络部件可以提供到网络108的连接,该网络可以包括因特网协议网络,诸如局域网、广域网以及因特网。
[0021] 为了确定响应器104是否是可靠的,启动器102可以通过以下方式来认证响应器104:确认响应器的部件标识(ID)证书110的公共-私有密钥配对以确定响应器104的硬件是真实的,即,不是伪造的。部件ID证书110可以是证实响应器104的制造商身份的公共密钥证书。证实响应器的制造商身份可以确保响应器104的硬件是可靠的。部件ID证书110可以被任何希望认证响应器104的实体(诸如启动器102)读取。在示例中,启动器102可以通过识别公共-私有密钥对116中的公共密钥并确定响应器104是否拥有与该公共密钥相对应的私有密钥来认证响应器104。如果响应器104拥有所述私有密钥,则启动器102可以确定响应器的硬件是可靠的。可以通过验证部件ID证书110或证书链是由可信方签名(sign)的来识别公共密钥。一旦公共密钥可以被信任,启动器102就可以质询(challenge)响应器104以证明拥有相应的私有密钥。该质询可以涉及使响应器104利用私有密钥对临时值(nonce)进行签名。临时值可以是相对较大的随机数,例如,仅使用一次的256位。启动器102还可以使用公共密钥将算法应用于临时值,并且使用所得的值确定由响应器104签名的临时值是否是利用相应的私有密钥签名的。如果是,则启动器102可以确定响应器的硬件是可靠的。
[0022] 另外,响应器104包括固件112,该固件可以是执行响应器104的操作的计算机应用。例如,NIC响应器可以操作物理网络,诸如以太网、无线网络或无线电网络。NIC响应器还可以从一个计算节点向另一个计算节点发送和接收数据包。另一示例响应器104可以是磁盘(disk)控制器。磁盘控制器响应器104可以根据存储装置(storage)设备协议(诸如串行高级技术附件(SATA))从硬盘驱动器读取数据或写入数据。固件112可以包括一个或多个层,其中每一层表示以指定序列执行的一个计算机应用。因此,响应器的操作通过以这种序列执行固件112的层而执行。在示例中,确定响应器104是否是可靠的还可以涉及确定固件112是否是可靠的。在这种示例中,启动器102可以通过确认用于固件112的一个或多个固件测量证书114来确定固件112是否是可靠的。
[0023] 固件测量证书114可以是属性证书,该属性证书是描述了发布者与持有者相关联的属性的数字文档。在示例中,由固件测量证书114描述的属性可以是对加载至存储器中以供执行的固件112的二值图像(binary image)的测量。属性证书可以与诸如部件ID证书110的公共密钥证书相关联。在这种方式中,固件测量证书114可以扩展用于认证响应器104的证书链。因此,在部件ID证书110可以描述响应器104的制造商身份的同时,固件测量证书114可以描述正被用于操作响应器104的固件112的属性。与部件ID证书110类似,固件测量证书114可以包括公共密钥132。公共密钥132可以是在对称加密方案中使用的数学上相关密钥的公共-私有密钥对的一部分。在示例中,设备标识符合成引擎(DICE)架构可以为每个固件测量证书114提供生成公共-私有密钥对的算法。另外,固件测量证书114可以包括累积散列(cumulative hash)118,其可以表示固件112当被加载至计算机存储器(未示出)中以供执行时的测量。在示例中,累积散列118可以与存储在数据库服务器134上的预期固件122的二值图像进行比较。在示例中,启动器102可以缓存来自数据库服务器134的测量,用于与固件测量证书114进行比较。预期固件122可以是在制造期间或在来自制造商的合法更新期间安装在响应器104上的固件的二值图像。因此,如果累积散列118不匹配预期固件122的累积散列,则固件112可能不是可靠的。相应地,启动器102可以拒绝使用响应器104。在示例中,固件测量证书114可以在初始化(上电(power-up))过程期间以及可能在其他时间由正被验证的部件(即响应器104)发布。相应地,固件测量证书114可以驻留在响应器104中,并且可以从响应器中取回(retrieve)。可替代地,固件测量证书114可以在从响应器104取回后被暂时存储在存储器中用于缓存。因为固件测量证书114已被签名,因此其可以被安全地缓存。任何篡改都将会使签名无效,并且因此使固件测量证书114无效。
[0024] 固件112的每一层可以与固件测量证书114中的一个相关联。在一些示例中,每个固件测量证书114可以包括唯一的公共密钥132。在这种示例中,可以在固件112的不同层之间创建固件测量证书114的链。换言之,固件112的层n可以证明下一层(层n+1)的公共密钥。进而,层n+1使用与已证明的公共密钥相关联的私有密钥来对层n+2的固件测量证书114进行签名。在其他示例中,单个私有-公共密钥对可以被用于响应器104上的固件112的所有层。在这种示例中,固件112的不同层可以通过更新用于固件112的每一层的固件测量证书
114的累积散列118而被链接(chained)在一起。相应地,为了验证固件112的两个层之间的链路(link),启动器102可以比较每一层的固件测量证书114的累积散列118。
[0025] 为了确保其可靠性,固件测量证书114可以由核心信任根(core root of trust)124生成。核心信任根124可以包括由响应器104的原始制造商安装的不可更新的硬件或固件,其可以被信任以创建表示固件112的实际测量的二值图像的固件测量证书114。在示例中,固件112可以包括多个层。每一层可以表示用于操作响应器104的计算机指令的一部分。
层可以以规定的序列执行。因为固件112可以包括多个层,每一层都可能易于受到恶意用户的损害(compromise)。因此,可以生成用于每一层的固件测量证书114。为了确保所生成的固件测量证书114的可靠性,用于每一层的固件测量证书114可以由已认证的前一层生成。
在响应器104具有固件112的多个层的示例中,核心信任根124可以生成表示固件112的第一层的第一固件测量证书114。随后,在执行固件112的第二层之前,第一层可以生成用于第二层的固件测量证书114,因此确保用于第二层的累积散列118准确地表示第二层的所测量二值图像。可替代地,核心信任根124可以生成可以被用于认证固件112的所有层的单个固件测量证书114。
[0026] 可替代地,单个固件测量证书114可以用于认证固件114的多个层。相应地,单个固件测量证书114可以包括测量136。测量136可以表示用于固件112的每一层的二值图像的散列(hash)。因此,固件112的直到固件112的由固件测量证书114所表示的层的每一层都可以存在一个测量136。例如,如果固件112包括层L0、L1和L2,则用于固件测量证书114的测量136可以包括三个散列:层L0、L1和L2的二值中的每一个对应一个散列。
[0027] 另外,固件测量证书114可以包括临时值138。临时值138可以确保测量136的新鲜度(freshness)并且确保核心信任根124被执行。临时值138可以在质询响应协议期间由启动器102提供给响应器104以进行认证。可替代地,启动器102可以将临时值138写入响应器104中的寄存器或特定存储器位置。由于固件测量证书114在上电或随后的重置时生成,因此临时值138可以被存储在持久性位置,诸如存储在响应器104中。要注意的是,对于响应器
104的第一次认证,可能不存在对于固件测量证书114可用的临时值138。然而,在第一次认证之后,启动器102可以提供可被写入响应器104中的持久性存储装置的临时值138。
[0028] 响应器104可以包括签名服务130和协议引擎126。签名服务130可以提供安全的存储。签名服务的示例包括可信平台模块和现场可编程阵列。可信平台模块可以是响应于可被用于安全地存储数据(包括诸如计算节点的计算平台的操作状态)的一组规定命令而进行操作的安全协处理器(co-processor)。现场可编程门阵列(FPGA)可以是可使用硬件描述语言进行编程以执行特定指令的集成电路。以这种方式,FPGA类似于处理器。然而相比之下,处理器可以另外地用复杂指令集进行预编程。
[0029] 图2是用于保护固件112的示例固件测量证书200。固件测量证书200可以包括发布者202和属性204。发布者202可以是该发布者的名称。该名称可以通过由发布给发布者的证书所签名的证书与公共密钥相关联,其中根是自签名的。根证书颁发机构密钥必须是已知的。没有比根证书颁发机构更高的颁发机构,根证书颁发机构表示对启动器102已知的信任锚(trust anchor)。当身份证书被用于网页浏览器时,网页浏览器提供者可以在释放信任锚用于一般用途之前将信任锚配置到网页浏览器中。类似地,启动器102可以具有信任锚,即,启动器的制造商所信任的一个或多个已知的根证书颁发机构。签名可以被应用于整个证书,但是是分开的结构(未示出)。在示例中,发布者202可以表示核心信任根124或固件112的特定层。属性204可以包括部件ID 206、累积散列208、测量210、别名ID 212和临时值
214。类似于身份证书的主题,别名ID 212可以是识别固件测量证书200的所有者的公共密钥。进一步地,别名ID 212可以由启动器102认证。在示例中,可以致使别名ID 212为对固件
112的更高层不可用。部件ID 206识别用于对层级(hierarchy)中的第一固件测量证书进行签名的公共-私有密钥对。用于固件112的多个层的固件测量证书200可以形成层级,其中每个固件测量证书200由用于固件112的先前层的固件测量证书200中的别名ID发布。部件ID 
206可以被用于对层级中的第一固件测量证书200进行签名,并且随后的固件测量证书200可以由先前的别名ID 212进行签名。进一步地,部件ID 206可能无法在核心信任根124之外进行访问。累积散列208可以是固件112的直到固件112的正被保护的层的所有层的加密散列表示。等式1示出了用于对固件112的层0到层n计算累积散列208的示例等式。在等式1中,H_表示累积散列函数,并且H表示已被美国国家标准技术研究院(NIST)批准的散列函数。另外,在等式1中,符号“‖”表示域或函数的级联(concatenation)。
[0030] H_(L0)=H(0||H(L0))
[0031] H_(Ln)=H(H_(Ln-1)||H(Ln))
[0032] 等式1
[0033] 如先前所述,固件测量证书200可以由不可更新的、可信的硬件或固件代码段生成,诸如在初始化响应器104的第一阶段运行的核心信任根124。核心信任根124可以通过取固件112的接下来一层或多层的加密散列来测量这些层。每个测量都可以对累积散列208有贡献,并且被包括在测量210中。在示例中,别名ID 212可以由核心信任根124生成以认证固件测量证书200。更具体地,别名ID 212可以基于累积散列208或测量210生成。别名ID 212可以用于对下一层进行签名。相应地,一旦初始化完成,就可以使得别名ID 212对响应器104内的固件112的下一层可用,并且将其用于对固件112的随后的下一层进行数字签名。例如,可以使得别名ID ID1对层L1可用。层L1可以测量层L2(其可以生成别名ID ID2),并且发布使用别名ID ID1签名的固件测量证书200。该签名证明了对层L2的累积散列208和测量
210、以及别名ID2的测量。然后可以使别名ID ID2对层L2可用。
[0034] 图3是用于对具有固件的部件进行认证的消息流示意图300。消息流示意图300可以表示认证启动器302与响应器304之间的消息流。启动器302可以表示诸如启动器102的部件,并且可以包括认证服务306和协议引擎308。协议引擎308可以基于启动器302与响应器304之间的互连来转化启动器302与响应器304之间的消息。响应器304可以表示具有固件的部件,诸如响应器104。消息310表示来自启动器302的对响应器的证书链(或多个链)的请求。消息312表示由响应器304响应于该请求发送至启动器302的证书链。响应于接收到响应器的证书链,启动器302可以确认证书链中的一个或多个并且选择要被响应器304认证的公共密钥。公共密钥可以从有效证书链的叶证书中选择。
[0035] 消息314可以表示从启动器302到响应器304的认证请求。认证请求可以由大的随机临时值和要被认证的所选公共密钥构成。通常情况下,要被认证的公共密钥被识别,因为响应器304可以具有用于不同目的的多个公共-私有密钥对。
[0036] 一旦认证请求被接收,响应器的协议引擎就可以从认证请求中提取临时值和要被认证的公共密钥的身份。另外,响应器的签名服务可以对临时值和利用与所识别的公共密钥相对应的私有密钥内部生成的随机盐的级联进行签名。盐的目的是保护免受所选择的纯文本攻击,所以其对于启动器应当是不可预测的。消息316可以表示响应器对认证请求的响应,该响应包含盐和对临时值和盐的级联的签名。
[0037] 一旦对认证请求的响应被接收,启动器302就可以验证临时值和盐已经由与叶证书中的公共密钥相对应的私有密钥签名。如果验证成功,则响应器304已被认证。
[0038] 图4是具有固件112的一个可变层的示例证书链400。证书链400包括静态证书402和固件测量证书404。静态证书402可以是证实了响应器104的制造商身份的身份证书。身份证书可以包括发布者和主题。如先前所述,发布者可以是与公共密钥相关联的名称。这种关联由先前已经由证书链中的更高颁发机构发布给发布者的身份证书所创建。主题可以表示身份证书的所有者。静态证书402可以包括根证书406、中间证书408、和部件ID证书410。身份证书可以以树结构的形式发布。相应地,根证书406、中间证书408、和部件ID证书410可以表示这种结构,其中根证书406表示树的顶部。根证书406可以由相同证书颁发机构CA0发布和拥有。在诸如证书链400的证书链中,根证书406的私有密钥可以被用于对中间证书408的第一个进行签名。随后的证书可以因此由之前的证书来签名。以这种方式,中间证书408从根证书406得到其可靠性。
[0039] 部件ID证书410可以表示静态证书402的树结构中的叶,其中发布者CAn可以表示最后一个中间证书408的所有者。部件ID证书410可以在制造期间被插入至响应器104中,从而证明响应器的身份。部件的公共-私有密钥对也可以在制造期间创建和安装,其中私有密钥被安全地存储在响应器104内。相反,固件测量证书404可以动态生成以包括固件112的所有层的累积散列作为属性。另外,固件测量证书404可以由部件的私有密钥签名。身份证书和属性证书可以基于特定标准生成,诸如X.509标准。在X.509标准下,存在可以被设置用于这些证书的位,被称为keyCertSign位。keyCertSign位可以表明公共密钥被用于验证公共密钥证书上的签名。然而,如果恶意用户捕获了部件ID证书410的私有密钥,则使得keyCertSign位设置可能使恶意用户能够组建伪造的证书颁发机构,从而从根CA得到信任。使用伪造证书颁发机构可以使得恶意用户能够产生用于伪造的部件或固件的合法证书。由此,在示例中,keyCertSign位可以在部件ID证书410和固件测量证书404中被清除。
[0040] 一旦生成,固件测量证书404就可以作为叶证书被附接至证书链400,这使得认证启动器102可访问固件测量证书404。在示例中,叶证书(即固件测量证书404)是已认证的。更具体地,在由部件ID密钥发布的属性证书中的别名ID密钥是已认证的。部件ID不是直接认证的。而是,部件ID是发布属性证书(即固件测量证书404)的属性颁发机构,类似于证书颁发机构发布身份证书的方式。因此,如果固件测量证书404的认证是成功的,则响应器的身份被验证。相应地,认证可以以固件测量证书404中的属性、响应器104启动的固件112的散列、或累积散列208的形式提供已签名的证实。相应地,响应器104可以被确保是真实的,即,来自真正的制造商。进一步地,累积散列H_(L1)或测量H(L1)可以对照数据库134的预期固件122来确认。
[0041] 如先前所述,固件112可以在多个层中实施。除了固件112的层以外,响应器104的硬件还可以表示基本层,本文中称为层L0。在示例中,层L0可以被实施为不可变固件和特定硬件逻辑的组合。硬件逻辑可以实施与由可信平台模块(TPM)以一组有限的供应商特定命令执行的那些安全操作类似的安全操作。层L0可以为固件112的所有层提供用于添加至累积散列的接口。进一步地,层L0可以提供用于生成固件测量证书404的接口。启动器102对固件测量证书404的别名ID属性中的密钥进行认证。出于此目的,动态密钥被生成并安装至层的固件测量证书404中。在示例中,层L0可以表示可信的不可变层。层L0可以被称为不可变的,因为L0不可以被改变。层L0不可以被改变,因为该层包含或可以计算用于部件ID 206的私有密钥,本文中称为CIDK。作为层L0的补充,由固件测量证书404所表示的固件112在本文中称为层L1。在示例中,可以使得用于部件ID 206的私有密钥对层L1或更高层不可用。
[0042] 图5是具有固件112的多个可变层的示例证书链500。证书链500包括静态证书502和多个固件测量证书504。静态证书502可以是证实响应器104的制造商身份的身份证书。静态证书502可以包括根证书506、中间证书508、和部件ID证书510。根证书506可以由相同证书颁发机构CA0发布和拥有。在证书链500中,根证书506的私有密钥可以用于对中间证书508的第一个进行签名。随后的证书可以因此由之前的证书来签名。以这种方式,中间证书
508从根证书506得到其可靠性。根证书颁发机构通常是最可信的,离其越远,信任通常被认为越弱并且用于维持密钥的标准通常更加宽松。
[0043] 部件ID证书510可以表示静态证书502的树结构中的叶,其中发布者CAn可以表示最后一个中间证书508的所有者。部件ID证书510可以在制造期间被插入至响应器104中,从而证明响应器的身份。部件的公共-私有密钥对也可以在制造期间创建和安装,其中私有密钥被安全地存储在响应器104内。相反,固件测量证书504可以动态生成以包括固件112的所有层的累积散列作为属性。
[0044] 在示例中,固件112可以包括多个层。相应地,可以生成用于每一层的固件测量证书504。例如,可以生成用于固件层L1、L2和Ln的固件测量证书504-1、504-2、504-n。固件测量证书504-1到504-n可以表示层L1到层Ln。在示例中,固件测量证书504-1到504-n可以包括由固件测量证书504表示的固件层的加密散列,而不是累积散列。对于特定响应器104的所有固件测量证书504,部件ID可以是相同的值。对于响应器104的所有固件测量证书504,临时值也可以是相同的。对于每次下电重启(power-cycle)或重置,可以被用于作为固件测量证书504的新临时值是动态生成的。临时值可以在下电重启或重置之前由启动器102提供。临时值可以由外部实体提供以保证方案的安全性。这可以确保固件测量证书504随着每一次重置或下电重启而生成,并且核心信任根124正常运行。
[0045] 新的固件测量证书504可以附加至证书链500的末端。新的密钥IDn+1可以被安装至层Ln+1中并且对层Ln+1到Ln+m可用,并且旧的密钥ID1对层Ln+1和更高层不可用。这种方式可以通过任意数量的层而持续。每个新的固件测量证书504可以具有其自己的对正被证明的固件层不可访问的公共-私有密钥对。这意味着任何固件层都不能篡改由先前层所发布的固件测量证书504。因此,如果固件112的层是有错误的或不可靠的,则该有错误的或不可靠的层可能无法更改在用于该层的固件测量证书504中记录的测量属性。
[0046] 在示例中,生成用于固件112的每一层的单独的固件测量证书504可以提供一些优点。例如,如果在初始化期间除最低层之外的每一层被动态地选择并安装至动态的存储器位置中,则只能在启动下一个中间更高层之前测量下一个中间更高层。当更低层未重新启动而更高层或最后一层多次重新启动或更新时,生成用于每一层的固件测量证书504也可以是有用的。
[0047] 图6是用于保护响应器的固件的示例时间轴600。在时间轴600中,响应器104由层L0-L4表示。层L0可以表示具有部件ID证书110的响应器104的硬件。层L1-L4可以表示响应器104的固件112。在示例中,层L1-L4可以表示固件112的多个层或独立的代码块。与可以以规定的序列执行的固件层相反,独立的代码块可以由响应器无依赖性地执行。时间轴600可以包括时间点t0、t1、t2和t3。时间t0可以表示当响应器104在上电时被初始化的时间。在时间轴600的时间t0处,层L0可以创建用于层L1和L2的固件测量证书114。时间t1可以表示在响应器104已经初始化之后并且在响应器104开始操作之前的时间。在时间t1处,启动器102可以对响应器的层L0到L2进行认证。
[0048] 时间t2可以表示当操作系统驱动器将固件112加载至响应器104时的时间。在时间t2处,层L2可以生成用于层L3和L4的固件测量证书114。时间t3可以表示当响应器已经开始执行固件112时的时间。在时间t3处,启动器102可以对响应器104的层L3和L4进行认证。
[0049] 图7是具有包含要被保护的固件的多个部件的示例计算节点700。固件可以是操作计算节点700的各种部件的计算机指令。部件可以表示上文描述的启动器102或响应器104。在示例中,一些部件可以由计算节点700的制造商安装。可替代地,一些部件可以是现场可替换的,这意味着可以在购买计算节点700之后通过在计算节点700断电时将部件安装在计算节点700上来替换部件。另外,一些部件可以是热插拔的。是热可插拔的意味着可以在计算节点700通电的同时将部件物理地连接至计算节点700的互连。计算节点700可以包括具有一定范围的功能(capability)的部件,包括几乎没有处理能的部件(诸如传感器702、扇704和电源706)以及具有复杂处理功能的部件(诸如通用处理器708)。计算节点700的附加部件可以包括例如Gen-Z部件710、Gen-Z开关712、USB部件714、基板管理控制器(BMC)
716、BMC软件718、多个网络接口控制器(NIC)720、存储器722、串行外围设备互连(SPI)开关
724。SPI开关724可以处于用于访问只读存储器(ROM)的总线中。SPI开关724可以使得BMC 
716能够检查通用处理器708是否正在加载正确的固件。例如,SPI开关724可以使得BMC 716能够在BIOS 726可由处理器708加载之前读取基本输入输出系统(BIOS)726。如果BIOS 726是正确的,则BMC 716可以将开关掷为允许处理器708加载BIOS 726。SPI开关724还可以使得BMC 716能够在SPI开关724上恢复或更新固件。进一步地,部件可以包括BIOS 726、可信平台模块728、PCIe部件730、串行附接SCSI(SAS)/SATA控制器732、SATA部件734以及SAS部件736。这些部件还可以在计算节点700内通过一系列互连连接,所述互连包括内部集成电路(I2C)、PCIe、USB、双数据速率(DDR)、高带宽存储器(HBM)和Gen-Z。示例计算节点700的部件可以有所不同,包括更少或附加的部件。例如,计算节点700可以包括多个处理器708或平台控制器中枢。进一步地,计算节点700可以是在机架和集群规模系统中的多个节点中的一个。
[0050] 另外,系统700的部件中的一个或多个可以包括固件测量证书,其可以用于认证用于计算节点部件的固件是正确的和可靠的。部件的硬件和固件可以响应于来自认证启动器(本文也称为启动器102)的请求而被认证。启动器的示例可以包括在计算节点700上执行的软件或固件。这种软件可以包括计算节点700的操作系统(未示出)。操作系统可以是协调计算机指令在处理器708上的执行的一个或多个计算机应用,并且引起(invoke)对计算节点700的各种部件的固件的调用。启动器可以通过执行对认证响应器(本文也称为响应器104)的一系列调用而认证计算机部件。响应器104是指启动器102试图认证的部件。处理器708可以表示示例响应器104,该处理器包括可以由启动器102使用以认证处理器708的固件的固件测量证书(FMC)746。
[0051] 在示例中,启动器102可以在计算节点700之外、在机架、集群或结构管理系统(fabric management system)上运行。从计算节点700之外发起(initiate)的认证可以通过Gen-Z互连740或IP网络742、744发生。通过IP网络742的认证可以经由BMC 716在带外(out-of-band)进行。另外,通过IP网络744的认证可以经由处理器708在带内(in-band)进行。
[0052] 图8是用于生成固件测量证书的方法800的过程流程图。在框802处,计算节点的具有固件的部件可以通电或开始重新初始化。该部件可以是响应器,诸如响应器104。示例响应器104可以包括计算节点700的任何部件,诸如处理器708、Gen-Z部件710等等。出于本讨论的目的,将计算节点700的PCIe部件730中的一个用作示例部件。PCIe部件730可以在计算节点700的下电重启期间通电。可替代地,PCIe部件730可以在当计算节点700退出低功率或重置状态时通电。诸如临时值138的临时值也可以从持久性存储装置中读取。在示例中,临时值138可以由启动器102提供。例如,临时值138可以从先前的认证请求(例如,认证请求314)中提供。在这种示例中,响应器104可以将临时值138存储在响应器104内的持久性存储装置中。在另一示例中,启动器102可以将临时值138写入响应器104中的寄存器中。例如,诸如PCIe部件730等PCIe设备可以显露可以通过PCIe总线读取和写入的寄存器。存储在这种寄存器中的值可以使临时值138在重置和下电重启期间保持不变。
[0053] 另外,PCIe部件730的固件112的第一层L0可以被加载至存储器中。如先前所述,PCIe部件730可以是关于图1所描述的响应器104的示例。PCIe部件730可以在框802处由计算节点700的操作系统通电。方法800可以进一步由PCIe部件730的核心信任根(诸如核心信任根124)执行。
[0054] 在框804处,可以生成用于PCIe部件730的固件112的下一层的散列。例如,在通电之后,可以表示不可变核心信任根124的层L0可以测量固件112的层L1。该散列可以是层L1的二值图像的NIST批准的散列。
[0055] 在框806处,可以生成用于固件112的下一层的固件测量证书,诸如固件测量证书200。例如,核心信任根124可以生成用于层L1的固件测量证书200。固件测量证书200可以包括累积散列208或测量210之一、发布者202、部件ID 206、和别名ID 212。发布者202和部件ID 206可以是PCIe部件730的部件ID。PCIe部件730的部件ID可以被认为是层L0,该层L0可以被认为发布固件测量证书200。别名ID 212可以是识别固件测量证书200的所有者的公共密钥。在通电后,固件测量证书200的所有者可以是下一层,层L1。累积散列208或测量210可以基于在框804处生成的散列来被填充(populate)。累积散列208可以基于等式1确定。可替代地,测量210可以用所生成的散列填充。另外,用于固件测量证书200的keyCertSign位可以被清除以防止恶意用户创建伪造的证书颁发机构。
[0056] 在示例中,固件112可以包括一个或多个层。如此,可以针对固件112的每个随后层重复框804-806。然而,代替由核心信任根124执行,框804-806可以由固件112的当前层执行。因此,层L0可以生成用于层L1的固件测量证书200。层L1可以生成用于层L2的固件测量证书,以此类推。如果固件112包括一个层,方法800可以移动到框808。
[0057] 在框808处,可以执行与所生成的固件测量证书200相关联的固件112的层。执行固件112可以涉及操作PCIe部件730。
[0058] 在框810处,诸如启动器102的启动器可以对在框806处生成的固件测量证书200进行认证。该认证可以如关于图3所描述的那样来执行。如果认证失败,则方法800可以结束。然而,如果固件测量证书200是已认证的,则固件112的方法800的执行可以继续。进一步地,在一些场景下,相同的固件测量证书200可以被多次认证。如果计算节点700尚未进行下电重启,但是固件112的认证被请求,则可以执行多次认证。另外,在认证期间由启动器102提供的临时值可以被写入PCIe部件730。
[0059] 在示例中,在固件112的执行之后,可以添加附加固件测量证书200。如果操作系统在OS已启动后不久将附加固件112加载至PCIe部件730中,可以生成附加固件测量证书200。如果操作系统更新了固件112,则也可以生成附加固件测量证书200。如此,方法可以移动到框804。在单个固件测量证书200用于固件112的所有层的情况下,可以更新固件测量证书
200而不是添加新的固件测量证书200。
[0060] 在一些示例中,可以在框804-810处生成多个固件证书200,固件112的每一层对应一个固件证书。在这种示例中,每个固件测量证书200的部件ID 206可以是PCIe部件730的部件ID。这些固件测量证书200的发布者202可以是固件112的前一层。别名ID 212可以是识别固件112的当前层的公共密钥。临时值可以是由启动器102存储在PCIe部件730中的临时值。在多个固件测量证书200用于一个部件(诸如PCIe部件730)的示例中,可以填充累积散列208,而不是测量210。如关于等式1所描述的,累积散列208可以是先前层的累积散列和当前层的二值图像的NIST批准的散列函数的级联。
[0061] 在一些示例中,可以生成表示固件112的所有层的单个固件测量证书200。在这种示例中,代替生成用于每一层的新固件测量证书200,可以利用更新的签名发布新固件测量证书200。这种新的固件测量证书200可以替换先前发布的固件测量证书200。这种新的固件测量证书200可以由固件112的当前层生成。在新的固件测量证书200中,部件ID 206和临时值214可以不被改变。然而,发布者202可以是固件112的当前层。别名ID 212可以是识别固件112的下一层的公共密钥。在单个固件测量证书200用于PCIe部件730的示例中,可以填充测量210,而不是累积散列208。相应地,来自先前发布的固件测量证书200的测量210可以利用用于固件112的下一层的新的测量210来补充。测量210可以是固件112的下一层的二值图像的NIST批准的散列函数。
[0062] 应当理解,图8的过程流程图不旨在表明方法800在所有情况下都包括图8中所示的所有框。进一步地,取决于具体实施方式的细节,任何数量的附加框可以被包括在方法800内。另外,应当理解,图8的过程流程图不旨在表明方法800在所有情况下仅以图8中所示的框所指示的顺序来进行。例如,框804可以被重新排列以在框802之前发生。
[0063] 图9是示例系统900,包括存储有用于保护固件的代码的有形、非暂态计算机可读介质902。有形、非暂态计算机可读介质通常由附图标记902来指代。有形、非暂态计算机可读介质902可以对应于存储有计算机实施的指令(诸如编程代码等)的任何典型的计算机存储器。例如,有形、非暂态计算机可读介质902可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储装置、磁盘存储装置或其他磁存储部件,或可用于以指令或数据结构的形式承载或存储所期望的程序代码并且可由计算机访问的任何其他介质。如本文所使用的磁盘(disk)和光碟(disc)包括致密盘(CD)、激光盘、光盘(optical disc)、数字通用盘(DVD)、软盘和Blu-光碟,其中磁盘通常磁性地复制数据,而光盘利用激光光学地复制数据。
[0064] 有形、非暂态计算机可读介质902可以由处理器904通过计算机总线906访问。处理器904可以是执行系统900中的操作系统的中央处理单元。有形、非暂态计算机可读介质902的区域908存储生成用于固件的层的固件数字证书的计算机可执行指令,其中固件操作计算节点的硬件部件,其中固件数字证书包括属性证书,并且其中固件数字证书包括固件的层的累积散列和临时值,其中累积散列包括固件的层的散列和固件的一个或多个更低层中的每一个的散列的级联。有形、非暂态计算机可读介质的区域910存储使用可信数据存储来认证固件的层的计算机可执行指令,可信数据存储包括固件的预期层的二值图像和包括硬件数字证书和固件数字证书的证书链。
[0065] 尽管被示出为连续的框,但是软件部件可以以任何顺序或配置来存储。例如,如果有形、非暂态计算机可读介质902是硬盘驱动器,则软件部件可以存储在非连续的或甚至重叠的分区中。
[0066] 上述描述出于解释的目的使用特定术语以提供对本公开的透彻理解。然而,对本领域技术人员显而易见的是,为了实践本文所描述的系统和方法,不需要具体细节。上述具体示例的描述出于说明和描述的目的呈现。其不旨在详尽或将本公开限制为所描述的精确形式。显然,鉴于以上教导的许多修改和变型是可能的。示例被展示和描述以便最好地解释本公开和实际应用的原理,从而使得本领域其他技术人员能够最好地利用本公开和具有适用于考虑到的特定用途的各种修改的各种示例。本公开的范围旨在由以下权利要求书及其等同物所限定。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈