Skip to content

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也会一直保持启用状态。
  • 安装如下工具:
bash
sudo apt-get install gcc git cpuid

检查硬件情况

这是Intel官方给出来的方法:如何确定英特尔® Software Guard Extensions (英特尔® SGX) 处理器是否支持 DCAP 和 FLC

在终端执行

bash
cpuid | grep -i sgx

如果看到

bash
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

安装一些工具

bash
sudo apt-get install make

检查系统内核头文件是否与现有内核匹配:

bash
dpkg-query -s linux-headers-$(uname -r)

如果看到Status: install ok installed说明没有问题

否则要安装匹配的内核头文件:sudo apt-get install linux-headers-$(uname -r)

克隆仓库:

bash
git clone https://github.com/intel/linux-sgx-driver.git

编译Intel(R) SGX Driver

bash
cd linux-sgx-driver && make

编译完后,依次执行如下命令进行安装

bash
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

安装一些工具

bash
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

克隆仓库:

bash
git clone https://github.com/intel/linux-sgx.git

预编译

此步会克隆几个GitHub,请走代理:

bash
cd linux-sgx && make preparation

将预编译出的文件拷贝至系统路径下:

bash
sudo cp ~/linux-sgx/external/toolset/ubuntu18.04/* /usr/local/bin

执行如下命令检查是否拷贝成功,如果成功会输出路径:

bash
which ar as ld objcopy objdump ranlib

编译Intel(R) SGX SDK

bash
make sdk

此步会输出大约五万行内容,请耐心等待。

最后没有报错,说明编译成功。

编译Intel(R) SGX SDK安装器

bash
make sdk_install_pkg

此步会输出大约五万行内容,请耐心等待。

编译完成后会输出Generated sdk installer: ./linux/installer/bin/sgx_linux_x64_sdk_xxx.bin

安装Intel(R) SGX SDK

首先我们先创建一个目录,作为SDK的安装目录

bash
mkdir -p ~/linux-sgx-install-path

此步xxx要改为编译Intel(R) SGX SDK安装器最后的输出,在目录linux-sgx/linux/installer/bin下可以看到此文件

bash
cd linux/installer/bin && ./sgx_linux_x64_sdk_xxx.bin --prefix ~/linux-sgx-install-path

根据安装最后的提示输出刷新环境变量

bash
source ~/linux-sgx-install-path/sgxsdk/environment

SDK安装完成。

此时进入linux-sgx-install-path/SampleCode下尝试样例代码是不会成功的,需要安装PSW之后才可运行样例。

安装Intel(R) SGX PSW

编译Intel(R) SGX PSW

bash
cd ~/linux-sgx && make psw

此步会输出大约一千行内容,请耐心等待。

编译Intel(R) SGX SDK安装器

bash
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的绝对路径:

bash
deb [trusted=yes arch=amd64] file:/PATH_TO_LOCAL_REPO bionic main

添加完之后,刷新软件源

bash
sudo apt-get update

安装Intel(R) SGX PSW

bash
sudo apt-get install libsgx-launch libsgx-urts libsgx-epid libsgx-quote-ex libsgx-dcap-ql

如果现在去测试样例,会报错failed to load enclave,Intel给出解决方案,要启动aesmd服务。

启动aesmd服务

启动

bash
sudo systemctl start aesmd

查看aesmd服务启动状态

bash
cat /var/log/syslog | grep -i aesm

设置aesmd服务开机启动

bash
sudo systemctl enable aesmd

安装测试

我们使用SDK给出的样例代码LocalAttestation对安装情况进行测试

bash
cd ~/linux-sgx-install-path/sgxsdk/SampleCode/LocalAttestation

编译样例代码

bash
make

执行样例

bash
./bin/app

如果看到如下输出,说明安装成功

bash
succeed to load enclaves.
succeed to establish secure channel.
Succeed to exchange secure message...
Succeed to close Session...