intel sgx开发环境配置

sgx的开发环境配置

参考的文献&博客

主要参考了第一个博客,但是最最详细的是第四个github上的教程,只不过是全英文的有很多linux和sgx方面的专业名词对小白不是很友好。本人主要引用了第一个博客的内容,第一个博客的博主写的很详细,但是本人自己配置的时候还是出现了很多很多意想不到的问题,本博客针对可能出现的问题进行补充和说明。

本人所用的配置

电脑环境

由于现在用的电脑是锐龙处理器,而且没有trustzone,所以使用很久没用的、尘封已久的老、但是跟了我一年的老电脑。操作系统用的是ubuntu(鬼知道重装系统用了多久的时间),装完之后开机要很久,也不知道是不是坏了。

  • 电脑:联想Thinkpad E14

  • 操作系统:ubuntu18.04

  • 处理器:i5-10210U

  • 内存:8G

  • 硬盘:1TB

  • 在电脑BIOS中启用Intel SGX。重装系统不会更改BIOS中的设置,所以即使重装系统,Intel SGX也会一直保持启用状态。

  • 安装如下工具:

    1
    sudo apt-get install gcc git cpuid

检查硬件情况

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

在终端执行

1
cpuid | grep -i sgx

如果看到

1
2
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

安装一些工具

1
sudo apt-get install make

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

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

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

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

克隆仓库:

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

编译Intel(R) SGX Driver

1
cd linux-sgx-driver && make

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

1
2
3
4
5
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

安装一些工具

1
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

注意这里安装工具可能报错如下

这是因为某些软件包需要保持现状,安装可能会破坏原有的软件包依赖关系,所以要安装这个软件包,必须调节软件包之间的相关关系,给个解决的方法链接,简单来说就是用aptitude来代替apt安装,aptitude能解决软件中的依赖关系。

克隆仓库:

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

预编译

此步会克隆几个GitHub,请走代理(不走代理针的好慢好慢):

1
cd linux-sgx && make preparation

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

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

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

1
which ar as ld objcopy objdump ranlib

编译Intel(R) SGX SDK

1
make sdk

此步会输出大约五万行内容(真的时间巨长,等吧),请耐心等待。

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

编译Intel(R) SGX SDK安装器

1
make sdk_install_pkg

此步会输出大约五万行内容(这个时间也很长啊,都看了好多视频了),请耐心等待。

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

安装Intel(R) SGX SDK

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

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

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

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

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

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

SDK安装完成。

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

安装Intel(R) SGX PSW

编译Intel(R) SGX PSW

1
cd ~/linux-sgx && make psw

注意把linux-sgx-install-path下的sgxsdk文件夹移动到根目录下的/opt/intel目录里,再执行上面的这一条指令。此步会输出大约一千行内容,请耐心等待。

编译Intel(R) SGX SDK安装器

1
cd ~/linux-sgx && make deb_psw_pkg

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

添加本地软件源

按照github上的英文教程,需要先生成sgx_debian_local_repo文件夹,最后在~/linux-sgx/linux/installer/deb目录下可以看见这个文件夹,输入如下指令:

1
make deb_local_repo

需要将本地路径追加到软件源文件中,使用sudo vi /etc/apt/sources.list编辑文件,将下面内容添加到文件末尾,注意:你需要把PATH_TO_LOCAL_REPO替换成~/linux-sgx/linux/installer/deb/sgx_debian_local_repo的绝对路径,注意这里的路径需要自己根据自己的位置设置,建议改成绝对路径,我的添加方式如下,大家自己添加的时候注意改成自己的路径哦!

1
deb [trusted=yes arch=amd64] file:/home/harper/inux-sgx/linux/installer/deb/sgx_debian_local_repo bionic main

添加完之后,刷新软件源

1
sudo apt-get update	

安装Intel(R) SGX PSW

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

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

启动aesmd服务

启动

1
sudo systemctl start aesmd

查看aesmd服务启动状态

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

设置aesmd服务开机启动

1
sudo systemctl enable aesmd

安装测试

测试本地认证

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

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

编译样例代码

1
make

执行样例

1
./bin/app

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

1
2
3
4
succeed to load enclaves.
succeed to establish secure channel.
Succeed to exchange secure message...
Succeed to close Session...

我自己跑出来是显示没有成功(狗头),应该是aesmd服务出了点问题,大家可以测试下面的enclave样例

测试enclave样例

我们运行enclave代码

1
cd /opt/intel/sgxsdk/SampleCode/SampleEnclave

编译代码

1
sudo make

执行代码

1
./app

看到如下输出证明安装成功


intel sgx开发环境配置
http://example.com/2022/10/04/intel-sgx配置/
作者
harper
发布于
2022年10月4日
许可协议