2. 隐私计算使用指南
2.1. 说明
Graphene 是官方原有的项目名称后来更改为Gramine,下文都改成Gramine
Gramine 使用v1.1,仓库地址:https://github.com/gramineproject/gramine
1.1之前的版本对Golang的支持不友好,不能使用
检查设备是否支持sgx
如果设备不支持sgx可以使用simulation mode 运行
simulation mode 不能用于生产环境
2.2. 环境部署
2.2.1. 推荐配置
系统:linux (不支持windows,本文教程使用ubuntu20.04)
内核: 5.11+(推荐使用5.11以上版本)
内存: 8G+
2.2.2. Gramine 环境配置
安装教程:https://gramine.readthedocs.io/en/latest/quickstart.html
2.2.3. 下载相关代码
1. git clone -b v2.2.1_private_contract --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-go.git
2. git clone -b v2.2.1_private_contract --depth=1 https://git.chainmaker.org.cn/chainmaker/graphene.git
3. git clone -b v2.2.1_private_contract --depth=1 https://git.chainmaker.org.cn/chainmaker/chainmaker-tee.git
2.2.4. 代码编译
2.2.4.1. CA准备
准备CA
在tee目录下的info_test.go文件中可以生成第三方根CA仅做测试使用
或自行准备第三方CA
2.2.4.2. 编译Enclave-server
2.2.4.2.1. 准备 enclave-server.manifest.template文件
loader.preload = "file:{{ gramine.libos }}"
libos.entrypoint = "{{ entrypoint }}"
loader.log_level = "{{ log_level }}"
loader.env.LD_LIBRARY_PATH = "/lib:{{ arch_libdir }}:/usr/lib:/usr{{ arch_libdir }}"
loader.pal_internal_mem_size = "1G"
loader.insecure__use_cmdline_argv = true
sys.enable_sigterm_injection = true
fs.mount.lib.type = "chroot"
fs.mount.lib.path = "/lib"
fs.mount.lib.uri = "file:{{ gramine.runtimedir() }}"
fs.mount.lib2.type = "chroot"
fs.mount.lib2.path = "{{ arch_libdir }}"
fs.mount.lib2.uri = "file:{{ arch_libdir }}"
fs.mount.tmp.type = "chroot"
fs.mount.tmp.path = "/tmp"
fs.mount.tmp.uri = "file:/tmp"
# fs.mount.libos.path
# fs.mount.libos.uri
# set Absolute Path
fs.mount.libos.type = "chroot"
fs.mount.libos.path = "/home/XXX/chainmaker-graphene/" # 设置绝对路径
fs.mount.libos.uri = "file:/home/XXX/chainmaker-graphene/"# 设置绝对路径
sgx.nonpie_binary = true
sgx.enclave_size = "16G" #根据自己的机器配置型改,建议最小分配8G内存
sys.stack.size = "128M"
sgx.thread_num = 256 #根据机器配置优化调整
sgx.trusted_files = [
"file:{{ entrypoint }}",
"file:{{ gramine.runtimedir() }}/",
"file:{{ arch_libdir }}/",
"file:/usr{{ arch_libdir }}/",
"file:/etc/mime.types",
"file:/etc/default/apport",
]
sgx.allowed_files = [
"file:/etc/nsswitch.conf",
"file:/etc/ethers",
"file:/etc/hosts",
"file:/etc/group",
"file:/etc/passwd",
"file:/etc/gai.conf",
"file:/etc/host.conf",
"file:/etc/resolv.conf",
"file:./configs/",
"file:/tmp",
"file:/home/XXX/chainmaker-graphene/", #设置绝对路径
"file:./logs",
]
其他字段可自行参考https://gramine.readthedocs.io/en/latest/manifest-syntax.html 进行设置enssl/include
生成 enclave-key.pem
openssl genrsa -3 -out /home/XXX/chainmaker-graphene/enclave-key.pem 3072 //替换自己的目录
执行 build.sh 文件编译
sudo ./build.sh SIM //模拟模式下运行
sudo ./build.sh SGX=1 DEBUG=1//硬件模式下运行(需要cpu支持)
DEBUG=1 可选模式
2.2.4.3. 模拟模式
gramine-direct ./enclave-server -module=1
2.2.4.4. 硬件模式
运行 gramine-sgx ./enclave-server
2.2.4.5. 签发证书
第一次部署 初始化完成后enclave-server将生成csr文件
使用csr文件在第三方CA处申请签发TEE证书
将签发的TEE证书以PEM格式存于文件(in_teecert.pem)并放在chainmaker-graphene/configs目录下
运行程序会自动校验和加载TEE证书
注: enclave启动成功,使用 netstat -ntlp 查询有 ./loader的占用标识enclave启动成功
2.2.4.6. 验证信息上链
使用以下CMC命令调用系统合约将得到的report信息上链
cmc tee upload_report \
--sdk-conf-path={./testdata/sdk_config.yml(SDK配置文件路径)} \
--report={report路径} \
--admin-key-file-paths={key路径} \
--admin-crt-file-paths={证书路径}
注:若Enclave代码版本发生变化,需要再次执行步骤2将更新过的report信息重新上链
将第三方CA的签名根证书上链
cmc tee upload_ca_cert \
--sdk-conf-path={./testdata/sdk_config.yml(SDK配置文件路径)} \
--ca_cert={根证书地址} \
--admin-key-file-paths={key路径} \
--admin-crt-file-paths={证书路径}
2.2.4.7. 编译隐私计算网关
cd ../gateway
go build main.go
./main start
2.2.4.8. 隐私计算网关配置config.yml
# 服务配置信息
settings:
# web服务配置信息
application:
domain: localhost:9090
host: 0.0.0.0
ishttps: false # 是否启用https
name: sgx # 服务名称
port: "8081" # 服务端口号
concurrency: 10 # 最大并发数
# SDK客户端配置信息
config:
capaths: # 根证书路径,支持多个
- cert/ca
chainid: chain1 # 链ID
conncnt: 1 # 节点连接数
nodeaddr: 127.0.0.1:12301 # 节点地址,格式:127.0.0.1:12301
orgid: wx-org1.chainmaker.org # 归属组织
tlshostname: consensus1.tls.wx-org1.chainmaker.org # TLS Hostname
usercttpath: cert/client1.tls.crt # 客户端用户私钥路径
userkeypath: cert/client1.tls.key # 客户端用户证书
# 日志配置信息
log:
compress: 1 # 是否使用gzip压缩,默认不压缩
level: debug # 日志等级,默认Info
localtime: 1 # 日志时间戳是否为本地时间戳,默认UTC时间
maxage: 30 # 最长保存天数,默认不删除
maxbackups: 300 # 最多备份几个
maxsize: 1024 # 日志文件大小,默认100M
path: ./logs/gateway.log # 日志文件名
# https 配置信息
ssl:
key: keystring # 证书key
pem: temp/pem.pem # 证书
#grpc连接池配置
internalClient:
targeturl: ":50053" #端口
initcapacity: 20 #初始化连接数
maxcapacity: 300 #最大连接数
dialtimeout: 2 #拨号超时时间
idletimeout: 6 #空闲超时时间
readtimeout: 5 #读超时时间
writetimeout: 5 #写超时时间
internalServer:
port: ":50052" #访问server端口
2.3. 隐私计算网关接口
网关是用户调用隐私合约的入口,当前使用http接口方式进行调用。网关提供的接口主要包括远程证明、部署合约和调用合约三个接口。所有接口的请求method均使用post方式。使用方式参考示例,描述如下:
2.3.1. 示例参考
请参考gateway/service/tools/main.go
2.3.2. 部署合约接口
接口地址:http://x.x.x.x:port/private/deploy,其中x.x.x.x:port为服务地址,用户可以在配置里指定。
2.3.3. 执行隐私计算接口
接口地址:http://x.x.x.x:port/private/compute,其中x.x.x.x:port为服务地址,用户可以在配置里指定。
2.3.4. 远程证明接口
接口地址:http://x.x.x.x:port/private/remote_attestation,其中x.x.x.x:port为服务地址,用户可以在配置里指定。
2.4. 附录——推荐的支持隐私合约的服务器CPU型号
CPU序列号 | 型号及描述 | SGX Enclave最大预留内存 |
---|---|---|
6354 | Ice Lake SP XCC Intel Xeon Gold 6345 18c 205W 3.0GHz | 64GB |
8360Y | Ice Lake SP XCC Intel Xeon Platinum 8360Y 36c 250W 2.4GHz | 64GB |
6348 | Ice Lake SP XCC Intel Xeon Gold 6348 28c 235W 2.6GHz | 64GB |
8380 | Ice Lake SP XCC Intel Xeon 8380 40c 270W 2.3GHz | 512GB |
8368 | Ice Lake SP XCC Intel Xeon Platinum 8368 38c 270W 2.4GHz | 512GB |
8368Q | Ice Lake SP XCC Intel Xeon Platinum 8368Q 38c 270W 2.6GHz (liquid cooled) | 512GB |
8358 | Ice Lake SP XCC Intel Xeon Platinum 8358 32c 250W 2.6GHz | 64GB |
8358P | Ice Lake SP XCC Intel Xeon Platinum 8358P 32c 240W 2.6GHz | 8GB |
8352V | Ice Lake SP XCC Intel Xeon Platinum 8352V 36c 195W 2.1GHz | 8GB |
8351N | Ice Lake SP XCC Intel Xeon Platinum 8351N 36c 225W 2.4GHz | 64GB |
6314U | Ice Lake SP XCC Intel Xeon Gold 6314U 32c 205W 2.3GHz | 64GB |
6338 | Ice Lake SP XCC Intel Xeon Gold 6338 32c 205W 2.0GHz | 64GB |
6338N | Ice Lake SP XCC Intel Xeon Gold 6338N 32c 185W 2.2GHz | 64GB |
8352Y | Ice Lake SP XCC Intel Xeon Platinum 8352Y 32c 205W 2.2GHz | 64GB |
8352S | Ice Lake SP XCC Intel Xeon Platinum 8352S 32c 205W 2.2GHz | 512GB |
6330 | Ice Lake SP XCC Intel Xeon Gold 6330 28c 205W 2.0GHz | 64GB |
6330N | Ice Lake SP XCC Intel Xeon Gold 6330N 28c 165W 2.2GHz | 64GB |
6346 | Ice Lake SP XCC Intel Xeon Gold 6346 16c 205W 3.1GHz | 64GB |