#signing-key #key-management #kms #cosmos #ed25519 #yubihsm

bin+lib tmkms

Tendermint 密钥管理系统:为 Tendermint 应用程序提供隔离的、可选 HSM 支持的签名密钥管理,包括验证者、预言机、IBC 转发器和其他交易签名应用程序

79 个版本

0.14.0 2024 年 3 月 29 日
0.13.1 2024 年 1 月 18 日
0.13.0 2023 年 10 月 24 日
0.12.2 2022 年 8 月 9 日
0.2.1 2018 年 11 月 28 日

#1015 in 神奇豆子

Apache-2.0

225KB
5K SLoC

Tendermint KMS 🔐

Crate Build Status Apache 2.0 Licensed MSRV

适用于 Tendermint 应用程序(如 Cosmos 验证者)的密钥管理系统。

为 Tendermint 应用程序提供隔离的、可选 HSM 支持的签名密钥管理,包括验证者、预言机、IBC 转发器和其他交易签名应用程序。

关于

此存储库包含 tmkms,这是一个密钥管理服务,旨在与 Tendermint 应用程序(理想情况下在独立的物理主机上)一起部署,提供以下功能

  • 高可用性 验证者签名密钥访问
  • 双重签名 防止,即使在验证者进程被破坏的情况下
  • 硬件安全模块 存储验证者密钥,可抵御主机被破坏

状态

Tendermint KMS 目前为 测试版质量。它经过了一次安全审计,只有一个低严重性发现。

双重签名/高可用性

Tendermint KMS 实现了 测试版质量 的双重签名检测。它已经过了一些测试,但我们(目前)不建议将 KMS 与同一网络上的多个同时活跃的验证者长时间结合使用。

特别是,当多个 KMS 实例同时运行并连接到同一网络上的多个验证者时,目前没有 双重签名防御

签名提供商

在编译KMS时,您必须选择一个或多个签名提供者,并将其作为参数传递给--features标志(有关如何构建Tendermint KMS的更多说明,请参阅下文)。

目前支持以下签名后端提供者

支持的平台

tmkms应该可以在任何由支持的Rust平台构建,该平台也由libusb支持,但是有一些平台虽然满足这些标准,但由于缺乏常数时间CPU指令,不适合加密用途。以下是符合我们KMS使用最低标准的一些一级、二级和三级Rust平台。

注意:目前tmkms在Linux/x86_64上进行了测试。我们不保证支持以下任何平台,但它们理论上满足支持所需的前提条件。

操作系统

  • Linux(推荐)
  • FreeBSD
  • NetBSD
  • OpenBSD
  • macOS

CPU架构

  • x86_64(推荐)
  • arm(32位ARM)
  • aarch64(64位ARM)
  • riscv32(32位RISC-V)
  • riscv64(64位RISC-V)

安装

您需要以下先决条件

  • Rust(稳定版本;1.72+):https://rustup.rs/
  • C编译器:例如gcc,clang
  • pkg-config
  • libusb(1.0+)。常见平台的安装说明
    • Debian/Ubuntu:apt install libusb-1.0-0-dev
    • RedHat/CentOS:yum install libusb1-devel
    • macOS(Homebrew):brew install libusb

注意(仅限x86_64):配置环境变量RUSTFLAGSexport RUSTFLAGS=-Ctarget-feature=+aes,+ssse3

安装tmkms有两种方法:要么在从git克隆后编译源代码,要么使用Rust的cargo install命令。

从源代码编译

可以使用以下方法直接从git仓库的源代码编译tmkms

以下示例添加了--features=yubihsm以启用YubiHSM 2支持。

$ git clone https://github.com/iqlusioninc/tmkms.git && cd tmkms
[...]
$ cargo build --release --features=yubihsm

或者,将--features=ledger替换为启用Ledger支持。

如果成功,这将生成一个位于./target/release/tmkmstmkms可执行文件。

使用cargo install命令安装

安装了Rust(1.56+)后,可以使用以下命令安装tmkms:

cargo install tmkms --features=yubihsm

或者安装特定版本(推荐)

cargo install tmkms --features=yubihsm --version=0.4.0

或者,将--features=ledger替换为启用Ledger支持。

配置: tmkms init

tmkms init 命令可以用来生成一个包含运行KMS所需配置文件的目录。运行以下命令:

$ tmkms init /path/to/kms/home

这将输出一个 tmkms.toml 文件,一个 kms-identity.key(用于验证者认证KMS),并创建secretsstate子目录。

请在生成后查看 tmkms.toml,因为各个部分可能需要一些定制。

tmkms init 命令还接受一个 -n--networks 参数,可以用来指定初始化某些已知Tendermint链。

$ tmkms init -n cosmoshub,irishub,columbus /path/to/kms/home

运行:tmkms start

创建配置后,使用以下命令启动 tmkms

$ tmkms start

这将从当前工作目录中的 tmkms.toml 文件读取配置。

要显式指定配置的路径,使用 -c 标志。

$ tmkms start -c /path/to/tmkms.toml

开发

以下是如何设置开发环境的说明。它们假设您已经遵循了上述安装部分中的步骤1和2。

  • 安装 rustfmtrustup component add rustfmt
  • 安装 clippyrustup component add clippy

或者,您可以从存储库顶层的 Dockerfile 构建一个Docker镜像,这是在CI中运行测试所使用的。

在提交拉取请求之前,请运行以下检查

测试

使用以下命令运行测试套件:

cargo test --all-features -- --test-threads 1

格式检查(rustfmt)

确保您的代码格式良好,请运行

cargo fmt

代码检查(clippy)

使用以下命令对您的代码进行检查(即检查常见问题):

cargo clippy

许可证

根据Apache License,Version 2.0(“许可证”)许可;除非您同意书面许可或适用法律要求,否则不得使用此文件。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则根据许可证分发的软件按“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言管理权限和限制,请参阅许可证。

依赖项

~18–36MB
~574K SLoC