03-TEE 框架

简介

TEE OS 各家厂商和组织都有各自的实现方式,但是所有方案的外部接口都会遵循GP(GlobalPlatform)标准。

很多企业自用闭源的 Trusted OS,比如苹果的 Secure Enclave、高通的 QTEE、三星的Knox、Teegris、Trustonic 的 Kinibi OS、华为的 TrustedCore 等。

各家厂商和组织的TEE OS到底有何区别:TA的添加和加载时的校验有所区别

开源框架

开源项目 公司 支持芯片 特点 支持的库 开发语言
Teaclave/MesaTEE 百度 SGX、TrustZone Apache孵化项目之一。Teaclave设计思路是构建一个类FaaS(Function as a Service)的计算平台服务。平台在提供TEE机密计算、远程验证、安全存储等功能基础上,再通过一套任务管理框架实现了多任务的管理和并发操作。同时按照FaaS的设计逻辑实现计算函数的可插拔 Marshal、Math、Binascii、Itertools、Micronumpy Rust、Python
Graphene/Gramine OS OSCAR Lab SGX SGX LibOS项目。Gramine(以前叫Graphene)是一个轻量级的库式操作系统,旨在以最小的主机要求运行单个应用程序。Gramine可以在一个孤立的环境中运行应用程序,其好处可以与在虚拟机中运行一个完整的操作系统相媲美–包括客体定制,易于移植到不同的操作系统,以及进程迁移。。 Tensorflow、Pytorch、OpenVINO、Memchached、Redis、Nginx、Apache HTTP Server c、python
Occlum 蚂蚁金服 SGX 降低遗留应用迁移到SGX中的编码成本。对应用代码不做更改或者只做少量调整,就可以迁移到SGX中运行,获得机密性和完整性保护。与其他LibOS项目相比,具有Enclave内多进程管理、全类型的文件系统支持、内存安全、容器化设计功能。 rust、c/c++
OpenEnclave Microsoft SGX、TrustZone(预览阶段) Open Enclave是一套C/C++的SDK。Open Enclave SDK主要封装了Enclave生命周期管理、Enclave度量、Enclave内外互调用、系统调用、数据封装、远程验证以及一些密码学库。 MUSL、Openssl、Mbedtls、LLVM LibC++
Asylo Google SGX 提供了C/C++的SDK,但不同的是Asylo更进一步定义了基于SGX的应用实现规范,也就是所谓的编程框架。基于Asylo实现的应用也是分为非可信区和可信区,但互相的通信被约束为C/S模式。非可信部分实现客户端和Enclave管理器,可信部分实现计算服务端。Asylo是一套把SGX做成服务化的编程框架 - C/C++
KubeTEE 阿里巴巴 SGX KubeTEE是一个TEE开发、部署、维护中间件框架和服务的集合。特别是,它是针对云原生工作流程的。顾名思义,KubeTEE是基于docker容器、Kubernetes编排和其他云原生技术。它的目标是帮助开发者实现基于TEE的应用,并更容易和顺利地部署TEE服务。
OP-TEE Linaro TrustZone Trusted OS的一个开源实现。 OP-TEE包括安全世界操作系统(OPTEE_OS),普通世界客户端(OPTEE_Client),测试套件(OPTEE_Test / XTest)和Linux驱动程序。操作系统和客户端符合Global Platform规范。项目由Linaro维护,已经适配支持28多个平台/处理器。开发用户负责开发在Linux上运行的客户端应用程序(CA)和在OP-TEE上运行的可信应用程序(TA)。CA使用TEE客户端API与TA对话并从中获取安全服务。CA和TA使用共享内存在彼此之间传递数据 - -
OPEN-TEE Secure Systems group TustZone (≥Ubuntu14.04) Open-TEE开源项目的目标是实现一个符合最近全球平台TEE规范的 “虚拟TEE”。 - c/c++
Trusty OS Android社区开源项目 SGX、TrustZone Trusty 是一种安全的操作系统 (OS),可为 Android 提供可信执行环境 (TEE),主要用于 Android。Trusty OS 与 Android OS 在同一处理器上运行,但 Trusty 通过硬件和软件与系统的其余组件隔离开来。Trusty 与 Android 彼此并行运行。Trusty 可以访问设备主处理器和内存的全部功能,但完全隔离。隔离可以保护 Trusty 免受用户安装的恶意应用以及可能在 Android 中发现的潜在漏洞的侵害。 Trusty 与 ARM 和 Intel 处理器兼容。在 ARM 系统中,Trusty 使用 ARM 的 Trustzone™ 虚拟化主处理器,并创建安全的可信执行环境。使用 Intel 虚拟化技术的 Intel x86 平台也提供类似的支持。 Little Kernel、Linux 内核驱动程序、Android 用户空间库 -
SierraTEE OS Sierraware TrustZone、MIPS 提供了一个最小的安全内核,可以与功能更全面的高级操作系统(如Linux、Android、BSD)在同一内核上并行运行。它还为丰富的操作系统(“正常世界”)提供了驱动程序,以便与安全内核(“安全世界”)通信。 -

SGX

LibOS for SGX

为什么需要 LibOS 见 这儿

Inter SGX 通过应用隔离技术帮助保护选定的代码和数据不被修改。应用程序可以从 Inter SGX 的保密性和完整性保证中受益,但开发人员需要非常熟练地对Inter SGX 环境进行有效分区和代码修改。同时,SGX SDK 提供了有限的系统调用接口,因此,在 Enclave 中的应用程序会因为没有暴露的接口而无法运行。

为了很好地支持在 Inter SGX Enclave 中运行的应用程序,开发者可以免于编写任何额外的 enclave 感知代码。LibOS 的主要功能如下:

  • 提供一个智能点来划分不信任/信任的系统
  • 不扩大不信任的接口
  • 将整个应用程序移植到Enclave

LibOS for SGX的通用框架是:

目前,支持 Intel SGX 的开源 LibOS 有 Gramine、Occlum、SCONE 和 Fortanix 等。其中常用的是 Gramine 和 Occlum。

所以 LibOS 也属于 Trusted OS。Trusted OS 是为了开发方便,提供API让应用程序安全访问隔离空间,进行机密计算。

Teaclave

github:https://github.com/apache/incubator-teaclave?tab=readme-ov-file

第一个 Python 函数: https://github.com/apache/incubator-teaclave/blob/master/docs/my-first-function.md

需要支持 Intel SGX 的硬件并启用 SGX,另外需要安装驱动程序和平台软件才能运行 SGX 应用程序,然后安装 Teaclave,安装 Python 依赖,就可以开始编程了

Teaclave 是由百度公司开源的基于TEE的安全计算平台,目前是 Apache 孵化项目之一,在贡献给 Apache 之前项目名为 MesaTEE。

Teaclave 设计思路是构建一个类 FaaS(Function as a Service)的计算平台服务。平台在提供TEE机密计算、远程验证、安全存储等功能基础上,再通过一套任务管理框架实现了多任务的管理和并发操作。同时按照 FaaS 的设计逻辑实现计算函数的可插拔。

Teaclave 后端核心模块包括管理服务、调度服务、鉴权服务和机密存储服务,这些服务全部在 Enclave 运行。各模块之间通过统一形式的 RPC 接口通信,并且端到端双向验证。具体的函数执行通过调度服务分派到不同的 TEE 工作节点上完成。

当前 Teaclave 支持两类计算实现,一类由 Rust 实现,通过实现预定义的 run 方法,并将类注册到执行器类中即可发起对应方法的任务。另一类由 Python 实现,Python 实现的代码会在具体执行时被 TEE 内的解释器翻译执行。底层使用的是 MesaPy for SGX 解释器,目前已经支持 Marshal、Math、Binascii、Itertools、Micronumpy 等工具库。

Graphene

Graphene 是一个 SGX LibOS 项目,Graphene 本身直接与 SGX AESM Gateway 服务进行交互,所以在实现上不依赖 SGX SDK。目前已经封装了 47 个 Host ABI 接口,其中 36 个需要 OCall。支持包括 fork、exec 在内大部分 System V IPC。

