Ubuntu18.04下Intel SGX开发环境搭建

1.准备工作

1.1 查看硬件SGX支持

首先应该确认计算机CPU是否支持SGX,此处有两种方法:

  1. https://ark.intel.com/content/www/us/en/ark.html#@PanelLabel12213 为Intel提供硬件信息的官方网址,输入电脑CPU型号,查看是否有SGX支持。
  2. 根据https://github.com/ayeks/SGX-hardware/blob/master/test-sgx.c,在Linux或者Windows环境下,编译该代码,查看运行结果。本计算机的运行结果如下图所示:

[点击并拖拽以移动]

可见,本计算机支持SGX的硬件数为1,即为支持。

本次实验采用的硬件平台为Intel® Core™ i7-9700K,为Intel i7第9代Products formerly Coffee Lake 系列CPU,https://ark.intel.com/content/www/us/en/ark/products/186604/intel-core-i7-9700k-processor-12m-cache-up-to-4-90-ghz.html,14纳米制程,8核8线程,标准频率为3.60 GHz。具体信息如下图所示。

​ [点击并拖拽以移动] ​​

该处理器支持SGX,如下图所示。

在这里插入图片描述

对于支持SGX的计算机,也需要在BIOS里开启SGX选项。开机按F2键进入BIOS界面,开启SGX选项。

[点击并拖拽以移动]
查看系统信息

lsb_release -a

实验的软件平台为Ubuntu18.04.2 LTS,信息如下图所示:
在这里插入图片描述
根据硬件是否支持SGX:

  1. 不支持,则仅安装SDK,在编译代码时,make SGX_MODE=SIM,即在模拟模式下运行,https://blog.csdn.net/q2240441362/article/details/80343962
  2. 如支持,则需要首先安装一些支持库,然后按顺序安装SGX driver,PSW和SDK,https://github.com/intel/linux-sgx

1.2 下载安装包

根据硬件和软件环境,这里选择Intel SGX Linux 2.3.1 Release for Ubuntu18.04版本,下载网址为https://download.01.org/intel-sgx/linux-2.3.1/ubuntu18.04/,界面如下图所示。

[点击并拖拽以移动]

其中的libsgx-enclave-common_2.3.101.46683-1_amd64.deb对应SGX PSW,sgx_linux_x64_driver_4d69b9c.bin对应SGX driver,sgx_linux_x64_sdk_2.3.101.46683.bin对应SDK。下载这三个文件即可。

注意:较高版本的PSW改为libsgx-enclave-common__amd64.deb文件

1.3 安装工具

1.3.1 安装工具库

在Ubuntu18.04下,输入以下命令。

sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev
sudo apt-get install build-essential
sudo apt-get install uuid-dev libxml2-dev cmake libsystemd-dev

1.3.2 安装alien

sudo apt-get install alien

1.3.3 下载并安装Intel® Capability Licensing Service(iclsClient):

下载网址为http://registrationcenter-download.intel.com/akdlm/irc_nas/11414/iclsClient-1.45.449.12-1.x86_64.rpm,进入下载文件夹,编译 iclsClient:

sudo alien --scripts iclsClient-1.45.449.12-1.x86_64.rpm

会在文件夹中生成同名的deb文件,然后安装iclsClient:

sudo dpkg -i iclsclient_1.45.449.12-2_amd64.deb

iclsClient会安装在 /opt/intel/ 目录下生成的iclsClient文件夹。

1.3.4 安装JHI服务:

https://github.com/intel/dynamic-application-loader-host-interface中下载dynamic-application-loader-host-interface源码,解压后进入路径,使用以下命令编译并安装JHI服务。

cmake .;make;sudo make install;sudo systemctl enable jhi

2 安装SGX

这里参考了https://blog.csdn.net/cyLee_/article/details/90200470https://blog.csdn.net/q2240441362/article/details/80343962

2.1 安装SGX驱动

由于下载的.bin文件没有被执行的权限,使用以下命令修改权限。

chmod 777 sgx_linux_x64_driver_4d69b9c.bin

运行该.bin文件

sudo ./sgx_linux_x64_driver_4d69b9c.bin

SGX驱动会将其设置为开机启动,并在 /opt/intel/sgxdriver 目录下生成uninstall.sh脚本。为确保驱动已经成功安装,可输入以下命令

ls /dev/isgx >/dev/null 2>1 && echo "SGX Driver installed" || echo "SGX Driver NOT installed"

打印SGX Driver installed即为安装成功。

