SGX簡介:https://software.intel.com/zh-cn/sgx
英特爾® Software Guard Extensions是一項面向應用程序開發人員的英特爾技術,這些開發人員力圖保護選定的代碼和數據免於被披露或被修改。 英特爾Software Guard Extensions 通過使用圍圈(enclave),即內存中受保護的執行區域,使這種保護成為可能。 使用特殊指令和軟件可將應用程序代碼放入圍圈中,這些特殊指令和軟件經由英特爾® Software Guard Extensions SDK 提供給開發人員使用。英特爾 Software Guard Extensions SDK 是 API、函數庫、文檔、樣本源代碼和工具的集合,允許軟件開發人員用C/C++ 創建和調試啟用英特爾Software Guard Extensions 的應用程序。
硬件要求
1.CPU:intel 6代CPU及以上的版本支持SGX功能(Kaby Lake系列全支持,不確定可以去Intel官網查詢https://ark.intel.com/ )
2.BIOS:進入主板BIOS設置,查看安全選項,如果有SGX選項,選擇enable
其實硬件不支持也無所謂,可以在模擬環境下編寫測試SGX程序。如果你的硬件不支持,那么跳過驅動安裝和PSW安裝。編寫makefile時,SGX_MODE=HW
系統要求
Ubuntu* Desktop-16.04-LTS 64bits
Red Hat Enterprise Linux Server release 7.3 64bits
CentOS 7.3.1611 64bits
安裝SGX驅動
1.下載
https://github.com/01org/linux-sgx-driver 下載驅動代碼
2.編譯
解壓,進入目錄
$ make
3.安裝SGX驅動
$ sudo mkdir -p "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
$ sudo cp isgx.ko "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
$ sudo sh -c "cat /etc/modules | grep -Fxq isgx || echo isgx >> /etc/modules"
$ sudo /sbin/depmod
$ sudo /sbin/modprobe isgx
在 Red Hat Enterprise Linux Server或 CentOS上:
$ sudo /sbin/modprobe isgx
4.卸載sgx驅動
$ sudo /sbin/modprobe -r isgx
$ sudo rm -rf "/lib/modules/"`uname -r`"/kernel/drivers/intel/sgx"
$ sudo /sbin/depmod
$ sudo /bin/sed -i '/^isgx$/d' /etc/modules
下載SGX SDK/PSW源碼
https://github.com/01org/linux-sgx
安裝SGX構建工具
On Ubuntu 16.04:
$ sudo apt-get install build-essential ocaml automake autoconf libtool wget python
On Red Hat Enterprise Linux 7.3 and CentOS 7.3:
$ sudo yum groupinstall 'Development Tools'
$ sudo yum install ocaml wget python
安裝SGX PSW(SGX Platform Software)需要的工具
On Ubuntu 16.04:
$ sudo apt-get install libssl-dev libcurl4-openssl-dev protobuf-compiler libprotobuf-dev
On Red Hat Enterprise Linux 7.3 and CentOS 7.3:
$ sudo yum install openssl-devel libcurl-devel protobuf-compiler protobuf-devel
下載源碼
進入源碼包
$ ./download_prebuilt.sh
構建 SGX SDK和 SGX PSW
1.使用默認配置
$ make
sdk可以單獨make,但是psw make需要依賴sdk
2.禁用優化
$ make USE_OPT_LIBS=0
3.顯示bulid debug信息
$ make DEBUG=1
4.刪除build文件
$ make clean
5.Build的文件中enclave都是intel prebuild的Architecture Enclaves (LE /PvE /QE /PCE /PSE-OP /PSE-PR) and applet(PSDA) psw/ae/data/prebuilt/libsgx_*.signed.so and psw/ae/data/prebuilt /PSDA.dalp都是intel已經簽名過的。使用不簽名的enclave:
$ make
$ cd psw/ae/le
$ make
構建SGX SDK安裝器
$ make sdk_install_pkg
之后在linux/installer/bin/下會找到安裝的bin文件
使用$ make sdk_install_pkg DEBUG=1可以顯示構建信息
構建SGX PSW安裝器
$ make psw_install_pkg
之后在linux/installer/bin/下會找到安裝的bin文件
使用$ make psw_install_pkg DEBUG=1可以顯示構建信息
安裝SGX SDK
1.安裝python
Use the following command to install the required tool to use Intel(R) SGX SDK:
On Ubuntu 16.04:
$ sudo apt-get install build-essential python
On Red Hat Enterprise Linux 7.3 and CentOS 7.3:
$ sudo yum groupinstall 'Development Tools'
$ sudo yum install python
2.安裝SDK
$ cd linux/installer/bin
$ ./sgx_linux_x64_sdk_${version}.bin
3.測試SampleCode
模擬模式
$ cd SampleCode/LocalAttestation
$ make SGX_MODE=SIM
$ ./app
硬件模式
$ cd SampleCode/LocalAttestation
$ make SGX_MODE=HW
$ ./app
安裝SGX PSW
1.安裝依賴庫
On Ubuntu 16.04:
$ sudo apt-get install libssl-dev libcurl4-openssl-dev libprotobuf-dev
On Red Hat Enterprise Linux 7.3 and CentOS 7.3:
$ sudo yum install openssl-devel libcurl-devel protobuf-devel
使用Trusted Platform Service功能:
確保mei_me驅動和 /dev/mei0存在.
2.下載安裝iclsClient :
On Ubuntu 16.04:
$ sudo apt-get install alien
$ sudo alien --scripts iclsClient-1.45.449.12-1.x86_64.rpm
$ sudo dpkg -i iclsclient_1.45.449.12-2_amd64.deb
On Red Hat Enterprise Linux 7.3 and CentOS 7.3:
$ sudo yum install iclsClient-1.45.449.12-1.x86_64.rpm
3.安裝JHI service :
On Ubuntu 16.04:
$ sudo apt-get install uuid-dev libxml2-dev cmake pkg-config
$ cmake .;make;sudo make install;sudo systemctl enable jhi
On Red Hat Enterprise Linux 7.3 and CentOS 7.3:
$ sudo yum install libuuid-devel libxml2-devel cmake pkgconfig
$ cmake .;make;sudo make install;sudo ldconfig;sudo systemctl enable jhi
4.安裝SGX PSW
$ cd linux/installer/bin
$ sudo ./sgx_linux_x64_psw_${version}.bin
啟動 aesmd服務:
To stop the service: $ sudo service aesmd stop
To start the service: $ sudo service aesmd start
To restart the service: $ sudo service aesmd restart
tips:其他版本的SGX工具也有很多,opensgx和百度的rust sgx( https://github.com/baidu/rust-sgx-sdk )都可以看一下,要想詳細了解這個技術還是推薦官方的developer reference
————————————————
版權聲明:本文為CSDN博主「Super-Bob」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/y734564892/article/details/78177444