部署 TSS Node

TSS Node 支持三种部署方式,分别是基于 SGX 服务器进行部署、基于通用服务器,和基于 Apple MacBook 电脑进行部署。三者的对比请参考 【TSS Node 使用指南】中的【部署方式对比】。

本节描述的是基于通用服务器的 TSS Node 部署方式。如果客户计划基于 SGX 服务器或 Apple MacBook 电脑进行 TSS Node 的部署,请参考 【TSS Node 使用指南】中的相关章节。

准备服务器环境

系统最低配置

  • CPU:x86(64位)或者 ARM(64位)架构,2 核心,主频 2.5 GHz

  • 内存:4 G

  • 硬盘:64 G SSD

  • 操作系统:Ubuntu Server 20.04 LTS 或最新

系统推荐配置

  • CPU:x86(64位)或者 ARM(64位)架构,4 核心,主频 3.0 GHz

  • 内存:8 G

  • 硬盘:128 G SSD

  • 操作系统:Ubuntu Server 20.04 LTS 或最新

网络需求

  • 不需要任何入站连接

  • 安装(或升级)阶段:

    • 访问系统配置的 apt 源,以安装必要的依赖包

    • 访问 docker 安装源,以安装 docker

    • 访问 docker.io registry 镜像仓库

    • 对于 SGX 版本,访问 intel 网站以下载驱动程序

  • 服务运行阶段:

    • Development 开发环境:访问 ws.tss.dev.cobo.com 的 443 端口

    • Production 正式环境:访问 ws.tss.cobo.com 的 443 端口

    • 访问客户配置的 Callback 回调服务器

权限要求

  • 有 sudo 权限的账号

获取和安装 TSS Node 软件包

联系 Cobo 销售专员获取通用服务器部署对应的软件包,如下:

cobo-tss-node-generic-<VERSION>.tgz (软件包)
cobo-tss-node-generic-<VERSION>.tgz.sha256(软件包哈希文件)

请先校验软件包是否正确,计算软件包 SHA256SUM 值:

sha256sum cobo-tss-node-generic-<VERSION>.tgz

确认与软件包哈希文件中的值一致。示例:

$ cat cobo-tss-node-generic-<VERSION>.tgz.sha256 
7e2ba53dfc79458ab30b8e8ce8278e2fd93932e10bb6af725b0beb055965d1f2  cobo-tss-node-generic-<VERSION>.tgz
$ sha256sum cobo-tss-node-generic-<VERSION>.tgz
7e2ba53dfc79458ab30b8e8ce8278e2fd93932e10bb6af725b0beb055965d1f2  cobo-tss-node-generic-<VERSION>.tgz

校验正确后,使用下面的命令解压软件包。

tar -xzf cobo-tss-node-generic-<VERSION>.tgz

TSS Node 软件压缩包解压的目录结构:

cobo-tss-node-generic
├── configs
│   └── cobo-tss-node-config.yaml.template (默认配置文件模板)
└── tss-node.sh (启动脚本)

如果需要修改配置,客户需在 configs 目录下,手动复制文件 cobo-tss-node-config.yaml.template ,并重命名为 cobo-tss-node-config.yaml ,编辑需要修改的配置项。更多配置项定义,请参考 【TSS Node 使用指南】中的【TSS Node 配置方式说明】章节。

如无特殊说明,本文后续全部命令,都在 TSS Node 解压后的根路径下执行,例如 cobo-tss-node-generic 路径。

接下来,请执行下面命令,检查系统各项依赖的软件或驱动是否已经准备就绪。同时,如果是首次安装,会自动拉取最新的 TSS Node 容器镜像。

sudo ./tss-node.sh status

示例:

$ sudo ./tss-node.sh status
[sudo] password for ubuntu:   (ubuntu账户密码)
Checking docker engine ... OK, version: 20.10.22
Checking container image ... Image not found: coboglobal/tss-node:v0.3.0

Going to pull container image coboglobal/tss-node:v0.3.0 ...

Login Succeeded
v0.3.0: Pulling from coboglobal/tss-node
4e7e0215f4ad: Pull complete
7fd35d9d7f31: Pull complete
86c277e0f34d: Pull complete
4f4fb700ef54: Pull complete
Digest: sha256:9dd6c67522b6f36df61e2a945d6093683fd4c980e5e15d3bcdd661ca8e062578
Status: Downloaded newer image for coboglobal/tss-node:v0.3.0
docker.io/coboglobal/tss-node:v0.3.0
Checking container image ... OK, id: sha256:8ab0c7353f5b62cdff5bdc6d9a436f0d99079d404b080aa6a61f594fe6446ba8

Checking TSS-node daemon ... not running

Please use './tss-node.sh start' to start the daemon.
Please use './tss-node.sh init' if the tss-node is not initialized yet.

至此,TSS Node 软件包及所有依赖已经准备就绪。

初始化 TSS Node

请在命令行内执行如下命令:

sudo ./tss-node.sh init

示例:

