Intel(R) SGX环境在Ubuntu 18.04的安装
本文安装针对的是不支持FLC(Flexible Launch Control)的处理器,如果你的处理器支持FLC,请不要遵循此博客进行安装;如果你不清楚你的处理器是否支持FLC,请稍向后阅读,博客会给出检查方法。
前置工作
- 装有Ubuntu-18.04.6-desktop-amd64操作系统的物理机一台。
- 按照镜像与代理给出的方法将Ubuntu的源修改为阿里源。
- 在电脑BIOS中启用Intel SGX。重装系统不会更改BIOS中的设置,所以即使重装系统,Intel SGX也会一直保持启用状态。
- 安装如下工具:
sudo apt-get install gcc git cpuid
检查硬件情况
这是Intel官方给出来的方法:如何确定英特尔® Software Guard Extensions (英特尔® SGX) 处理器是否支持 DCAP 和 FLC
在终端执行
cpuid | grep -i sgx
如果看到
SGX: Software Guard Extensions supported = true
SGX_LC: SGX launch config supported = false
说明本博客安装方法适合你硬件情况。
安装Intel(R) SGX环境
安装共有3大步,分别是:
- 安装Intel(R) SGX Driver
- 安装Intel(R) SGX SDK
- 安装Intel(R) SGX PSW
安装Intel(R) SGX Driver
安装一些工具
sudo apt-get install make
检查系统内核头文件是否与现有内核匹配:
dpkg-query -s linux-headers-$(uname -r)
如果看到Status: install ok installed
说明没有问题
否则要安装匹配的内核头文件:sudo apt-get install linux-headers-$(uname -r)
克隆仓库:
git clone https://github.com/intel/linux-sgx-driver.git
编译Intel(R) SGX Driver
cd linux-sgx-driver && make
编译完后,依次执行如下命令进行安装
sudo mkdir -p "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
sudo cp isgx.ko "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
sudo sh -c "cat /etc/modules | grep -Fxq isgx || echo isgx >> /etc/modules"
sudo /sbin/depmod
sudo /sbin/modprobe isgx
至此Intel(R) SGX Driver安装完成。
安装Intel(R) SGX SDK
安装一些工具
sudo apt-get install build-essential python ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper reprepro unzip
克隆仓库:
git clone https://github.com/intel/linux-sgx.git
预编译
此步会克隆几个GitHub,请走代理:
cd linux-sgx && make preparation
将预编译出的文件拷贝至系统路径下:
sudo cp ~/linux-sgx/external/toolset/ubuntu18.04/* /usr/local/bin
执行如下命令检查是否拷贝成功,如果成功会输出路径:
which ar as ld objcopy objdump ranlib
编译Intel(R) SGX SDK
make sdk
此步会输出大约五万行内容,请耐心等待。
最后没有报错,说明编译成功。
编译Intel(R) SGX SDK安装器
make sdk_install_pkg
此步会输出大约五万行内容,请耐心等待。
编译完成后会输出Generated sdk installer: ./linux/installer/bin/sgx_linux_x64_sdk_xxx.bin
。
安装Intel(R) SGX SDK
首先我们先创建一个目录,作为SDK的安装目录
mkdir -p ~/linux-sgx-install-path
此步xxx要改为编译Intel(R) SGX SDK安装器最后的输出,在目录linux-sgx/linux/installer/bin
下可以看到此文件
cd linux/installer/bin && ./sgx_linux_x64_sdk_xxx.bin --prefix ~/linux-sgx-install-path
根据安装最后的提示输出刷新环境变量
source ~/linux-sgx-install-path/sgxsdk/environment
SDK安装完成。
此时进入linux-sgx-install-path/SampleCode
下尝试样例代码是不会成功的,需要安装PSW之后才可运行样例。
安装Intel(R) SGX PSW
编译Intel(R) SGX PSW
cd ~/linux-sgx && make psw
此步会输出大约一千行内容,请耐心等待。
编译Intel(R) SGX SDK安装器
cd ~/linux-sgx && make deb_psw_pkg
此步会输出大约八千行内容,请耐心等待。
添加本地软件源
需要将本地路径追加到软件源文件中,使用sudo vi /etc/apt/sources.list
编辑文件,将下面内容添加到文件末尾,注意:你需要把PATH_TO_LOCAL_REPO替换成~/linux-sgx/linux/installer/deb/sgx_debian_local_repo
的绝对路径:
deb [trusted=yes arch=amd64] file:/PATH_TO_LOCAL_REPO bionic main
添加完之后,刷新软件源
sudo apt-get update
安装Intel(R) SGX PSW
sudo apt-get install libsgx-launch libsgx-urts libsgx-epid libsgx-quote-ex libsgx-dcap-ql
如果现在去测试样例,会报错failed to load enclave
,Intel给出解决方案,要启动aesmd服务。
启动aesmd服务
启动
sudo systemctl start aesmd
查看aesmd服务启动状态
cat /var/log/syslog | grep -i aesm
设置aesmd服务开机启动
sudo systemctl enable aesmd
安装测试
我们使用SDK给出的样例代码LocalAttestation
对安装情况进行测试
cd ~/linux-sgx-install-path/sgxsdk/SampleCode/LocalAttestation
编译样例代码
make
执行样例
./bin/app
如果看到如下输出,说明安装成功
succeed to load enclaves.
succeed to establish secure channel.
Succeed to exchange secure message...
Succeed to close Session...