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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章