跳到主要内容

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),主要包括以下特性:

  • 程序的完整性度量(Integrity Measurement)
    • 通过签名、哈希等度量方式,确保运行中的程序没有被篡改,和用户交付的程序完全一致。
  • 数据传输安全(Secure Input/Output)
    • Enclave 和外界的数据交换通道应该是安全的,一般依赖于 DSA/Encrypt/TLS 密码学技术保证数据传输安全。
  • 内存隔离(Memory Curtaining)
    • 为了实现云上的可信环境,应该确保即使恶意攻击者完全控制了物理机器和其中的操作系统, 也无法窥探应用程序的运行内存。一般依赖于硬件实现,如 Intel SGX、AMD TrustZone 等,通过在内存中划分出一块隔离的地址空间,交给可信环境的 Enclave 使用,杜绝任何外部特权程序的访问。以 Intel SGX 为例,可信内存被加处理,攻击者通过内存嗅探等方式获取内存后也无法解密内存数据。
  • 存储加密 (Sealed Storage)
    • 当可信环境的程序因为中断等原因被切换时,或者当其内存页被 swap 时, 或者是有需要在宿主机磁盘上持久化存储数据时,这些数据都会暂时离开可信区,解决这些数据安全存储时的加密问题。
  • 远程认证(Remote Attestation)
    • 当用户程序运行于第三方的云平台时,用户可以通过远程认证技术对平台和程序进行远程认证。远程认证主要校验平台是否能够提供可信计算环境,以及应用程序的完整性。

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

  • Data Confidentiality: TEE 内的数据不能被外部嗅探
  • Data Integrity: TEE 内的数据不能被外部篡改
  • Code Integrity: 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

在介绍 Sealing 之前,首先介绍一下 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 的度量将会改变,因此密封密钥也会发生变化,并且数据无法恢复。

直观理解为

  • 同一个 CPU 上,相同版本的 TEE 应用,可以使用这种方式加密和解密数据
  • 如果换了 CPU,即使使用相同版本的 TEE 应用,也无法解密(Unseal)之前加密的数据
  • 如果使用相同的 CPU, TEE 应用代码一旦做了任何修改(MRENCLAVE 发生改变),则新版本的 TEE 应用也无法解密之前加密的数据

Seal to the Enclave Author

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

直观理解为

  • 同一个 CPU 上,不同版本的 TEE 应用(或者不同的 TEE应用),只要被相同的 Author Enclave Signing Key 签名(具有相同的 MRSIGNER),则都可以使用这种方式加密和解密数据
  • 如果换了 CPU,即使使用相同版本的 TEE 应用或者被相同的 Author Enclave Signing Key 签名 ,也无法解密(Unseal)之前加密的数据

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 特性保护云端敏感数据生成、使用、销毁全生命周期的安全,即使黑客获取服务器权限,也无法窃取私钥分片明文。