Graphene 目前包含接近 5 万行 LibOS 代码和 2 万行 SGX PAL 代码。编译后接近 1MB,可以说非常轻量。

Graphene 用户态多进程模型是由 LibOS 隔离的,即通过创建新的 Enclave 来启动新的OS进程。LibOS 之间使用RPC模拟进程间通信。

在 Graphene 上已经进行过充分验证的应用包括 Tensorflow、Pytorch、OpenVINO 等机器学习框架,Memchached、Redis、Nginx、Apache HTTP Server 等企业级服务。

Occlum

https://occlum.readthedocs.io/en/latest/quickstart.html#hello-world
他人实战:https://blog.csdn.net/Joaquin233/article/details/140355673

Occlum 是蚂蚁金服公司开源的面向内存安全和多任务的 SGX LibOS 项目。和其他 LibOS 一样,Occlum 目标是降低遗留应用迁移到 SGX 中的编码成本。对应用代码不做更改或者只做少量调整,就可以迁移到 SGX 中运行,获得机密性和完整性保护。

Occlum 相比其他同类 LibOS 项目主要有以下优势:

  1. Enclave内多进程管理:目前其他的 LibOS 都是单进程模型,实现多进程需要启动多个 LibOS 实例。Occlum 提供了一个轻量的 LibO S进程实现,从而可以在一个 Enclave 内运行多个独立进程。Occlum 在实验室环境下有3倍的进程间通信速度提升。

  2. 全类型的文件系统支持:Occlum 支持多类型的文件系统,可以方便的在 Enclave 不同进程之间或是在 Enclave 与外部操作系统之间共享文件。此外 Occlum 也基于 SGX 封存技术实现了加密文件系统,可保证 Enclave 内部数据的加密落盘。

  3. 内存安全:这个主要得益于 Occlum 使用内存安全的 Rust 语言实现。

  4. 容器化设计:实现了命令行工具,可以类似 Docker 那样管理 Enclave 实例容器。

OpenEnclave

Microsoft Open Enclave 希望兼容不同的 TEE 技术,并且提供统一的编程 API。Open Enclave 是一套 C/C++ 的 SDK。Open Enclave 目前主要支持 Intel SGX,对 ARM TrustZone 的 OP TEE OS 支持还停留在预览阶段。

Open Enclave SDK 主要封装了 Enclave 生命周期管理、Enclave度量、Enclave内外互调用、系统调用、数据封装、远程验证以及一些密码学库。

Open Enclave 移植了MUSL库(跨平台的C标准库),也适配了一些第三方库,包括 Openssl、Mbedtls、LLVM LibC++ 等。

Windows10下使用Intel SGX功能(二):helloworld流程分析:https://blog.csdn.net/shuizhongmose/article/details/129297334

Asylo

Google Asylo 也提供了 C/C++ 的 SDK,但不同的是 Asylo 更进一步定义了基于 SGX 的应用实现规范,也就是所谓的编程框架。基于 Asylo 实现的应用也是分为非可信区和可信区,但互相的通信被约束为 C/S 模式。非可信部分实现客户端和 Enclave 管理器,可信部分实现计算服务端。

在远程验证方面,Asylo 提供了基于 Intel ECDSA Quoting Enclave和Assertion Generator Enclave(简称AGE)两种 TCB 模式,两种模式都是在 SGX ECDSA 远程验证模式基础上开发的,所以都需要CPU支持FLC。两者的区别是前者直接基于Intel QE提供了函数接口。而AGE采用了C/S模式,基于Asylo框架,成为了一个常驻GRPC服务,方便外部用户实时调用验证。虽然提升了远程验证的易用性。但显然,AGE的TCB会比单纯使用Intel QE更大。

另外,Asylo 还集成了秘密封装、密钥协商以及TEE服务代理等功能。总体而言 Asylo 是一套把SGX做成服务化的编程框架。

TrustZone

OP-TEE

在 ARM TrustZone 生态中,Trusted OS 是工程化相对密集的领域。

