Ubuntu18.04中配置sgx环境:
提示:本教程仅仅适用于Ubuntu18.04系统,而不一定适合ubuntu虚拟机
提示:本教程仅仅适用于计算机CPU支持sgx的电脑,配置真实环境,不使用模拟环境https://ark.intel.com/content/www/us/en/ark.html#@PanelLabel12213 为Intel提供硬件信息的官方网址,输入电脑CPU型号,查看是否有SGX支持。如下图一所示,则CPU支持sgx

大体步骤:
- 在bios中开启sgx服务(enabled),设置大小为128MB(这是我电脑能设置的最大的了,更大的应该也行)
- 在电脑上装好ubuntu18.04系统
- 安装sgx驱动
- 安装sgx sdk
- 安装sgx psw
- 测试是否配置成功(运行样例enclave程序)
详细步骤:
第一步:在bios中开启sgx服务
-
百度如何在自己类型的电脑进入bios界面
例如DELL是开机启动时不停按F2键 -
在bios中找到Software Guard Extendsions(SGX)项
推荐设置为Enabled(又称启用状态),如果没有Enabled也可以设置为Software Controlled(又称软件控制,此时sgx仍处于禁用状态,直到通过软件应用程序启用为止)
然后在紧接着的下一行将内存大小设置为可选项中的最大值(我电脑最大支持128MB)
结果如下图二所示

