本文来自 Intel SGX Explained
依赖于可信处理器的系统的安全性取决于软件认证。由可信硬件建立的隔离容器中运行的软件可以请求硬件对一小段认证数据进行签名,生成认证签名。除了认证数据之外,签名的消息还包括一个唯一标识容器内软件的测量值。因此,认证签名可以用来说服验证者,认证数据是由特定的软件生成的,该软件托管在由可信硬件从外部干扰隔离的容器内。
在本节中讨论的每个硬件平台都使用略有不同的软件认证方案。平台的差异在于在隔离容器内执行的软件数量、提供给容器内软件的隔离保证以及获取容器测量的过程。每个可信硬件平台的威胁模型和安全属性直接源于上述设计选择,因此,对认证的良好理解是讨论现有平台之间差异的先决条件。
软件认证可以与密钥协商协议结合使用,因为软件认证提供了密钥协商协议所需的身份验证。由此产生的协议可以向验证者保证它已与托管在由可信硬件创建的隔离容器内的特定软件建立了共享密钥。下一段概述了增强的协议,以Diffie-Hellman密钥交换(DKE)[43]作为密钥交换协议的示例。
验证者开始执行密钥交换协议,并将第一个消息gA发送给安全容器内的软件。容器内的软件生成第二个密钥交换消息g
B,并要求可信硬件认证两个密钥交换消息的密码哈希值h(gA||gB)。验证者接收第二个密钥交换消息和认证签名,并通过检查下图所示的信任链中的所有签名来对安全容器内的软件进行身份验证。
上图表明了软件认证中的信任链由制造商密钥作为根开始,该密钥为安全处理器的认证密钥生成背书证书。处理器使用认证密钥生成认证签名,该签名包含容器的密码哈希和容器内部软件生成的消息。
在软件认证中使用的信任链以硬件制造商拥有的签名密钥为根,验证者必须对其进行信任。制造商充当证书颁发机构(CA,§ 3.2.1),为其生产的每个安全处理器提供一个唯一的认证密钥,用于生成认证签名。制造商还为每个安全处理器的认证密钥颁发背书证书。该证书表示该密钥用于软件认证。认证策略通常规定,至少认证密钥的私钥应存储在防篡改硬件中,并且仅用于生成认证签名。
安全处理器通过存储容器内加载的代码和数据的密码哈希来标识每个隔离容器。当处理器被要求对一段认证数据进行签名时,它使用与容器相关联的密码哈希作为认证签名中的测量值。验证者在使用认证密钥的背书证书验证处理器的认证密钥之后,确保签名有效,并验证签名中的测量值属于其期望与之通信的软件。
通过检查认证链中的所有链接,验证者对密钥交换中的另一方进行了身份验证,并确保它现在与期望的运行在受信任硬件上的隔离容器中的软件共享一个密钥。
用于标识安全容器内部软件的测量值始终使用安全散列算法计算。可信硬件设计在其安全散列函数选择和提供给散列函数的数据方面存在差异。然而,所有设计都共享一个原则,即构建安全容器的每一步都会向其测量散列中添加数据。
软件认证背后的理念是计算机的所有者可以在安全容器中加载任何她希望的软件。然而,假定计算机所有者有动机参与一个分布式系统,其中通过软件认证对她构建的安全容器进行身份验证。如果不需要进行软件认证,计算机所有者可以构建任何没有约束的容器,这将使得无法对容器内部软件的安全属性进行推理。
根据上述论证,基于软件认证的可信硬件设计必须假设每个容器都参与软件认证,并且远程方将拒绝与其报告的测量值与分布式系统作者设置的预期值不匹配的容器进行交互。
例如,云基础设施提供商应该能够使用由可信硬件提供的安全容器在其计算机上运行任何所需的软件。然而,该提供商通过向客户租用其基础设施来赚钱。如果安全意识强的客户只愿意租用由可信硬件提供的容器,并使用软件认证对其使用的容器进行身份验证,那么云提供商将有强烈的经济激励按照客户的规格构建容器,以便容器通过软件认证。
容器的测量值是使用安全散列算法计算的,因此构建与预期测量相匹配的容器的唯一方法是按照分布式系统作者指定的确切步骤序列进行操作。安全散列函数的加密属性保证,如果计算机所有者在任何方面偏离指定的步骤序列,所创建的容器的测量值将与分布式系统作者预期的值不匹配,因此容器将被软件认证过程拒绝。
因此,宣称可信硬件设计的测量方案可以保证安全容器中的某个属性具有特定的值是有意义的。这个短语的确切含义是属性的值决定用于计算容器测量值的数据,因此预期的测量散列实际上为属性指定了预期值。在正确使用软件认证的分布式系统中,所有容器都将具有给定属性的所需值。
例如,为云基础设施设计的可信硬件使用的测量方案应该保证容器的内存是使用客户内容进行初始化的,通常称为映像(image)。