Fidelius部署教程

来自典枢
Andrew Parno讨论 | 贡献2022年5月12日 (四) 03:09的版本
跳到导航 跳到搜索

我们提供了从源安装的方式。您也可以从源代码编译安装,但是请注意,由于Intel SGX的限制,一个Enclave在构建时需要使用RSA 3072的私钥进行签名,自行编译安装时使用的私钥与通过源安装的版本所使用的私钥并不相同,因此,自行编译安装的Fidelius可能与从源安装版本不兼容。

目前Fidelius稳定版为v0.3release版

环境及依赖

目前,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-sgxQuoteGeneration/pccs

安装Fidelius

注意,如果您是开发者,建议目前选择源码安装。

从源码安装

从源代码安装 Fidelius 仍然是最为直接的方式,操作如下:

首先,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

 $ git clone https://github.com/YeeZTech/YeeZ-Privacy-Computing.git
 $ cd YeeZ-Privacy-Computing
 $ 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 ../

从APT安装

  • 下载apt 仓库的公钥:
 $ wget -O yeez-pkey.pem https://repo.yeez.tech/public-key-yeez.txt
  • 将下载的仓库公钥添加进系统:
 $ sudo apt-key add yeez-pkey.pem
  • 将熠智科技 apt 仓库添加进系统软件源:
 $ echo -e "deb https://repo.yeez.tech/ release main" | sudo tee -a /etc/apt/sources.list
  • 更新系统软件源并安装 Fidelius 组件:
 $ sudo apt update
 $ sudo apt install secp256k1 fflib ypc-common ypc-core ykeymgr stbox-common-u ydump yterminus fid-datahub fid-analyzer

典钥及枢钥

为了与典枢平台进行交互,Fidelius引入了典钥及枢钥两个重要的概念。Fidelius 提供了相关工具用于生成、使用、操作典钥及枢钥。

典钥

典钥与设备相关,一旦生成,其私钥不能移出或者备份,与 Intel SGX 节点绑定。典钥的管理工具为 keymgr_tool。

通过以下命令可以查看帮助说明:

 $ 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 做为标识符。

 $ keymgr_tool --create

查看典钥

查看已经生成的典钥,其中包括典公钥。

 $ keymgr_tool --list

删除典钥

 $ keymgr_tool --remove KEY_ID

枢钥

枢钥的命令行工具为 ytermins:

 $ yterminus --help

除了命令行版本,枢钥还提供了 python 版本及 Javascript 版本。对于 python 版本,编译完成后会生成一个 python 模块,位于lib/pyterminus.cpython-38-x86_64-linux-gnu.so,可以在 python 代码中按照如下方式使用:

 import pyterminus

如需要 Javascript 版本,请与团队沟通。

其他工具

Fidelius 中还包括了其他几个命令行工具:

  • fid_analyzer 用于执行分析任务;
  • data_provider 用于加密数据;
  • ydump 用于查看一个 enclave 的相关信息。