OP-TEE 由非营利的开源软件工程公司 Linaro 按照 GP规范 开发,所有源代码均可在 Github 上下载到。支持 QEMU、Hikey(Linaro推广的96Board系列平台之一,使用Hisilicon处理器)以及其他通用的 ARMv7/ARMv8 平台,开发环境搭建方便,便于开发者开发自有的 上层可信应用 ,且OP-TEE提供了完整的 SDK ,方便编译 TA和CA 。

OP-TEE 遵循 GP规范 ,支持各种 加解密和电子签名验签算法 以便实现 DRM、在线支付、指纹和虹膜识别 功能。OP-TEE 也支持在芯片中集成第三方的硬件加解密算法。除此之外,在 IoT和车载芯片 领域也大都使用 OP-TEE 作为TEE解决方案。

OP-TEE 是 Trusted OS 的一个开源实现。Trusted OS 位于安全世界(Secure World),不是一个位于非安全世界(Normal World)的普通操作系统(Normal OS)。

Trusted OS 属于整个 TrustZone 应用的可信计算根,必须保证安全,所以相对而言代码量较少,通常而言代码量会比 TA 少一个量级。在 Trusted OS 中没有 POSIX API,也没有动态链接库,所以其上运行的 TA 默认使用了静态编译。Trusted OS 也需要依赖普通操作系统的帮助,比如对文件系统的访问、对外部设备的访问,都需要通过普通操作系统的系统调用完成。

OP-TEE 包括安全世界操作系统(OPTEE_OS),普通世界客户端(OPTEE_Client),测试套件(OPTEE_Test/XTest)和 Linux 驱动程序。操作系统和客户端符合 Global Platform 规范。项目由 Linaro 维护,已经适配支持 28 多个平台/处理器。开发用户负责开发在 Linux 上运行的客户端应用程序(CA)和在 OP-TEE 上运行的可信应用程序(TA)。CA 使用 TEE 客户端 API 与 TA 对话并从中获取安全服务。CA 和 TA 使用共享内存在彼此之间传递数据。

类似 OP-TEE,开源的 Trusted OS 还包括 OPEN-TEE、Trusty、SierraTEE、SafeG 等,并且还有很多企业自用闭源的 Trusted OS,比如苹果的 Secure Enclave、高通的 QTEE、三星的 Knox、Teegris、Trustonic的Kinibi OS、华为的TrustedCore等。

基于 QEMUv8 搭建 OP-TEE 开发环境:https://blog.csdn.net/stone8761/article/details/125563745
https://blog.csdn.net/Joaquin233/article/details/139630550
开发案例:https://blog.csdn.net/Joaquin233/article/details/140355673

Trusty

https://source.android.google.cn/security/trusty?hl=zh-cn

https://android-review.googlesource.com/admin/repos/trusty,general

Trusty,就是 Google 基于 ARM 架构的 Trustzone 技术实现的一套运行环境,通过硬件和系统软件层面的隔离,实现 normal world和secure world,也就是 REE和TEE。

Trustzone 从 ARM-v6 即开始支持,且在 ARM-v8 上增强了 secure mode,TrustZone 技术能提供芯片级别对硬件资源的保护和隔离,当前在手机芯片领域已被广泛应用。而 Google 也规定从 Android M 版本以后所有的 人脸、指纹、虹膜识别 的隐私数据都需要使用TEE环境进行安全保护,否则无法通过Google的 CTS认证授权

Trusty 是一种安全的操作系统 (OS),可为 Android 提供可信执行环境 (TEE)。Trusty 操作系统与 Android 操作系统在同一处理器上运行,但 Trusty 通过硬件和软件与系统的其余组件隔离开来。Trusty 与 Android 彼此并行运行。Trusty 可以访问设备主处理器和内存的全部功能,但完全隔离。隔离可以保护 Trusty 免受用户安装的恶意应用以及可能在 Android 中发现的潜在漏洞的侵害。

Trusty 与 ARM 和 Intel 处理器兼容。在 ARM 系统中,Trusty 使用 ARM 的 Trustzone™ 虚拟化主处理器,并创建安全的可信执行环境。使用 Intel 虚拟化技术的 Intel x86 平台也提供类似的支持。

