本文介绍如何基于Intel SGX SDK开发和构建,并部署一个名为helloworld的SGX应用,这个应用在可信区周期性地生产消息并传递给不可信代码(缓冲区),然后输出到终端。
前提条件
- 创建加密计算托管集群。
- 开发编译环境依赖:
- AliyunLinux 2或CentOS/RHEL7+
- Intel SGX Driver
- Intel SGX SDK
- Intel SGX PSW
- AESM service
基本原理

SGX程序基本原理说明如下:
- SGX应用由两部分组成:
- untrusted不可信区
如果代码和数据运行在普通非加密内存区域,程序
main
入口必须在非可信区。SGX程序原理图中的main()
和bar()
函数均在非可信区。 - trusted可信区
如果代码和数据运行在硬件加密内存区域,此区域由CPU创建且只有CPU有权限访问。SGX程序原理图中的
helloworld()
和foo()
函数运行在可信区。
- untrusted不可信区
- 非可信区只能通过ECALL函数调用可信区内的函数。
- 可信区只能通过OCALL函数调用非可信区的函数。
- ECALL函数和OCALL函数通过EDL文件声明。
示例
本示例中SGX应用helloworld所涉及的应用编译、镜像构建以及部署等示例源码位于github。
示例代码目录结构
sgx-device-plugin/samples/hello_world/
├── Dockerfile
├── Makefile
├── README.md
└── src
├── App
│ ├── App.cpp
│ └── App.h
├── Enclave
│ ├── Enclave.config.xml
│ ├── Enclave.cpp
│ ├── Enclave.edl
│ ├── Enclave.h
│ ├── Enclave.lds
│ └── Enclave_private.pem
├── Include
└── Makefile
说明
src
代码目录和文件说明如下:
- App目录存放不可信区域代码,包括main入口、OCALL函数内具体逻辑代码等。
- Enclave目录存放可信区域代码,包括ECALL函数内具体逻辑代码。
文件 说明 Enclave.edl EDL(Enclave Description Language)文件。 Enclave.lds Enclave linker script。 Enclave_private.pem enclave.so的签名私钥。 Enclave.config.xml Enclave配置文件,如堆栈大小、是否开启Debug等。 Enclave.h和Enclave.cpp 应用安全区代码实现。 - Include目录是不可信代码和可信代码共享的头文件。
文件路径 | 说明 | 示例代码 |
---|---|---|
Encalve/Enclave.edl | EDL中声明了一个公共ECALL函数,每个SGX应用的EDL必须至少声明一个:
由于本例中安全区不需要向非安全区调用(OCALL),所以只声明了一个ECALL函数 |
|
Enclave/Enclave.lds | - |
|
Enclave/Enclave.config.xml | - |
|
Enclave/Enclave.h | 这个头文件内容基本为空。 |
|
Enclave/Enclave.cpp | - |
|
Enclave/Enclave_private.pem | 生成签名密钥。 |
|
App/App.h | - |
|
App/App.cpp | - |
|
在文档使用中是否遇到以下问题
更多建议
匿名提交