第二步:在电脑上装好ubuntu18.04系统
- 此处ubuntu系统不能是虚拟机,要在电脑上直接安装Ubuntu系统,可以在windows系统下安装双系统ubuntu。
- 进入Ubuntu系统,从这一步开始,一直在Ubuntu18.04中运行。
- 在Ubuntu18.04系统上,安装一些必要的包,例如gcc,make等。
输入以下命令
sudo apt install gcc
sudo apt install make
注意,在下面的命令运行过程中,如果有报错,可能是提示缺少一些库,且会提示安装对应库。按照提示安装即可。
第三步: 安装sgx驱动
-
在这要检查硬件,通过编译一个小程序判断环境是否支持SGX
情况一: BIOS中SGX如果设置为Enabled,则可以在终端中按序输入以下命令,进行编译小程序
git clone https://github.com/ayeks/SGX-hardware.git
cd SGX-hardware
gcc test-sgx.c -o test-sgx
./test-sgx执行结果如下,则代表硬件环境支持SGX Extended feature bits (EAX=07H, ECX=0H) eax: 0 ebx: 29c6fbf ecx: 0 edx: 0 sgx available: 1 (注意:此处一定要为1) CPUID Leaf 12H, Sub-Leaf 0 of Intel SGX Capabilities (EAX=12H,ECX=0) eax: 1 ebx: 0 ecx: 0 edx: 241f sgx 1 supported: 1 (注意:此处一定要为1) sgx 2 supported: 0 MaxEnclaveSize_Not64: 1f MaxEnclaveSize_64: 24 (注意:执行结果别处可以有细微不同,只要标记注意的地方为1就可以)情况二: BIOS中SGX如果设置为Software Controlled(又称软件控制),则应该通过软件应用程序启用sgx。这一步请自行百度。启用后,按照情况一执行命令,编译小程序判断环境是否支持sgx即可。
-
下载安装驱动sgx-driver
- 进入以下网站,将三个bin文件下载。(默认下载到/home/用户名/Downloads文件夹下)
https://download.01.org/intel-sgx/sgx-linux/2.13/distro/ubuntu18.04-server/ - 到下载文件夹下,输入
sudo chmod 777 sgx_linux_x64_driver_2.11.0_0373e2e.bin
以赋予这个.bin文件执行权限 - 运行这个.bin文件
sudo ./sgx_linux_x64_driver_2.11.0_0373e2e.bin
ok,驱动安装完成
- 进入以下网站,将三个bin文件下载。(默认下载到/home/用户名/Downloads文件夹下)
-
准备阶段
-
安装编译SGX SDK要用到的工具
sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置
由于网络原因,有些包容易安装失败,出现失败情况,不用担心,重复运行这条命令,直至全部安装成功即可。 -
安装编译SGX PSW要用到的工具
sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev debhelper cmake reprepro unzip
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置 -
从仓库获取源码
到下载文件夹下,输入
git clone https://github.com/intel/linux-sgx.git
运行成功后,下载文件夹中将会多出一个linux-sgx文件。
进入下边这个网站,将整个项目down下来,然后把./QuoteVerification和./QuoteGeneration俩文件夹直接copy到 linux-sgx/external/下。
https://github.com/intel/SGXDataCenterAttestationPrimitives/
到下载文件夹下,输入
cd linux-sgx && make preparation -
把准备好的工具列表添加到全局变量中,方便之后编译工作的展开
到linux-sgx文件夹下,输入以下命令
sudo cp external/toolset/{current_distr即当前系统的版本}/{as,ld,objdump} /usr/local/bin
再用下面这个语句检查是不是添加成功:
which as ld objdump -
编译SGX SDK和SGX SDK安装工具(installer)
进入linux-sgx文件夹,输入以下命令
make sdk
运行完成后,再输入以下命令
make sdk_install_pkg
成功运行的话,在linux-sgx/linux/installer/bin文件夹下会有一个sgx_linux_x64_sdk_${version}.bin文件生成
-
第四步: 安装SGX SDK
- 安装好需要用到的工具
输入以下命令
sudo apt-get install build-essential python
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置 - 安装sdk
进入linux-sgx文件夹,输入以下两条命令
cd linux/installer/bin
./sgx_linux_x64_sdk_${version}.bin
注意:运行第二条命令时,它询问是否安装在当前文件夹的时候,最好选择“no”,然后输入/opt/intel/, 即将SGX SDK安装在/opt/intel/文件夹下。
安装好了之后,会显示它安装的路径,记下来,以后编译运行sgx程序的时候需要先运行以下命令,令开发环境生效
source /opt/intel/sgxsdk/environment
该命令在任何位置都可运行
运行该命令
第五步: 安装SGX PSW
- 命令行运行以下命令添加下载Intel sgx psw的下载路径
echo ‘deb [arch=amd64] https://download.01.org/intel-sgx/sgx_repo/ubuntu bionic main’ | sudo tee /etc/apt/sources.list.d/intel-sgx.list
该命令在任何位置都可运行 - 命令行运行以下命令,添加仓库拉取的ssh密钥
wget -qO - https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key | sudo apt-key add -
运行后等一会儿看到【ok】就是运行成功。
该命令在任何位置都可运行 - 更新一下apt-get的列表
sudo apt-get update
该命令在任何位置都可运行 - 分别安装SGX PSW 提供的3个服务
分别是launch、EPID-based attestation和Algorithm agnostic attestation
输入以下命令
sudo apt-get install libsgx-launch libsgx-urts
sudo apt-get install libsgx-epid libsgx-urts
sudo apt-get install libsgx-quote-ex libsgx-urts
sudo apt-get install libsgx-dcap-ql //但这句其实可能是没有用的,但是还是运行吧。
该命令默认安装在系统上,所以可以在任何位置运行,不用担心安装位置
安装完毕,可以在/opt/intel/目录下找到一个sgx-asem-services目录
第六步: 测试是否配置成功
进入安装目录(我的是/opt/intel/sgxsdk),再进入/SampleCode/SampleEnclave目录
- 首先准备一下编译环境
输入以下命令
source /opt/intel/sgxsdk/environment - 查看当前文件目录:
输入以下命令
ls
结果返回为
App Enclave Include Makefile README.txt - 编译
输入以下命令
make - 再次查看文件目录
输入以下命令
ls
结果返回为
app App Enclave enclave.signed.so enclave.so Include Makefile README.txt - 运行
输入以下命令
./app
结果返回如下
Checksum(0x0x7ffd6d822ff0, 100) = 0xfffd4143
Info: executing thread synchronization, please wait…
Info: SampleEnclave successfully returned.
Enter a character before exit …
hello world
恭喜,环境配置成功!!!
最后十分感谢我所参考的博主分享的教程
假如对我的某些步骤不理解,可以去这个大佬的文章中研究。
参考链接:
https://blog.youkuaiyun.com/weixin_40893822/article/details/114005699
推荐以下链接,研究BIOS中Software Controlled(又称软件控制)的原理,以及如何通过软件启用sgx(不一定管用,但是看看也能了解些信息)
https://www.idcbest.com/idcnews/11006171.html
https://github.com/intel/sgx-software-enable
https://blog.youkuaiyun.com/kimbing/article/details/120023776
699





