Fidelius部署教程
我们提供了从源安装的方式。您也可以从源代码编译安装,但是请注意,由于Intel SGX的限制,一个Enclave在构建时需要使用RSA 3072的私钥进行签名,自行编译安装时使用的私钥与通过源安装的版本所使用的私钥并不相同,因此,自行编译安装的Fidelius可能与从源安装版本不兼容。
目前Fidelius稳定版为v1.0release版,新版本即将推出,您可以切换到patterns分支查看,注意该版本目前并未提供相关技术支持。
环境及依赖
目前,Fidelius运行在 Ubuntu18或Ubuntu20 上,因此首先请确认您的Linux发行版是正确的。 Fidelius基于Intel SGX运行,您需要确认您的硬件环境已经配备了支持的中央处理器(CPU),并对BIOS进行了正确的设置,您可以咨询您的硬件供应商。一个简单的确认方法是使用如下的程序进行确认:
$ git clone https://github.com/ayeks/SGX-hardware.git $ cd SGX-hardware $ gcc test-sgx.c -o test-sgx $ ./test-sgx
若其中包括如下两行,则Intel SGX的硬件配置是正确的。
... sgx available: 1 ... sgx 1 supported: 1
若sgx available字段为 0,则CPU 本身不支持Intel SGX;若sgx 1 supported字段为0,则说明BIOS不支持或未开启Intel SGX 功能。
为了能够执行 Intel SGX 的程序,还需要正确安装 Intel SGX SDK,包括 DCAP的支持,参考 linux-sgx 及 QuoteGeneration/pccs 。
最后,Fidelius依赖于一些额外的库,包括openssl,glog,boost,mysqlcppconn等,安装操作如下:
$ sudo apt install build - essential ocaml ocamlbuild automake autoconf libtool wget python libssl -dev git cmake perl $ sudo apt install libssl -dev libcurl4 -openssl -dev protobuf -compiler libprotobuf -dev debhelper cmake reprepro unzip $ sudo apt install mysql -server libgoogle -glog -dev libboost -all -dev libmysqlcppconn -dev
特别的,Ubuntu 自带的 secp256k1 库并不完整,建议自行编译安装完整版本,操作如下:
$ git clone https :// github.com/bitcoin -core/ secp256k1 .git $ cd secp256k1 $ ./ autogen.sh $ ./ configure --enable -module -ecdh --enable -module -recovery $ make $ make check $ sudo make install
安装Fidelius
从源代码安装 Fidelius 仍然是最为直接的方式,操作如下:
$ git clone https://github.com/YeeZTech/YeeZ-Privacy-Computing .git $ cd YeeZ-Privacy-Computing $ git checkout patterns $ git submodule update --init $ mkdir build $ cd build $ cmake -DSGX_MODE = PreRelease -DSGX_HW=On ../ $ make
编译完成之后,会在 YeeZ-Privacy-Computing 目录下生成两个目录,lib 和 bin,其中 lib 下是相关的库文件,bin 下是可执行文件,也就是相关工具。
注意,上述操作过程生成的是 PreRelease 版本,其他还有 Debug 版本、Simulation 版本和 Release 版本,四者的区别如下,在编译时的区别主要是上述 cmake 操作的区别:
- Debug 版本下,编译器不对代码进行优化,并且保留调试符号,enclave 的加载方式为 debug 方式,用于调试,此时会生成测试程序,编译操作如下:
$ cmake -DSGX_MODE =Debug -DSGX_HW=On ../
- PreRelease 版本下,编译器会对代码进行优化,并且保留调试符号,enclave 加载方式为 debug 方式,用于性能测试;
$ cmake -DSGX_MODE = PreRelease -DSGX_HW=On ../
- Release 版本下,编译器会对代码进行优化,并且不保留调试符号,enclave 加载方式为非 debug 方式,编译 Release 版本时,需要准备额外的密钥进行签名,具体可以参考执行 make 之后的输出;
$ cmake -DSGX_MODE =Release -DSGX_HW=On ../
- Simulation 版本下,enclave 会加载到模拟的 Intel SGX 环境下,用于在没有Intel SGX 硬件的设备上执行,主要用于开发。
$ cmake -DSGX_MODE = PreRelease -DSGX_HW=Off ../
典钥及枢钥
为了与典枢平台进行交互,Fidelius引入了典钥及枢钥两个重要的概念。Fidelius 提供了相关工具用于生成、使用、操作典钥及枢钥。
典钥
典钥与设备相关,一旦生成,其私钥不能移出或者备份,与 Intel SGX 节点绑定。典钥的管理工具为 keymgr_tool。
通过以下命令可以查看帮助说明:
$ cd YeeZ -Privacy - Computing /bin $ ./ keymgr_tool --help
YeeZ Key Manager options: --help help message --create create a secp256k1 key pair --list list secp256k1 keys --remove arg remove a secp256k1 key pair --sign arg sign a message --verify arg verify a signature --encrypt arg encrypt a message --decrypt arg decrypt from cipher message YeeZ Create Key options: --user -id arg user id for created key YeeZ Encrypt options: --encrypt.hex message is hex enable --encrypt.public -key arg public key which is to encrypt a message YeeZ Decrypt options: --decrypt.hex message is hex enable --decrypt.private -key arg sealed private key which is to decrypt a cipher message YeeZ Sign options: --sign.hex message is hex enable --sign.private -key arg sealed private key which is to sign a message YeeZ Verify options: --verify.message arg message to be verified --verify.hex message is hex enable --verify.public -key arg public key which is to verify a signature
生成典钥
生成一个典钥,需要输入一个 id 做为标识符。
$ cd YeeZ -Privacy - Computing /bin $ ./ keymgr_tool --create
查看典钥
查看已经生成的典钥 其中包括典公钥。
$ cd YeeZ -Privacy - Computing /bin $ ./ keymgr_tool --list
删除典钥
$ cd YeeZ -Privacy - Computing /bin $ ./ keymgr_tool --remove KEY_ID