国密密钥管理系统 (Key Management System),支持 GM/T 标准算法(SM2/SM3/SM4/SM9)。
| 类别 | 功能 |
|---|---|
| 国密算法 | SM2 签名/加密/密钥交换、SM3 哈希、SM4 对称加密、SM9 IBE 签名/加密 |
| 国际算法 | AES-256-GCM、Ed25519、ECDSA-P256/P384、RSA-4096 |
| 密钥管理 | 密钥生成、轮换、销毁、导入/导出 |
| 访问控制 | PBAC 策略引擎、MFA (TOTP)、审批工作流 |
| 审计日志 | WORM 存储、HashChain 防篡改、3年保留 |
| 后端存储 | PostgreSQL、Redis、软件 Keystore |
| 传输安全 | REST API (axum、TLS 1.3 + SM 算法)、gRPC (tonic) |
- 语言: Rust 1.85+ (Edition 2024)
- 异步: tokio
- Web: axum 0.8, tonic 0.14
- 数据库: PostgreSQL 16+, Redis 7+
- 加密: ring, gm-crypto (SM2/SM3/SM4/SM9)
- 外部依赖: gm-tls (TLS 1.3 + SM 传输加密), gm-sm9-rs (SM9 双后端), gm-ca (CA 证书)
- Rust 1.85+(Edition 2024)
- GmSSL 3.1.1 系统库(SM9 双后端所需)
git clone --depth 1 --branch v3.1.1 https://github.com/guanzhi/GmSSL.git cd GmSSL && mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON make -j$(nproc) && sudo make install && sudo ldconfig
- PostgreSQL 16+ 和 Redis 7+(用于生产部署)
- 如无需 GmSSL,可使用纯 Rust 后端:
--features pure-rust
本项目的 kms 二进制不发布到 crates.io,因此无法通过 cargo install 安装。推荐使用以下三种方式之一获取可执行文件:
从 GitHub Releases 下载对应平台的二进制,开箱即用:
| 平台 | 文件 |
|---|---|
| Linux x86_64 | kms-linux-x86_64 |
| Linux ARM64 (aarch64) | kms-linux-aarch64 |
| macOS Intel (x86_64) | kms-macos-x86_64 |
| macOS Apple Silicon (aarch64) | kms-macos-aarch64 |
| Windows x86_64 | kms-windows-x86_64.exe |
Linux / macOS 下载后赋予执行权限即可运行:
chmod +x kms-linux-x86_64
./kms-linux-x86_64 --help每个 Release 附带 SHA256SUMS.txt,可校验完整性:
sha256sum -c SHA256SUMS.txt当前最新版本:
v0.2.1(推荐升级)
docker build -t gm-kms .
docker run -d --name kms --network host gm-kms --server需要 Rust 1.85+ 与 GmSSL(或 --features pure-rust),详见前提条件与快速开始:
cargo build --release
# 产物位于 target/release/kmsdocker compose up -d
# 启动 PostgreSQL 和 Redis(不含 kms 服务本身)# 复制环境变量模板
cp -n .env.example .env || true
# 已内置测试密钥,生产部署需替换
export DATABASE_URL="postgres://kms:kms123@localhost:5432/kms"
export KMS_KEK="<your-kek-hex-64>"# 构建
cargo build --release
# 运行所有测试
cargo test --workspace
# 运行特定 crate 测试
cargo test -p kms-core
cargo test -p kms-api
# 完整 CI 检查 (format → clippy → build → test)
make check# 方式一:直接运行
cargo run --release -p kms -- --server
# 方式二:Docker 容器(含 GmSSL)
docker build -t gm-kms .
docker run -d --name kms --network host \
-e DATABASE_URL="postgres://kms:kms123@localhost:5432/kms" \
-e KMS_KEK="<your-kek-hex-64>" \
gm-kms --server# 一键 CI 检查(fmt + clippy + build + test)
make check
# 生成 SBOM(CycloneDX JSON + XML)
make sbom
# 安全扫描(需本地 Docker)
make zap-baseline # OWASP ZAP 被动扫描
make zap-api-scan # ZAP 主动扫描
# 合规报告
make report-crypto # 加密配置报告
make report-compliance # DJCP 三级自评估报告gm-kms/
├── crates/ # 核心 crate
│ ├── kms-core/ # 核心类型、算法抽象
│ ├── kms-keystore/ # 密钥存储后端
│ ├── kms-api/ # REST/gRPC API
│ ├── kms-policy/ # PBAC 策略引擎
│ ├── kms-audit/ # 审计日志
│ ├── kms-cli/ # 命令行工具
│ ├── kms-hsm/ # TPM 2.0 HSM 模拟
│ ├── kms-mfa/ # MFA/TOTP
│ ├── kms-approval/ # 审批工作流
├── operators/ # Kubernetes Operator
├── docs/ # 文档
│ ├── guides/ # 部署指南
│ ├── requirements/ # 功能需求文档
│ └── wiki/ # 术语和技术词条
├── examples/ # 示例代码
└── providers/terraform/ # Terraform provider
├── Makefile # 开发辅助命令
├── docker-compose.yml # PostgreSQL + Redis 依赖服务
├── Dockerfile # 生产容器镜像(含 GmSSL)
| 标准 | 状态 |
|---|---|
| GM/T 0002-2012 (SM4) | ✅ |
| GM/T 0004-2012 (SM3) | ✅ |
| GM/T 0003-2012 (SM2) | ✅ |
| GM/T 0044-2016 (SM9) | ✅ (GmSSL + 纯 Rust 双后端) |
| GB/T 38636-2020 (TLCP) | gm-tlcp crate(独立维护中)。gm-kms 当前 REST/gRPC 走 TLS 1.3 + SM ciphers(gm-tls)。 |
| 等保 2.0 三级 | ✅ (部分) |
SM9 后端: 默认使用 GmSSL 3.1.1 实现 GM/T 0044-2016 标准曲线参数和 SM3 哈希。同时提供纯 Rust 后端(
pure-rustfeature),双后端通过交叉验证确保正确性。
SM9:
gm-sm9-rscrate 位于 gm workspace(gm-crypto、gm-tls、gm-ca同属该 workspace)
| Crate | 测试数 | 状态 |
|---|---|---|
| kms-core | 278 | ✅ |
| kms-policy | 28 | ✅ |
| kms-audit | 95 | ✅ |
| kms-hsm | 52 | ✅ |
| kms-mfa | 45 | ✅ |
| kms-approval | 16 | ✅ |
| kms-keystore | 87 + 6 benchmark | ✅ |
| kms-cli | 8 | ✅ |
| kms-api | 261 | ✅ |
| integration/KAT | 81 | ✅ |
| 总计 | 959 + 6 benchmark | 全部通过 |
注: 6 个 benchmark 测试默认忽略,可通过
cargo test -- --ignored运行
本项目依赖以下外部/社区实现(署名与许可详情见 NOTICE):
- SM2 / SM3 / SM4(
gm-crypto):在社区 Rust cratesm2/sm3/sm4之上构建,补齐 SM2 ZA / SM3 HMAC / SM4 GCM-CBC 等业务实现,详细范围见 gm workspace 仓库。 - SM9(
gm-sm9-rs):GmSSL(Apache-2.0)的 Rust 移植,提供纯 Rust 与 GmSSL FFI 双后端。 - gm-tls / gm-ca / gm-crypto / gm-sm9-rs:均来自 gm workspace,以 crates.io 依赖 + 根
Cargo.toml的[patch.crates-io]锁定到同一 git rev。
MIT OR Apache-2.0