TEE 技术概述

SMN 套件中服务端组件使用基于 Intel SGX 的可信计算技术保护核心敏感数据安全,如私钥分片数据等。为了方便开发者理解 SMN 套件的实现逻辑,本章节简要介绍 TEE 相关的核心概念。

Intel SGX & TEE

2015 年 Intel 为第六代 CPU 定义了一组新的指令集(SGX,Software Guard Extensions),Intel SGX 通过新的指令集扩展与访问控制机制实现 SGX 程序的隔离运行,保障关键代码和数据的机密性与完整性不受恶意软件的破坏。不同于其他安全技术,Intel SGX 的可信根仅包括硬件,避免了基于软件的可信根可能自身存在安全漏洞的缺陷,极大地提升了系统安全保障。它代表着包含软、硬件的一整套解决方案,致力于提供一个安全的可信执行环境(Trusted Execution Environment,TEE),主要包括以下特性:

TEE 主要包括以下核心要素:

简而言之,TEE 就是在现有执行环境中另行开辟出一块受保护的隔离环境,一切软件包括操作系统都无权从外部访问 TEE 中的数据。

Intel SGX Attestation

Attestation 指验证一个程序是否在启用 Intel SGX 受保护的 Enclave 平台上运行的机制,包含 Local 或者 Intra-Platform Attestation,以及 Remote Attestation。

远程认证(Remote Attestation)指调用方可以验证一个程序是否在可信计算环境中执行,以及该程序的机密性和完整性。

远程认证的具体实现比较复杂,涉及到 Intel SGX Root CA 证书的证书链机制,以及 PCE 中 PCK 相关授权机制,PCE 授权 QE 中 AK 机制等。为了方便理解,我们简化中间过程,直观理解为可信开发者可以在自己的 TEE 应用中创建一个 TEE 报告,这个报告中包含了 Intel SGX SDK 中自动产生的数据,其中包含了 TEE 应用的 MRENCLAVE 等,可以用于判断 TEE 应用所处环境的一些属性,以及开发者可以自定义的 256 bit 数据。Intel SGX 官方会验证这个报告是否在 TEE 中提交,并且对该报告进行签名。

验证方收到该 TEE 报告后,根据 Intel SGX 官方公钥对报告进行验证,如果验证通过,则证明改报告对应的 TEE 应用在确实在 TEE 环境中,并且对应的 MRENCLAVE 等可以认为是真实的。开发者可以在自定义数据中填充需要被认证的信息,如通信公钥,通过这种方式验证方可以信任通信密钥在 TEE 中生成及使用。

MRENCLAVE 可以认为是一个 TEE 应用可信部分代码和元数据的 hash,一旦 TEE 应用可信部分代码发生改变,该 MRENCLAVE 一定发生改变,因此可以使用 MRENCLAVE 标识 TEE 应用版本。SMN 产品套件中充分利用远程认证特性,解决可信应用之间以及可信应用和管理员之间的授权信任问题。

Intel SGX Sealing

在介绍 Seeling 之前,首先介绍一下 Author Enclave Signing Key。这个密钥用于在构建 TEE 应用时对 TEE 应用可信部分签名,寄存器 MRSIGNER 会存储 Author Enclave Signing Key 公钥标识,被相同的 Author Enclave Signing Key 签署的 TEE 应用,启动后寄存器中 MRSIGNER 相同。在 TEE 报告中,MRSIGNER 也存在,可以通过报告中的 MRSIGNER 判断 TEE 应用的发布者。

所谓密封(Sealing)就是指对数据加密,Intel SGX 提供了两种 Sealing 方式,每种方式有对应的解密封(Unsealing) 流程。

Seal to the Current Enclave (Enclave Measurement)

使用当前版本的 Enclave 的度量值 MRENCLAVE 进行数据密封,并将该值与密封操作所使用的密钥绑定。只有具备相同 MRENCLAVE 度量值的 Enclave 才能解封以这种方式密封的数据。 如果 Enclave 动态库或共享对象文件被篡改,Enclave 的度量将会改变,因此密封密钥也会发生变化,并且数据无法恢复。

直观理解为

Seal to the Enclave Author

使用 Enclave 开发者的 Author Enclave Signing Key 进行数据密封,CPU 在 Enclave 初始化时将其存储在 MRSIGNER 寄存器中,并将该值与密封数据使用的密钥绑定。该绑定由硬件通过 EGETKEY 指令执行。密封数据功能使用的密钥也与 Enclave 的 Product ID 绑定。只有 MRSIGNER 度量值相同以及 Product ID 相同的 Enclave 才能解封以这种方式密封的数据。

直观理解为

Sealing 总结

两种密封方式,无论哪种,只要换了 CPU 运行 TEE 应用,就无法解密之前加密的数据,这也符合使用硬件对数据保护的要求,和硬件进行绑定。

如果使用 Seal to the Enclave Author 方式密封数据,同一个 CPU 上相同版本 TEE 应用关闭进程和重新启动进程不需要迁移加密数据,并且只要被同一个 Author Enclave Signing Key 签署,同一个 CPU 上更新 TEE 应用版本也可以解密之前加密的数据。虽然在同一个 CPU 上更新 TEE 应用变得方便和体验友好,但意味着一旦掌握  Author Enclave Signing Key 的人员作恶,便可以通过升级 TEE 应用版本的方式将敏感信息从 Enclave 中导出。

如果使用 Seal to the Current Enclave 方式密封数据,每次 TEE 应用版本更新都要考虑如何迁移加密数据,同一个 CPU 上相同版本 TEE 应用关闭进程和重新启动进程不需要迁移加密数据。

因此在两种密封方式的选择上,同时也需要考虑安全性和 TEE 应用产品体验的平衡。针对区块链资产对应的密钥(私钥或者私钥分片)管理场景,Safeheron 选择 Seal to the Current Enclave 的方式以收缩攻击面,提升安全性。通过设计 SMN CA 组件让开发者完全掌控 TEE 中 Seal 和 Unseal 的控制权,通过自动授权技术架构的设计减少运维和管理成本。

总结

SMN 产品套件充分利用 TEE 特性保护云端敏感数据生成、使用、销毁全生命周期的安全,即使黑客获取服务器权限,也无法窃取私钥分片明文。