建站公司学习,筑梦网站建设,图片外链在线生成网址,做珠宝商城网站前言 机密计算是基于硬件支持的可信执行环境的#xff0c;比如 Intel SGX 硬件技术上面的 enclave 以及 Arm Trustzone 上的 OT-TEE#xff0c;不过这些异构的 TEE 之间差异还是蛮大的#xff0c;所以亟需一种能够屏蔽 TEE 差异软件中间件或者 SDK#xff0c;这就是本文将要…前言 机密计算是基于硬件支持的可信执行环境的比如 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 语言构建安全区应用程序。 一个飞地应用程序将自身划分为两个部分组件
不受信任的部分组件称为 host受信任的部分组件称为 enclave 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 host 库OE 运行时库musl libc 库 musl libc 是一个轻量级的 C 标准库它的设计目标是尽可能小而快同时提供最高的代码质量和安全性。musl libc 的源代码通常较短编译速度较快没有额外的依赖因此非常适用于嵌入式系统和轻量级应用程序。兼容性较 glibc 差一些静态编译严格遵循 POSIX 标准采用更宽松的 BSD 协议许可OpenSSL MbedTLSLLVM libc符合 apache 协议许可的开源 c 库OE Attestation 插件 三、编程模型
3.1 数据流
Host 程序将签名的二进制 enclave 程序通过创建命令加载到 enclave 空间里Host 程序通过 ECALLx86 和 risc-v 都这么称呼arm 上叫 smc调用 enclave 安全程序enclave 程序也可以通过 OCALL 调用一个 host 的函数功能host 端返回到 enclave 端enclave 程序返回结果给 host 程序host 程序销毁 enclave 应用程序 3.2 hello world OE SDK 最小工程当属 hello world 工程整个工程由以下部分构成
全局 Makefile用于生成 OCALLs/ECALLs 的 edl 配置文件host 端的 Makefile文件、C 源文件、自动生成的边缘调用过程文件enclave 端的 C 源文件、配置文件、Makefile 文件以及边缘调用过程文件 3.2.1 edl 文件 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 3.2.2 C 文件 此例子中演示了 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.signedHello world from the enclaveHello world from the host 3.2.3 ECALL/OCALL 上图中虽然 host 端和 enclave 端的 enclave_helloworld 同名但是并不是一个函数直接调用仅仅是同名而已这个在 ARMv8-M trustzone 架构下基于安全门 sg 指令实现的跳板函数类似。host 端的 enclave_helloworld 是自动生成的子程序它会将参数序列化然后通过特定的通道传输给 enclave这里会涉及到内存复制进入 enclave 后重新对参数进行反序列化传递给真正的 enclave_helloworldECALL 过程结束。 而 OCALL 可以认为是 ECALL 的反过程涉及的具体细节也类似。 四、证明 Attestation OE 实现了两个 API 来实现远程证明服务
oe_get_evidence证明方从 TEE 获取远程证明用到的证据oe_verify_evidence验证方验证证明方的证据 设备端 enclave 证明环境使用 oe_get_evidence API而微软证明服务 MAS 使用 oe_verify_evidence API。 OE 的证明架构兼容 TEE 特定的证明比如 SGX 插件 五、其他
5.1 功能特性
日志回调 APIs数据封装 APIsECALLs/OCALLs 深拷贝可插拔的内存分配器调试 Malloc模拟模式
5.2 工具
调试器 GDBWinDbgIDE 扩展 Visual StudioVS Code包管理器 apkman实验中
5.3 计划中
FIPS 模块加载提高 syscall/libc 的支持高级语言支持比如 rust 总结 从上面我们可以对 Open Enclave SDK 有个大概的了解看起来还是非常简单易用的对于 SGX Lib 以及 OP-TEE OS 的具体封装情况我们可以后面再继续分析。 总之Open Enclave SDK 致力于通过对异构 TEE API 进行抽象为机密计算提供一套通用的接口简化机密计算应用开发过程实现一次开发多平台部署的效果。
皮格马利翁效应心理学指出赞美、赞同能够产生奇迹越具体效果越好~ “收藏夹吃灰”是学“器”练“术”非常聪明的方法帮助我们避免日常低效的勤奋~