机密计算是基于硬件支持的可信执行环境的,比如 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 操作系统。
一、环境构建
主机操作系统建议采用 ubuntu 18.04,为了更好的构建 openenclave,建议安装一下必要的软件库:
sudo apt update && sudo apt install -y android-tools-adb \
android-tools-fastboot autoconf automake bc bison build-essential ccache \
cgdb cscope curl device-tree-compiler expect flex ftp-upload gdb-multiarch \
gdisk iasl libattr1-dev libc6 libcap-dev libfdt-dev libftdi-dev \
libglib2.0-dev libhidapi-dev libncurses5-dev libpixman-1-dev libssl-dev \
libstdc++6 libtool libz1 make mtools netcat python-crypto \
python-pyelftools python-serial python-wand python3-pyelftools repo unzip \
uuid-dev xdg-utils xterm xz-utils zlib1g-dev qemu-user-static
二、目录结构
最终我们构建的整体目录结构如下:
openenclave 根目录
-sdk openenclave 源码目录
-emulation optee 源码目录
-build sdk 构建目标
openenclave 为我们手动创建,在后续步骤中假定该目录已存在;
sdk 目录用来存放 openenclave 源代码;
emulation 用来存放 optee 源码;
build 用来构建基于 optee 和 openenclave 的机密计算环境。
三、optee 构建
3.1 创建模拟器目录
创建 optee 目录文件夹,因为我们构建的是 qemu 版本,所以命名为模拟器 emulation。
mkdir emulation
cd emulation
3.2 同步 optee 代码
这里需要使用附带的 repo 程序来拉取 optee 代码,这里通过 manifest 指定了用于 openenclave 的 qemu 版本,分支是 3.6.0。从路径可以看出,这是微软维护的一个版本,并不是 optee 官方版本。
repo init -u https://github.com/ms-iot/optee_manifest -m oe_qemu_v8.xml -b oe-3.6.0
repo sync
3.3 构建
进入 build 目录,来下载&安装相关工具链,这个时间可能会长一点。
最后,通过 run 指令,对 optee 进行构建。
cd build
make toolchains -j2
make run -j$(nproc)
四、openenclave 构建
4.1 代码树
以下是 openenclave 的源码树,包含了一些常用的组件,比如 libc、libcxx,同时也包含了 host 和 enclave 等目录,此外还有包管理器、脚本、测试、工具、调试器、文档等。
4.2 代码获取
代码获取使用 git 递归获取代码到 sdk 目录下,这里不仅会下载 openencalve 源码,还会下载依赖的 openssl、mbedtls、optee os 等代码。
//返回到 openenclave 根目录
git clone --recursive https://github.com/openenclave/openenclave.git sdk
4.3 依赖工具安装
通过运行以下脚本,即可安装依赖的工具。
cd sdk
# Set up the build environment (only once).
sudo scripts/ansible/install-ansible.sh
sudo ansible-playbook scripts/ansible/oe-contributors-setup-cross-arm.yml
4.4 构建
openenclave 采用 cmake 组织源代码,同时通过 ninja 来进行构建,来实现很好的效率。
cd ..
mkdir build
cd build
# Configure the SDK
cmake ../sdk \
-G Ninja \
-DCMAKE_TOOLCHAIN_FILE=../sdk/cmake/arm-cross.cmake \
-DOE_TA_DEV_KIT_DIR=$PWD/../emulation/optee_os/out/arm/export-ta_arm64 \
-DCMAKE_BUILD_TYPE=Debug
# Build the SDK
ninja
cd ..
总结
通过以上步骤,openenclave 机密计算环境即构建完成,剩下的就是如何运行机密计算环境以及如何在机密计算环境中运行机密程序。运行机密计算环境稍微复杂一些,我们会在下一篇单独介绍。
皮格马利翁效应心理学指出,赞美、赞同能够产生奇迹,越具体,效果越好~
“收藏夹吃灰”是学“器”练“术”非常聪明的方法,帮助我们避免日常低效的勤奋~