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 神奇豆子
225KB
5K SLoC
Tendermint KMS 🔐
适用于 Tendermint 应用程序(如 Cosmos 验证者)的密钥管理系统。
为 Tendermint 应用程序提供隔离的、可选 HSM 支持的签名密钥管理,包括验证者、预言机、IBC 转发器和其他交易签名应用程序。
关于
此存储库包含 tmkms
,这是一个密钥管理服务,旨在与 Tendermint 应用程序(理想情况下在独立的物理主机上)一起部署,提供以下功能
- 高可用性 验证者签名密钥访问
- 双重签名 防止,即使在验证者进程被破坏的情况下
- 硬件安全模块 存储验证者密钥,可抵御主机被破坏
状态
Tendermint KMS 目前为 测试版质量。它经过了一次安全审计,只有一个低严重性发现。
双重签名/高可用性
Tendermint KMS 实现了 测试版质量 的双重签名检测。它已经过了一些测试,但我们(目前)不建议将 KMS 与同一网络上的多个同时活跃的验证者长时间结合使用。
特别是,当多个 KMS 实例同时运行并连接到同一网络上的多个验证者时,目前没有 双重签名防御。
签名提供商
在编译KMS时,您必须选择一个或多个签名提供者,并将其作为参数传递给--features
标志(有关如何构建Tendermint KMS的更多说明,请参阅下文)。
目前支持以下签名后端提供者
硬件安全模块(推荐)
- FortanixDSM(受
fortanixdsm
cargo特性的限制。请参阅README.fortanixdsm.md获取更多信息) - YubiHSM2(受
yubihsm
cargo特性的限制。有关更多信息,请参阅README.yubihsm.md) - Ledger(受
ledger
cargo特性的限制)
仅软件(不推荐)
softsign
后端,使用ed25519-dalek
支持的平台
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
- Debian/Ubuntu:
注意(仅限x86_64):配置环境变量RUSTFLAGS
:export 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/tmkms
的tmkms
可执行文件。
使用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),并创建secrets
和state
子目录。
请在生成后查看 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。
- 安装 rustfmt:
rustup component add rustfmt
- 安装 clippy:
rustup 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