先決條件
Intel SGX開發環境搭建需要幾個先決條件:
至少6th系列CPU,最好是8th系列CPU,以支持Intel增添的安全相關的FLC指令,更好地兼容ECDSA類型的RA服務
在BIOS中將SGX服務設為【enabled】
如果是8th的CPU,需要在BIOS中啟動FLC。注意,有FLC和無FLC的開發環境搭建過程存在不同,現有的官方過程可能對有FLC的平台上SGX的開發環境搭建更為友好,在這里僅介紹無FLC的平台上SGX開發環境的搭建。
查看系統cpu是否支持:https://ark.intel.com/content/www/cn/zh/ark/products/122589/intel-core-i7-8550u-processor-8m-cache-up-to-4-00-ghz.html
Build and Install the Intel® SGX Driver
SGX驅動安裝有兩種方式,一種是運行可執行文件直接默認安裝,一種是源碼安裝方式。源碼安裝比較復雜容易出問題,踩坑不少,不做推薦,感興趣的可自行依照sgx-driver-old的指導安裝sgx驅動。特別需要注意的是,這個驅動是老版本的驅動,並不支持FLC微指令以及相關的SGX指令集。新版本的驅動在sgx-driver-new(DCAP)項目中。
運行可執行文件直接默認安裝的方法是:
1.安裝必要依賴
-
sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl
2.到Linux-sgx-repo將三個文件下載(默認下載到/home/<username>/Downloads文件夾下):
3.到下載文件夾下,輸入
- sudo chmod 777 sgx_linux_x64_driver_2.11.0_0373e2e.bin
以賦予這個.bin文件執行權限
4. 運行這個.bin文件
- sudo ./sgx_linux_x64_driver_2.11.0_0373e2e.bin
ok,驅動安裝完成
Build and install the Intel® SGX SDK and Intel® SGX PSW Package
准備階段
安裝編譯SGX SDK要用到的工具
- sudo apt-get install build-essential ocaml ocamlbuild automake autoconf libtool wget python libssl-dev git cmake perl
特別注意,gcc的版本必須要在7.3以上,glibc的版本必須在2.27以上,如果沒有,必須先升級(Ubuntu18.04默認安裝的是剛好能夠滿足)
安裝編譯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
- cd linux-sgx && make preparation
如果報以下錯誤:
- ./external/dcap_source/QuoteVerification/prepare_ssl.sh nobuild
- ./external/dcap_source/QuoteGeneration/download_prebuilt.sh
說No such file or directory exists的話,OK,這就是個坑,這個dcap其實是ECDSA模式的RA的一個安全基礎模塊,Intel建議在安裝驅動的時候一並安裝(也就是可能會直接有什么語句把響應的包寫在這個./external/dcap_source文件夾下面)。但是!這個服務它起效的前提條件是CPU支持FLC,我就佛了,敢情是不支持FLC的6th的CPU就沒法用這個dcap(親測可以安裝但可能就是在以后調RA的時候會報錯……問就是嘗試踩坑然后到RA的時候總是沒有untrusted的.so文件,RA失敗,一切從頭來過……),然后沒有dcap,這一步都執行不下去
目前的解決辦法是,到sgx-driver-new上將整個項目down下來,然后把./QuoteVerification和./QuoteGeneration倆文件夾直接copy到./external下,再運行make preparation。一切順利執行,沒有報錯。
把准備好的工具列表添加到全局變量中,方便之后編譯工作的展開:
- sudo cp external/toolset/{current_distr}/{as,ld,ld.gold,objdump} /usr/local/bin
再用下面這個語句檢查是不是添加成功:
- which as ld ld.gold objdump
編譯SGX SDK和SGX SDK安裝工具(installer)
1.進入./linux-sgx文件夾(其實應該也是一直在這個文件夾下),命令行執行
- make sdk
再命令行執行:
- make sdk_install_pkg
成功運行的話,在linux/installer/bin文件夾下會有一個sgx_linux_x64_sdk_${version}.bin文件生成
安裝SGX SDK
為什么先安裝SDK而不是像官網說的先去吧SGX PSW也編譯好呢?別問,問就是報錯。如果先去編譯psw,它會返回一個…/sgxsdk不存在的錯誤,說明psw需要依賴SGX SDK,或者它需要根據安裝好的SDK構造一些依賴關系,所以,先安裝SDK吧。
安裝好需要用到的工具
- sudo apt-get install build-essential python
無腦運行以下命令:
- cd linux/installer/bin
- ./sgx_linux_x64_sdk_${version}.bin
這里特別提示存在一個坑,就是它詢問是否存在當前文件夾的時候,最好選擇“no”,然后將SGX SDK安裝在/opt/intel/文件夾下。
為啥呢?
因為在搞psw的時候吼,它會從這個文件夾讀取sgxsdk的一些內容,當然如果願意改寫Makefile的 話, 當我沒說……
安裝好了之后,會顯示它安裝的路徑,記下來,以后編譯運行sgx程序的時候需要先
- source ${sgx-sdk-install-path}/environment
比如這里就是
- source /opt/intel/sgxsdk/environment
令開發環境生效
安裝PSW
誒還沒編譯咋就安裝了呢?
PSW也有兩種安裝方式,一是按照編譯源碼得到installer,像SDK一樣去安裝,二是通過添加.git倉庫,直接使用apt-get 的方式安裝。
第一種屬實是坑很多,個人是沒搞出來,老是報錯說沒有deb_libsgx_qe3_logic_pkg,一看,確實沒有,也沒有在其他文件夾里找到,無奈,作罷。
第二種簡單直接,適合無腦操作:
命令行運行以下命令添加下載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
命令行運行:
- wget https://download.01.org/intel-sgx/sgx_repo/ubuntu/intel-sgx-deb.key
- sudo apt-key add intel-sgx-deb.key
據說是添加倉庫拉取的ssh密鑰?等一會兒看到【ok】就是運行成功。
3. 更新一下apt-get的列表:
- sudo apt-get update
嫌速度慢可以換個鏡像,aliyun不錯
4. SGX PSW 提供了3個服務,分別是launch、EPID-based attestation和Algorithm agnostic attestation,從2.8版本開始,PSW整體拆分成這三個小服務,可以分別安裝:
- 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目錄
測試一下吧!
至此,按照driver→SGX SDK→SGX PSW的順序將環境搭建好了,可以進入安裝目錄(我的是/opt/intel/sgxsdk),再進入/SampleCode/RemoteAttestation目錄,測試一下RA是否能夠運行。
首先准備一下編譯環境:(這里其實可以不用,但以后開發必須要養成習慣,或者直接把這個寫成全局環境變量)
- source /opt/intel/sgxsdk/environment
命令行編譯,此時不指定編譯模式,默認是硬件模式
- make
編譯順利不報錯的話,會生成一個.app的文件,運行它
- ./app
如果能夠正常運行,說明目前的環境搭建是沒有問題的,但之后會不會還有什么暫時沒發現的問題就不得而知了,說不定又要再次開始orz……那是后話了
