机密计算底层依赖的可信执行环境(TEE)技术——比如目前最成熟的云端 TEE 技术 Intel SGX——也带来了额外的功能限制和兼容问题。这使得机密计算的开发者面领一个巨大的阻碍:应用开发难。
Occlum 是一款蚂蚁集团开源的 TEE OS,可以大幅降低 SGX 应用的开发门槛。具体的操作流程如下:
1. 拉取并启动镜像
第一步,检查环境是否提供SGX硬件支持,这个在之前系列的文章中已经有过介绍, 操作十分简单。
第二步,拉取Occlum镜像,命令如下
docker pull occlum/occlum:[version]-ubuntu20.04
我使用的是0.29.0版本,命令如下:
docker pull occlum/occlum:0.29.0-ubuntu20.04
第三步,运行Occlum镜像,命令如下:
# 1.在主机上创建软链接
mkdir -p /dev/sgx
ln -sf /dev/sgx_enclave /dev/sgx/enclave
ln -sf /dev/sgx_provision /dev/sgx/provision
# 2.以两种方式启动镜像
# (1).特权模式
docker run -it --privileged -v /dev/sgx:/dev/sgx occlum/occlum:[version]-ubuntu20.04
# (2).非特权模式
docker run -it --device /dev/sgx/enclave --device /dev/sgx/provision occlum/occlum:[version]-ubuntu20.04
注意,使用的时候把 [version]
整个替换成所用的Occlum版本,,比如我使用的是0.29.0这个版本,以特权模式启动镜像,命令如下:
docker run -it --privileged -v /dev/sgx:/dev/sgx occlum/occlum:0.29.0-ubuntu20.04
进入容器后,需要验证SGX是否正常工作,
cd /opt/intel/sgxsdk/SampleCode/SampleEnclave && make && ./app
若工作正常,说明Occlum容器可正常使用sgxsdk,可以进行下一步操作。
2. 运行demo程序
进入镜像后,demos文件夹存放在root文件夹下,路径为/root/demos
, 接下来我们以hello_world为例,说明demo程序的编译、构建过程。
第一步,进入hello_world文件夹,使用occlum-gcc编译链编译源文件
cd /root/demos/hello_world \
occlum-gcc -o hello_world hello_world.c
编译成功后,此时hello_world程序是可以正常运行的,可以检查是否编译成功:
./hello_world
第二步,初始化Occlum实例:
occlum new occlum_instance
这时会在当前文件夹下生成occlum_instance文件夹,文件夹中存放的是构建镜像所需的最小文件系统和一个Occlum.json文件,其中可以修改Enclave的堆栈内存布局参数,可以根据程序需要修改。
第三步,生成Occlum安全FS镜像和Occlum Enclave:
cp ../hello_world image/bin
occlum build
最后,执行如下命令运行可信应用程序:
occlum run /bin/hello_world
如果输出Hello World!
,则说明构建成功。
3.说明
这里只是对demo中的hello_world程序进行了说明,Occlum还提供了很多的demo,大家如果感兴趣可以自己去github上读他们的文档。
本文参考以下内容:
- https://occlum.readthedocs.io/
- occlum/occlum: Occlum is a memory-safe, multi-process library OS for Intel SGX (github.com)
- Shen Y, Tian H, Chen Y, et al. Occlum: Secure and efficient multitasking inside a single enclave of intel sgx[C]//Proceedings of the Twenty-Fifth International Conference on Architectural Support for Programming Languages and Operating Systems. 2020: 955-970.