机密计算是基于硬件支持的可信执行环境的,比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE,不过这些异构的 TEE 之间差异还是蛮大的,所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK,这就是本文将要提到的微软 Open Enclave SDK。
Open Enclave 提供了异构 TEE (SGX 和 OP-TEE)的兼容,为上层机密应用提供了同一的接口,同时为机密计算提供了远程证明、多高级语言支持等功能。
机密计算是一项持续的工作,旨在保护静态、传输中和正在使用中的数据的整个生命周期安全。通过使用信任执行环境,客户可以构建应用程序,以保护数据在使用时免受外部访问。Open Enclave SDK 是一个开源 SDK,旨在为开发人员创建单个统一的安全区抽象,以构建基于可信执行环境 (TEE) 的应用程序。随着 TEE 技术的成熟和不同实现的出现,Open Enclave SDK 致力于支持一个 API 集,允许开发人员一次构建并部署在多个技术平台,从云到混合云再到边缘的不同环境,同时兼容 Linux 和 Windows 操作系统。
Open Enclave SDK 是一个与硬件无关的开源库,用于开发基于硬件的可信执行环境的应用程序,即飞地(Enclave)。
Open Enclave (OE) 是一个 SDK,基于 C 和 C++ 语言构建安全区应用程序。 一个飞地应用程序将自身划分为两个部分(组件):
enclave 是受保护的内存区域,可为数据和代码提供机密访问运行的环境。它是可信执行环境 (TEE) 的一种实例,通常由硬件保护,例如英特尔软件防护扩展 (SGX)。
该 SDK 旨在使 enclave 程序的开发更简单通用,屏蔽掉不同硬件供应商 TEE 方案的差异性。目前,OE 实现提供了对英特尔 SGX 的支持,同时对 ARM TrustZone 上的 OP-TEE OS 提供了一个预览版本。作为一个 开源项目,该 SDK 也力求提供透明的解决方案, 与特定供应商、服务提供商、操作系统无关。
OE 采用封层的隔离架构,下层是 TEE 组件层,包括 Intel SGX 库和 ARM OP-TEE,上层是不受信的主机程序和受信的 enclave 程序,中间是 OE 软件栈。
OE 软件栈包括:
OE SDK 最小工程当属 hello world 工程,整个工程由以下部分构成
edl 文件用于生成 ECALLs/OCALLs,这里包含了另外两个 edl 文件,同时定义了 ECALL 和 OCALL 的入口函数,通过 oeedger8r 工具可以生成 host 和 enclave 用来相互访问的代码:
- Host
$oeedger8r --untrusted helloworld.edl --search-path /opt/openenclave/include
- Enclave
$oeedger8r --trusted helloworld.edl --search-path /opt/openenclave/include
此例子中演示了 host 调用 enclave 的 enclave_helloworld 函数,在 enclave 环境下打印消息,并反向调用 host_hellowold 来在非信任区打印消息,最后一层一层返回。整个中间调用过程由 ECALL/OCALL 机制保证。
enclave 通过 oesing 工具签名:
$ oesign sign -e enclave -c enclave.conf -k key.pem
enclave 由 host 应用程序加载、运行:
$ ./host enclave.signed
Hello world from the enclave
Hello world from the host
上图中虽然 host 端和 enclave 端的 enclave_helloworld 同名,但是并不是一个函数直接调用,仅仅是同名而已(这个在 ARMv8-M trustzone 架构下基于安全门 sg 指令实现的跳板函数类似)。host 端的 enclave_helloworld 是自动生成的子程序,它会将参数序列化然后通过特定的通道传输给 enclave,这里会涉及到内存复制;进入 enclave 后,重新对参数进行反序列化传递给真正的 enclave_helloworld,ECALL 过程结束。
而 OCALL 可以认为是 ECALL 的反过程,涉及的具体细节也类似。
OE 实现了两个 API 来实现远程证明服务:
oe_get_evidence:证明方从 TEE 获取远程证明用到的证据;
oe_verify_evidence:验证方验证证明方的证据;
设备端 enclave 证明环境使用 oe_get_evidence API,而微软证明服务 MAS 使用 oe_verify_evidence API。
OE 的证明架构兼容 TEE 特定的证明,比如 SGX 插件;
5.3 计划中
从上面我们可以对 Open Enclave SDK 有个大概的了解,看起来还是非常简单易用的,对于 SGX Lib 以及 OP-TEE OS 的具体封装情况,我们可以后面再继续分析。
总之,Open Enclave SDK 致力于通过对异构 TEE API 进行抽象,为机密计算提供一套通用的接口,简化机密计算应用开发过程,实现一次开发,多平台部署的效果。
皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~