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