2.2 安装SGX PSW

在当前路径下,使用以下命令安装

sudo dpkg -i libsgx-enclave-common_2.3.101.46683-1_amd64.deb

PSW的库文件默认安装在了 /usr/lib/x86_64-linux-gnu文件夹下,AESM服务以及相关的库安装在了 /opt/intel/libsgx-enclave-common文件夹下。

2.3 安装SGX SDK

为下载得到的SDK文件添加可执行权限:

chmod 777 sgx_linux_x64_sdk_2.3.101.46683.bin

使用以下命令安装SGX SDK:

sudo ./sgx_linux_x64_sdk_2.3.101.46683.bin

安装过程中会询问安装的路径,可以输入yes安装到当前文件夹,也可以输入no选择自己想安装到的文件夹。这里选择yes,将SGX SDK安装到 /opt/intel/sgxsdk 文件夹下。如果选择no,则需要手动输入自定义的路径。

2.4 修改环境变量

如果SDK安装在了自定义的路径下,由于Makefile默认的SDK路径是在opt/intel/sgxsdk,所以在编译代码时,Makefile里的SDK路径要修改为安装的路径。

安装完成时,编译代码报错

Please use the correct uRTS library from PSW package.
Error: Unexpected error occurred.

这里参考https://github.com/intel/linux-sgx/issues/47,编译时没有使用正确的PSW提供的libsgx_urts.so文件,这个文件应该不是opt/intel/sgxsdk里的那个同名文件,而应该是PSW提供的。所以要添加这个库所在的路径:/usr/lib/x86_64-linux-gnu。使用以下命令打开bashrc文件。

sudo gedit ~/.bashrc

在文件末尾添加以下代码。

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH

重启终端,运行以下命令,确定环境变量添加成功。

echo $LD_LIBRARY_PATH

在模拟模式下编译,可能会出现以下错误。

libsgx_urts_sim.so:cannot open sharedobject file: No such file or directory

这也是库文件路径的问题,因为处于模拟模式,所以只需要添加SDK下的库文件路径即可。这里,该文件在opt/intel/sgxsdk/lib64下,所以在bashrc文件里添加以下语句即可。

export LD_LIBRARY_PATH= opt/intel/sgxsdk/lib64:$LD_LIBRARY_PATH

由于 opt/intel/sgxsdk 下的文件不可修改,所以这里可以将sgxsdk文件夹复制到其它路径下,进行代码的编辑与测试。

2.5 环境测试

进入到sgxsdk路径下的SampleCode文件夹下,以SampleEnclave项目为例,

cd SampleEnclave
make

编译过程会生成app可执行文件

./app

程序运行结果如下图,表明环境安装成功。
在这里插入图片描述
关于SGX程序的编写,请参考我的另一篇文章:Intel SGX程序编写

3 环境卸载

按照SGX driver、PSW、SDK的顺序卸载。

3.1 SGX driver卸载

安装之后在 /opt/intel/sgxdriver 路径下回生成uninstall.sh文件,运行该文件即可卸载驱动。

3.2 卸载PSW

之前安装的是libsgx-enclave-common_2.3.101.46683-1_amd64.deb,这里使用以下命令卸载

sudo dpkg -P libsgx-enclave-common

3.3 卸载SDK

在安装SDK的路径下,会生成对应的uninstall.sh,运行该文件即可卸载SDK。

参考资料:

  1. https://ark.intel.com/content/www/us/en/ark.html#@PanelLabel122139
  2. https://github.com/ayeks/SGX-hardware/blob/master/test-sgx.c
  3. https://ark.intel.com/content/www/us/en/ark/products/186604/intel-core-i7-9700k-processor-12m-cache-up-to-4-90-ghz.html
  4. https://blog.csdn.net/q2240441362/article/details/80343962
  5. https://github.com/intel/linux-sgx
  6. https://download.01.org/intel-sgx/linux-2.3.1/ubuntu18.04/
  7. http://registrationcenter-download.intel.com/akdlm/irc_nas/11414/iclsClient-1.45.449.12-1.x86_64.rpm
  8. https://github.com/intel/dynamic-application-loader-host-interface
  9. https://github.com/intel/linux-sgx/issues/47
  10. https://download.01.org/intel-sgx/linux-2.3.1/docs/Intel_SGX_Installation_Guide_Linux_2.3.1_Open_Source.pdf
  11. https://blog.csdn.net/cyLee_/article/details/90200470
发布了10 篇原创文章 · 获赞 6 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_35565669/article/details/99706587