Trusty 与 ARM 和 Intel 处理器兼容。在 ARM 系统中,Trusty 使用 ARM 的 Trustzone™ 虚拟化主处理器,并创建安全的可信执行环境。使用 Intel 虚拟化技术的 Intel x86 平台也提供类似的支持。

Trusty 包含以下组件:

  • 由 Little Kernel 衍生的小型操作系统内核

  • Linux 内核驱动程序,用于在安全环境和 Android 之间传输数据

  • Android 用户空间库,用于通过内核驱动程序与可信应用(即安全任务/服务)通信

Android 支持各种 TEE 实现,每一种 TEE 操作系统都会通过一种独特的方式部署可信应用。对试图确保应用能够在所有 Android 设备上正常运行的可信应用开发者来说,这种不统一性可能是一个问题。使用 Trusty 作为标准,可以帮助应用开发者轻松地创建和部署应用,而不用考虑有多个 TEE 系统的不统一性。借助 Trusty TEE,开发者和合作伙伴能够实现透明化、进行协作、检查代码并轻松地进行调试。

商业框架

  1. Trustonic 公司的 t-base,是一个商业产品,已经得到 GlobalPlatform 的授权认可

    https://www.trustonic.com/products-services/trusted-execution-environment/

  2. Solacia 公司的 securiTEE,也是一个商业产品,并且得到了 GlobalPlatform 的授权认可

    http://www.sola-cia.com/en/securiTee/product.asp

  3. SierraTEE,来自 Sierraware 公司的实现,拥有双重属性,一半开源一半商业性质

    http://www.openvirtualization.org/

TEE 手机方案商

高通 QSEE(Qualcomm Secure Execution Environment)

  • 概述:QSEE 是高通公司在其 Snapdragon 处理器中提供的一种 TEE 实现,类似于 ARM TrustZone。它提供一个隔离的执行环境来处理敏感数据和任务。
  • 工作原理:基于 TrustZone 架构,高通为其设备定制了一个 TEE,确保敏感应用可以在一个隔离环境中运行,保护用户隐私和数据安全。
  • 应用场景:广泛应用于移动设备中的安全支付、生物识别身份认证、DRM 等领域。
  • 优势:由于高通 Snapdragon 处理器的广泛使用,QSEE 被广泛应用于 Android 手机和其他智能设备中。

除了苹果之外,QSEE是应用最广泛的一个TEE OS。目前使用高通芯片的趋势继续在加强,因此有必要介绍下高通是如何基于Trustzone技术实现自己的可信执行环境。目前所有的手机芯片的可信执行环境都是基于ARM的trustzone技术实现的,苹果如此、高通如此、三星如此、MTK如此、华为麒麟芯片依旧如此。

Huawei Trusted Execution Environment (TEE)

  • 概述:华为 TEE 是华为自家开发的一种可信执行环境,类似于 ARM TrustZone,专门用于其智能手机和物联网设备。它为敏感数据和应用提供了一个隔离的、安全的执行环境。
  • 工作原理:基于 ARM TrustZone 架构,华为开发了其定制的 TEE 解决方案,用于处理安全支付、生物识别等安全关键操作。
  • 应用场景:广泛应用于华为的智能手机、平板电脑以及其他设备,特别是在支付和身份认证领域。
  • 优势:结合华为设备的软硬件生态系统,提供了一体化的安全解决方案。

华为-鲲鹏 iTrustee

参考:https://www.hikunpeng.com/zh/developer/techArticles/20230913-10

鲲鹏机密计算套件中的核心组件“可信操作系统”(Trusted OS)采用的是华为自研的 iTrustee,它的主要特点包括:

(1)稳定可靠:基于华为自研的微内核安全OS,已在手机侧商用近10年,支持过亿级用户。

(2)权威第三方认证:获得CC EAL4+认证。

(3)规格灵活:TEE侧安全内存支持按需配置,最大可配128G。

Google Titan

Reference


03-TEE 框架
https://flepeng.github.io/081-数据安全-TEE-03-TEE-框架/
作者
Lepeng
发布于
2023年4月14日
许可协议