【Signal】ubuntu安裝Intel SGX


先決條件

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……那是后話了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM