3. Intel SGX SDK 安装:把环境一步步搭起来
说实话,SGX 的安装流程在 Intel 官方文档里写得挺全的,但真上手操作时,坑也不少。我最早在 Ubuntu 18.04 上折腾过一次,因为内核版本没对齐,PSW 驱动死活装不上,折腾了大半天。后来我养成了一个习惯——装之前先确认内核版本,这能省下不少时间。
这一章,我会带你走完完整的安装流程:从 Linux 环境准备,到 SDK 安装,再到 PSW/DCAP 驱动部署,最后验证安装是否成功。每一步我都会穿插一些实际项目中的经验,帮你避开那些常见的坑。
3.1 环境准备:先看看你的机器够不够格
在动手之前,先确认三件事:硬件支持、BIOS 开启、操作系统版本。
3.1.1 硬件要求
- CPU: Intel 第 6 代酷睿(Skylake)及以上,且必须支持 SGX。我建议直接用第 8 代以上,兼容性更好。
- BIOS: 必须开启 SGX 选项。不同厂商的 BIOS 菜单位置不一样,但关键词通常是 "SGX" 或 "Software Guard Extensions"。
- 内存: 至少 8GB,推荐 16GB。EPC(Enclave Page Cache)大小受 BIOS 限制,通常最大 128MB 或 256MB。
3.1.2 操作系统要求
官方支持 Ubuntu 18.04/20.04/22.04 LTS 和 RHEL 8.x。我个人习惯用 Ubuntu 20.04 LTS,因为社区活跃,遇到问题容易搜到解决方案。
确认内核版本:
uname -r
SGX 驱动对内核版本有要求。以 Ubuntu 20.04 为例,推荐内核版本为 5.4.0 或 5.11.0。如果你用的是 5.13 以上,可能需要手动编译驱动。
3.1.3 安装依赖包
先把基础工具链装好:
sudo apt update
sudo apt install -y build-essential ocaml ocamlbuild automake autoconf libtool wget python-is-python3 libssl-dev git cmake perl pkg-config
嗯,这里要注意:python-is-python3 这个包在 Ubuntu 20.04 上默认没有,但 SGX SDK 的某些脚本会调用 python 命令。如果不装这个,编译时会报错。我曾经因为这个卡了半小时,后来才发现是 Python 版本的问题。
3.2 安装 Intel SGX SDK
SDK 是开发 enclave 的基础工具包,包含编译器、链接器、库文件和调试工具。安装方式有两种:从源码编译,或者用预编译的二进制包。我推荐后者,省时省力。
3.2.1 下载 SDK 安装包
去 Intel 的 GitHub 仓库下载最新版本:
wget https://download.01.org/intel-sgx/sgx-linux/2.21.1/distro/ubuntu20.04-server/sgx_linux_x64_sdk_2.21.1.100.2.bin
chmod +x sgx_linux_x64_sdk_2.21.1.100.2.bin
版本号可能会更新,建议去 linux-sgx releases 页面确认最新版本。我写这段时用的是 2.21.1,但你可能看到更新的版本。
3.2.2 执行安装
sudo ./sgx_linux_x64_sdk_2.21.1.100.2.bin --prefix=/opt/intel/sgxsdk
安装过程中会询问安装路径,我习惯放在 /opt/intel/sgxsdk。你也可以放在用户目录下,但后续编译其他项目时,环境变量配置会麻烦一些。
安装完成后,设置环境变量:
source /opt/intel/sgxsdk/environment
建议把这行加到 ~/.bashrc 里,这样每次登录终端都能自动加载。
sgx_sdk 环境变量指向不同版本的 SDK,方便切换。我一般会在项目根目录放一个 setenv.sh 脚本,里面写上 source /opt/intel/sgxsdk/environment。
3.3 安装 PSW/DCAP 驱动
PSW(Platform Software)和 DCAP(Data Center Attestation Primitives)是 SGX 的运行时组件。PSW 负责 enclave 的加载和管理,DCAP 提供远程认证能力。
这里有个关键点:PSW 和 DCAP 的版本必须与 SDK 版本匹配。否则,enclave 加载时会报 "AE service" 相关的错误。
3.3.1 安装 PSW
PSW 包含在 Intel SGX 的 RPM/DEB 仓库中。添加仓库并安装:
echo 'deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu focal main' | sudo tee /etc/apt/sources.list.d/intel-sgx.list
wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
sudo apt update
sudo apt install -y libsgx-launch libsgx-urts libsgx-epid libsgx-quote-ex libsgx-dcap-ql
这些包的作用:
| 包名 | 作用 |
|---|---|
libsgx-launch |
enclave 启动服务 |
libsgx-urts |
用户态运行时库 |
libsgx-epid |
EPID 认证协议支持 |
libsgx-quote-ex |
quote 生成扩展库 |
libsgx-dcap-ql |
DCAP 引用库 |
3.3.2 安装 DCAP 驱动
DCAP 驱动是内核模块,负责管理 EPC 内存和 enclave 的创建。安装方式:
sudo apt install -y linux-headers-$(uname -r)
wget https://download.01.org/intel-sgx/sgx-linux/2.21.1/distro/ubuntu20.04-server/sgx_linux_x64_driver_2.11.0_2d2b795.bin
chmod +x sgx_linux_x64_driver_2.11.0_2d2b795.bin
sudo ./sgx_linux_x64_driver_2.11.0_2d2b795.bin
安装完成后,检查驱动是否加载:
lsmod | grep sgx
如果看到 intel_sgx 或 sgx 模块,说明驱动加载成功。
3.4 验证安装:跑一个 Hello World
安装完成后,最好跑一个简单的 enclave 程序验证一下。SDK 自带了示例代码,我们直接用:
cd /opt/intel/sgxsdk/SampleCode/SampleEnclave
make
./app
如果输出类似下面的内容,说明安装成功:
Enclave created successfully.
Message from enclave: Hello World!
Enclave destroyed successfully.
嗯,这里要注意:如果报错 Failed to create enclave,大概率是驱动没加载,或者 BIOS 里 SGX 没开启。先检查 lsmod | grep sgx,再重启进 BIOS 确认。
3.5 知识体系总览
下面这张图总结了 SGX 安装的完整流程和组件关系:
3.6 常见问题与避坑指南
- 驱动加载失败: 检查内核版本是否匹配。如果不匹配,从源码编译驱动。我曾经在 Ubuntu 22.04 上编译过,需要安装
linux-headers-$(uname -r)和dkms。 - enclave 创建失败: 先确认 BIOS 里 SGX 是否开启。有些主板默认是 "Software Controlled",需要改成 "Enabled"。
- AE service 错误: PSW 服务没启动。运行
systemctl start aesmd手动启动,并设置开机自启。 - 编译示例代码报错: 检查 SDK 环境变量是否加载。运行
echo $SGX_SDK,如果为空,重新source一下。