keys/README.md
2026-05-10 15:53:01 +08:00

69 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Keys CLI
`@go/keys` 是一款基于 `@go/crypto``@go/safe` 构建的**现代化本地 KMS (Key Management System) 与密码管理器**。旨在提供极高安全标准的密钥全生命周期管理,并支持跨语言的安全代码集成。
## 🎯 设计哲学
* **安全第一**:纯二进制存储,彻底抹除文件固定特征码;使用 `crypto/rand` 替代 `math/rand`解密输出阅后即焚10秒自动擦除
* **动态混淆 (Dynamic Obfuscation)**:内存与磁盘的数据格式均采用**奇偶指针 + 链式偏移量**的设计,使得 Key/IV/Salt 的位置完全随机且无规律。
* **双模式架构**:分离“密钥管理 (Keystore)”与“密码管理 (Password)”,提供沉浸式的交互式 REPL 体验。
* **内存安全**:基于 `@go/safe`,主密码与实际密钥在运行期常驻 `SafeBuf`,使用完毕即刻内存擦除,防范内存扫描泄露。
## 🚀 命令行指南
```text
Keys CLI - 现代化本地 KMS 与密码管理器
用法:
keys 启动交互式密钥管理模式 (Key Manager)
keys <keyname> 启动交互式密码管理模式 (Password Manager)
# 非交互模式 (自动化测试与脚本友好,便于 CI/CD 和自动化流)
keys cmd keystore list
keys cmd keystore create <keyname>
keys cmd keystore remove <keyname>
keys cmd keystore export <keyname> <filepath.ext>
keys cmd password <keyname> list
keys cmd password <keyname> create <pwd.path.name> <value>
keys cmd password <keyname> remove <pwd.path.name>
keys cmd password <keyname> encrypt <pwd.path.name | raw_text> (不回显输入)
keys cmd password <keyname> decrypt <pwd.path.name | ciphertext>
环境变量:
KEYSPATH 指定数据根目录 (默认依序检查 ~/.keyspath再 fallback 到 ~/.keys)
MASTER_PASSWORD 非交互模式下通过环境变量传递主密码
安全特性:
- 无痕存储:纯二进制写入,动态混淆偏移量,文件无固定特征码。
- 强随机数:全局摒弃 math/rand核心加密全部使用 crypto/rand。
- 防偷窥:终端解密输出明文 10 秒后自动擦除。
- 防内存扫描:运行期 KeyBuf 在使用完毕后即刻擦除,绝不长留。
```
## 🛠 交互模式效果预览
**1. 密钥管理模式 (Keystore Mode)**
```text
$ keys
Enter Master Password: (不回显)
keys [keystore]> [Tab触发下拉提示]
list - 列出所有主密钥
create - 创建新的主密钥
use - 使用某密钥进入密码管理模式
export - 导出混淆后的应用集成代码
keys [keystore]> use db-prod
```
**2. 密码管理模式 (Password Mode)**
```text
keys [db-prod]> [Tab触发下拉提示]
list - 列出所有被 db-prod 保护的密码项
create - 添加新密码项 (如 db.mysql.root 123456)
encrypt - 临时加密一段文本或已有密码项 (不回显输入)
decrypt - 解密密码项 (10秒后清屏)
back - 返回密钥管理模式
keys [db-prod]> decrypt db.mysql.root
> 123456 (剩余 10s...) # 倒计时结束当前行被清除
```