Innovative Technology for CPU Based Attestation and Sealing是Intel SGX技术的官方论文,本文将翻译这篇文章。 SGX技术提供了enclave环境,当今比较火的机密计算技术一般就是基于SGX技术来实现,当然也有其他的可以提供enclave环境的技术,例如TrustZone等,但是SGX应用更多,且相比之下更安全些。
本文中形似(注:···)的批注是我的批注,而非原文
Intel正在开发Intel®Software Guard Extensions(Intel®SGX)技术,这是Intel®架构的扩展,用于生成受保护的软件容器。容器被称为飞地。在飞地内部,软件的代码、数据和堆栈受到硬件强制访问控制策略的保护,这些策略可以防止对飞地内容的攻击。在一个软件和服务通过互联网部署的时代(注:也就是云计算时代),关键是能够通过有线或空中安全地远程提供飞地,有把握地知道机密受到保护,并能够将机密保存在非易失性存储器中以备将来使用。 本文描述了允许向飞地提供机密(注:应该指用户想要保护的数据)的技术组件。这些组件包括用于对在飞地内运行的软件生成一个基于硬件的证明的方法,以及用于飞地软件密封机密并将其导出到飞地之外(例如将其存储在非易失性存储器中)的方法,以便只有相同的飞地软件能够将其解封回其原始形式。
在一个软件和服务通过互联网部署的时代,Intel®Software Guard Extensions(Intel®SGX)和Extensions to Intel®Architecture)使服务提供商能够通过有线或无线提供具有敏感内容的应用程序,并确信其机密得到了适当保护。为了做到这一点,服务提供者必须能够确切地知道远程平台上运行的是什么软件,以及它在哪个环境中执行。
启用Intel®SGX的软件不附带敏感数据(注:指用户的软件,但是还未开始使用,软件可以开辟enclave)。在这个软件被安装后,它向服务提供商通信,以便将数据远程提供给飞地。然后软件对数据进行加密并存储以备将来使用。 图1阐明了软件完成此过程所需的步骤。
最后,当平台所有者计划转移平台所有权时,应使其所有权期间可用的秘密不可访问。 Intel®SGX包含一个用户拥有的特殊持久值,当更改该值时,将更改软件可用的所有密钥。
希望向远程平台提供秘密的服务提供者必须事先知道远程平台的保护策略满足要部署的秘密的保护要求。 根据Intel®SGX的安全模型[1],负责保护机密的可信计算基础(TCB)包括处理器的固件和硬件,仅包括飞地内的软件。 一个Enclave Writer可以使用Intel®SGX的专用sealing和attestation组件,这些组件支持以下安全模型断言,以向服务提供商证明机密将根据预期的安全级别受到保护:
Intel®SGX体系结构[1]提供了硬件指令EREPORT和EGETKEY,以支持认证attestation和密封sealing。接受SGX安全模式的秘密拥有者可以依靠这些指示向负责秘密的TCB报告。 为了创建飞地环境,不受信任的软件使用Intel®SGX指令。这些指令还计算已启动环境的加密Measurement。本文第2节进一步描述了这些过程。 为了启用attestation和sealing,硬件提供了两个附加指令EREPORT和EGETKEY。 EREPORT指令提供了一个证据结构,该结构以加密的方式绑定到硬件上,以供认证验证者使用。 EGETKEY为Enclave软件提供了访问认证和密封过程中使用的“Report”和“Seal”密钥的权限。 第3节讨论了如何使用这些指令来提供飞地的证明,第4节讨论了如何保护传递给飞地的秘密。 在第5节中,我们简要回顾了在平台中建立远程信任的相关工作。
Intel®SGX架构负责建立用于认证和密封的identities。对于每个飞地,它提供两个measurement寄存器,MRENCLAVE和MRSIGNER;MRENCLAVE提供了所构造的飞地代码和数据的identity,MRSIGNER提供了飞地权限的identity。这些值在构建飞地时被记录,并在飞地执行开始前最终确定。只有TCB有权写入这些寄存器,以确保在认证和密封时能够准确反映identities。
“Enclave Identity”是MRENCLAVE的值,它是内部日志的SHA-256[2]摘要,记录了在构建Enclave时所做的所有活动[1]。 日志由以下信息组成:
一旦通过EINIT指令完成了enclave初始化,就不再对MRENCLAVE进行更新。 最后MRENCLAVE的值是一个SHA-256摘要,它以加密方式标识放置在飞地中的代码、数据和堆栈、飞地页的放置顺序和位置,以及每个页的安全属性。对这些变量的任何更改都将导致MRENCLAVE中的值不同。 (注:MRENCLAVE中存的应该就是Enclave Measurement)
该飞地有第二个用于数据保护的identity,称为“Sealing Identity”。Sealing Identity包括“Sealing Authority”、产品ID和版本号。 Sealing Authority是在分发前对飞地进行签名的实体,通常是飞地构建者。飞地构建者向硬件提供一个RSA签名的飞地证书(SIGSTRUCT),该证书包含Enclave Identity,MRENCLAVE和密封机构的公钥。 硬件使用证书中包含的公钥检查证书上的签名,然后将测量的MRENCLAVE值与签名版本进行比较。如果这些检查通过,则在MRSIGNER寄存器中存储封签机构的公钥的哈希值。需要注意的是,如果多个飞地由同一封签机构签名,它们都将具有相同的MRSIGNER值。如第4节所示,Sealing Identity的值可用于封存数据,在某种程度上,来自同一封存机构的飞地(例如,同一飞地的不同版本)可以共享和迁移其封存数据。
证明是证明一个软件已经在平台上被正确实例化的过程。 在Intel®SGX中,这是一种机制,通过这种机制,另一方可以获得信任,即正确的软件安全地运行在启用的平台上的飞地内。 为此,Intel®SGX体系结构生成一个attestation assertion(认证断言)(如图2所示),它传达以下信息:
Intel®SGX体系结构提供了一种机制,用于在运行在同一平台上的两个飞地(本地认证)之间创建authenticated assertion,以及另一种机制,用于扩展本地认证,以向平台外的第三方提供断言(远程认证)。(注:SGX提供两种机制,本地证明和远程证明) 最后,为了在系统中获得最大的可信度,认证密钥应该只被绑定到一个特定的平台TCB上。如果平台TCB发生变化,例如通过微码更新,应替换平台认证密钥,以正确地代表TCB的可信度。
应用程序开发人员可能希望多个飞地相互协作来来执行一些更复杂的功能。为了实现这个,他们需要一种机制来让一个enclave证明另一个。为了这个目的,SGX提供了EREPORT指令。 当这个指令被一个飞地调用时,EREPORT产生一个签名的结构,称为REPORT。REPORT结构包括飞地的两个identities,与飞地相关联的属性(属性标识模式和在ECREATE期间建立的其他属性),硬件TCB的可信度,以及飞地开发者希望传递给目标飞地的额外信息,以及一个消息认证码(MAC)标记。目标飞地将验证MAC,允许它确定创建REPORT的飞地是否在同一平台上运行。 MAC被一个称作“Report Key”的密钥产生。如表1所示,Report Key只被目标飞地和EREPORT指令知道。目标飞地可以得到他自己的Report Key通过EGETKEY指令,EGETKEY为飞地提供一系列密钥,包括Report Key,可用于对称加密和身份验证。目标飞地使用Report Key通过REPORT结构重新计算MAC,核实这个REPORT是由证明(reporting)飞地产生的。Intel®SGX架构使用AES128-CMAC [3]作为MAC算法。
每个REPORT结构也包括一个256bit的用户数据字段。这个字段将enclave内的数据绑定到enclave的identity(如REPORT中所述)。该字段可用于使用辅助数据扩展REPORT,通过将其填充为辅助数据的哈希摘要,然后该摘要与REPORT一起提供。使用用户数据字段使飞地能够构建更高层次的协议,在自身和另一个实体之间形成安全通道。 例如,通过交换在飞地内使用双方同意的参数随机生成的公共Diffie-Hellman密钥的报告,飞地可以生成一个经过验证的共享秘密,并使用它来保护它们之间的进一步通信。Intel®体系结构支持通过可供飞地软件使用的RDRAND指令[4]生成真正的随机值。 下图显示了一个示例流程,说明两个飞地在同一平台上如何相互验证,并验证对方在同一平台上的一个飞地内运行,因此符合Intel®SGX的安全模型。
用于平台内飞地认证的验证机制使用对称密钥系统,其中只有验证REPORT结构的飞地和创建REPORT的EREPORT指令才能访问验证密钥。创建一个可以在平台之外进行验证的认证需要使用非对称密码学。英特尔®SGX启用了一个特殊的飞地,称为Quoting Enclave,专门用于远程证明。Quoting Enclave在平台上验证来自其他enclave的REPORTs,使用上面描述的平台内飞地验证方法,然后用使用特定于设备(私有)非对称密钥创建的签名替换这些报告上的MAC。这个过程的输出被称为QUOTE。
当在平台的整个生命周期中使用少量密钥时,使用标准非对称签名方案的认证引起了隐私问题。为了克服这个问题,英特尔对TPM [5] &[6]使用的直接匿名认证方案引入了一个扩展,称为Intel®增强隐私ID(EPID)[7],被Quoting Enclave用来签名飞地认证。 EPID是一种组签名方案,它允许平台对对象进行签名,而不需要唯一地标识平台或链接不同的签名。相反,每个签名者都属于一个“组”,验证者使用该组的公钥来验证签名。EPID支持两种签名模式。在EPID的完全匿名模式下,验证者无法将给定的签名与组中的特定成员关联起来。在伪名模式下,EPID验证者能够确定它之前是否已经验证了该平台。
Quoting Enclave创建了用于签名平台认证的EPID密钥,然后由EPID后端基础设施进行认证。EPID密钥不仅表示平台,还表示底层硬件的可信度。 当飞地系统运行时,只有Quoting Enclave可以访问EPID密钥,并且EPID密钥被绑定到处理器的固件版本。因此,可以看成一个QUOTE是由处理器本身发出的。
图4显示了一个示例,说明在用户平台上具有安全处理元素的应用程序如何向具有挑战性的服务提供者提供认证,以便从提供者接收一些增值服务。请注意,许多用法很少使用此过程(例如在注册时)为飞地提供一个通信密钥,然后直接在后续连接中使用。
当飞地被实例化时,当其维护在飞地边界内时,硬件为其数据提供保护(机密性和完整性)。然而,当飞地进程退出时,飞地将被摧毁,在飞地内得到安全的任何数据都将丢失。如果这些数据意味着以后会被重用,那么该飞地必须做出特殊安排,在该飞地之外存储这些数据。 上面的表1显示,EGETKEY提供了对持久性Sealing Keys的访问,飞地软件可以使用这些密钥来加密和完整性保护数据。Intel®SGX对该飞地使用的加密方案没有任何限制。当与平台提供的其他服务结合时,如单调计数器,对数据也有可能进行Replay保护。
当调用EGETKEY时,飞地选择条件或策略,飞地可以访问此sealing key。这些政策有助于控制敏感数据对该飞地未来版本的可访问性。 Intel®SGX支持Seal Keys的两种策略:
Sealing to the Enclave Identity产生一个密钥,可用于这个确切的飞地的任何实例.(注:如果这个seal key是基于Enclave Identity生成的,则该密文可以被部署在相同enclave Identity的任何实例所使用。在SGX中,将数据密封到enclave的身份标识上生成的密钥可以在相同身份标识的不同enclave实例中共享。)这并不允许未来的软件访问这个飞地的秘密。Sealing to the Sealing Identity产生一个密钥,可被用于一些别的由相同Sealing Authority签名的enclaves。这可用于允许较新的飞地访问以前版本存储的数据。 只有飞地的后续实例化,执行具有相同策略规范的EGETKEY,才能检索Sealing Key并解密以前实例化使用该密钥密封的数据。
当Sealing to the Enclave Identity,EGETKEY操作会基于enclave的MRENCLAVE的值生成密钥。任何影响飞地measurement的变化都将产生不同的密钥。这导致每个飞地都有不同的密钥,提供了飞地之间的完全隔离。使用此策略的一个副产品是,同一飞地的不同版本也将具有不同的密封密钥,从而阻止脱机数据迁移。 此策略对于在发现漏洞后不应该使用旧数据的用法非常有用。例如,如果数据是身份验证凭据,则服务提供者可以撤销这些凭据并提供新的凭据。访问旧的凭证可能是有害的。
当Sealing to the Sealing Identity,EGETKEY操作会基于enclave的MRSIGNER的值和enclave的版本生成密钥。MRSIGNER反映了签署该飞地证书的Sealing Authority的key/identity。 这种方式相比上一种的优点是,它允许将封闭的数据在飞地版本之间离线迁移。Sealing Authority可以签署多个飞地,并使他们可以检索相同的seal key。这些飞地可以透明地访问被其他飞地封闭的数据。 当sealing to a Sealing Authority,不应该允许较旧的软件访问由较新的软件创建的数据。当发布新软件的原因是为了修复安全问题时,这是正确的。为了方便这一点,Sealing Authority可以选择规定一个安全版本号(SVN)作为密封件标识的一部分。EGETKEY允许飞地指定在生成Seal Key时使用哪个SVN。它将只允许飞地为其Sealing Identity或以前的Identity指定SVNs。当飞地密封数据时,它可以选择设置允许访问该Sealing Key的飞地的最小SVN值。这可以保护未来的秘密不受易受攻击的旧软件的访问,但仍然支持无缝升级过渡,即以前的所有秘密都在升级后可用。 SVN与产品版本号不同。一个产品可能有多个版本,具有不同的功能,但具有相同的SVN。飞地Writer有责任与他们的客户沟通(如果必要的话),哪些产品版本具有相同的安全等价性。
该体系结构提出了一种被称为OwnerEpoch的机制,它允许平台所有者通过更改单个值来更改系统中的所有键。由于在通过EGETKEY指令请求密钥时会自动包含OwnerEpoch,使用特定的OwnerEpoch值密封的数据对象,只有在将OwnerEpoch设置为相同的值时才能打开。 该机制的主要目的是允许平台所有者在将平台转移给其他人(永久或暂时)之前,以一个简单且可恢复的步骤拒绝对平台上所有密封秘密的访问。在转移平台之前,平台所有者可以通过使用OEM提供的hooks,将OwnerEpoch更改为一个不同的值。如果临时转移(如平台维护),平台返回后,平台所有者可以将OwnerEpoch恢复到原始值,并恢复对密封秘密的访问。
略···
在本文中,提出了一种新的硬件辅助机制,以Intel®架构的新ISA扩展形式,允许在安全环境(称为飞地)中执行的应用软件进行安全attestation和sealing。 ISA扩展为飞地软件提供了手段,以向另一方证明它已在平台上正确实例化,并扩展为正确的软件,并在一个已启用的平台上的飞地内安全运行。这种认证不需要验证者理解飞地正在执行的平台软件上下文,并且仅限于信任飞地软件。 Intel®SGX体系结构还提供了一种机制来获得持久的唯一密钥,软件可以使用该密钥来密封秘密并稍后打开秘密。密封机制还提供了在一个飞地的软件升级时无缝转换秘密的能力。 认证和密封机制以一种可扩展的方式定义,支持多个飞地同时运行,每个飞地处理自己的秘密,并与远程各方进行安全通信,并向他们证明他们符合他们的安全策略。