$ sudo ./tss-node.sh init
[sudo] password for ubuntu:  (ubuntu账户密码)
Type password (at least 16 characters):  (设置密码)
Retype password:  (再次设置密码)
INFO[2023-01-13T05:12:04Z] Initialize database: db/secrets.db
INFO[2023-01-13T05:12:04Z] Initialize Node ID: cobo73VA6C6WvofPg8tWYmqvdUF1cPYhd7EmGUxTexz5HCzYe
INFO[2023-01-13T05:12:04Z] Generate callback public key:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAomg0FRc8qm/vdNnjBDBv
DzKK7cZeeoRFAw2xcuaKWyCRHazERYAmICWG+q6dGZ8eS0C8AUqeqf23LlY3gDtr
KSkCvW/r78nkDgg+LH3rK3S0wdOfNFO21D3d3iKlOf6tLVvywfLsza7zwCx5dIKg
v+Z8ZEsy0/Qo4chS6OYAQntu8CYitzdVoDdm0pXxBFy4woKy7nkJZEMhAe/8nXDQ
Y6Xk1s3U/NT+q/zP3/3PVzu4ALnAEAA5jLV20cAiEPyrN0vZGPP4/rgpEfOlDEVp
jSGfW+Tui7RhmLZQhq9iQyaZlXCojbTuZJkjwjCGsd/T3UjT4FR3Kiofsf3i4RVR
TQIDAQAB
-----END PUBLIC KEY-----
INFO[2023-01-13T05:12:04Z] Start to initialize TSS parameters; the process may take several minutes
INFO[2023-01-13T05:12:11Z] Complete initialization of TSS parameters
INFO[2023-01-13T05:12:11Z] Complete initialization of TSS Node keys and data

注意事项:

  1. 首次初始化时,会检测 docker 是否安装,并构建容器镜像。如果没有安装 docker,脚本会提示您是否自动安装。

  2. 初始化过程中需要设置密码,用于对生成的机密数据进行加密,此后的其他操作均需要输入此密码才能解密数据。密码设置后如需修改,或者密码丢失,需用灾难恢复流程。请将密码备份保存在安全的设备中,并严格控制此密码的访问权限。推荐使用密码管理软件(例如 1Password)生成复杂密码,长度建议在16~32位。

初始化过程中会打印本 TSS Node 的 Node ID,即为一串以 cobo 开头的数字和字母组成的标识。它是 TSS Node 的唯一标识。客户后续在 Cobo Custody Web 上进行 TSS Node 绑定时需要使用此 ID。例如上面示例中的 cobo73VA6C6WvofPg8tWYmqvdUF1cPYhd7EmGUxTexz5HCzYe.

启动 TSS Node

请在命令行内执行如下命令:

sudo ./tss-node.sh start

示例:

$ sudo ./tss-node.sh start
Container started: 4d33d31066279927bd0f9e283aa60454ac02a040a6f49e684ee372321bd41065
Wait a few seconds ..
Type password: (输入密码)
cobo-tss-node
Version: v0.3.0
Build mode: prod
Git commit: 45431a4b3d4ad8ddf4a52aab619f41353310f0ba
Build time: 20230112T111204

INFO[2023-01-13T05:13:32Z] Waiting for password input on HTTP endpoint.
Embedded Risk Control Rule:
|__ Enable: false
INFO[2023-01-13T05:15:09Z] TSS Node ID: cobo73VA6C6WvofPg8tWYmqvdUF1cPYhd7EmGUxTexz5HCzYe
INFO[2023-01-13T05:15:09Z] WebSocket connecting to wss://ws.tss.dev.cobo.com/ws
INFO[2023-01-13T05:15:10Z] Start to register service

TSS Node 未在 Cobo Custody Web 绑定前,会提示注册失败。请先继续执行后续章节的操作。在 Cobo Custody Web 完成 TSS Node 绑定后,TSS Node 会通过自动重试,完成注册,如下所示:

INFO[2022-11-18T10:13:38+08:00] TSS Node registration accepted

按 Ctrl+C 退出后,TSS Node 会保持在后台执行。

使用下面命令查看运行状态:

sudo ./tss-node.sh status

使用下面命令查看运行容器日志:

sudo ./tss-node.sh log

同样,按 Ctrl+C 退出后,TSS Node 会继续保持在后台执行。

可以使用下面的命令停止 TSS Node:

sudo ./tss-node.sh stop

绑定 TSS Node 和生成根扩展公钥

企业账户内具有管理员(Admin)权限的用户在登录 Cobo Custody Web 后, 可以在【设置】-【MPC TSS Node】页面完成 TSS Node 的绑定。此时,需要所有 MPC 参与方的 TSS Node 同时在线。绑定 TSS Node 成功后,所有 MPC 参与方会协作完成一次分布式密钥生成运算,算法执行成功后,各个 MPC 参与方会在本地生成一个私钥分片,并由此确定了本企业账户的 MPC 根扩展公钥(MPC Root Extended Public Key),后续该企业账户下的所有钱包地址均由此根扩展公钥通过 BIP32 协议进行派生。

TSS Node 回调机制等更多配置

本节简要描述了使用 TSS Node 的基础操作,此外,TSS Node 还通过回调(Callback)的方式提供了可定制化的风控能力。强烈建议客户在正式环境下启用 TSS Node 的回调机制,用于对每次使用私钥分片的请求进行风控检查。

关于 TSS Node 使用的更多信息,请参考【TSS Node 使用指南】。

私钥分片的管理

私钥分片生成后,会加密保存在 TSS Node 本地的数据库文件中,默认路径为db/secrets.db。建议客户将该数据库文件与初始化 TSS Node 时设置的密码备份到不同地方,并合理分配该数据库文件与对应密码的访问权限。

关于私钥分片管理的更多信息,请参考【私钥分片管理指南】。

Last updated