一个基于 Go 语言开发的安全本地密码管理器。采用 Shamir's Secret Sharing (SSS)、AES-GCM、HKDF 和 TOTP 等现代密码学标准,确保您的账号密码安全存储。 主要解决不同系统/平台的账号密码较多,各种密码不相同,容易忘记或混淆;同时不信任云端托管,本地存储又不安全的问题。
- 零知识证明架构: 服务器(或本地数据库)不存储您的明文密码或密保答案。
- 多级密钥保护: 结合 SSS 分片、HKDF 密钥派生和环境因子加密。
- 双因素认证 (2FA): 内置 TOTP 算法,支持 Google Authenticator 等应用。
- 灵活配置: 支持
~/.key-box.config配置文件和环境变量SEC_APP_SALT两种方式配置 Salt。 - 跨平台: 支持 Windows、macOS 和 Linux。
- 本地存储: 使用嵌入式 SQLite 数据库,数据完全掌控在您手中。
- 图形化界面 (GUI): 提供直观的操作界面 (基于 Fyne)。
- Go 1.23+
git clone <repository-url>
cd key-boxgo mod tidymacOS / Linux:
go build -o key-box-client cmd/client/main.goWindows:
go build -o key-box-client.exe cmd/client/main.gomacOS / Linux:
go build -o key-box-gui cmd/gui/main.goWindows:
go build -o key-box-gui.exe cmd/gui/main.go注意:GUI 版本首次运行可能需要较长时间编译依赖。Windows 下编译 GUI 建议添加 -ldflags -H=windowsgui 参数以隐藏控制台窗口。
双击 key-box-gui 或在终端运行:
./key-box-gui程序支持两种配置 Salt 的方式,优先级如下:
| 配置方式 | 文件路径/变量 | 优先级 |
|---|---|---|
| 配置文件 | ~/.key-box.config |
高 |
| 环境变量 | SEC_APP_SALT |
低 |
- 首次运行: 程序会自动生成一个安全的随机 Salt,并保存到
~/.key-box.config。 - 配置优先级: 程序优先从配置文件读取,配置文件不存在时读取环境变量。
- 跨设备迁移:
SEC_APP_SALT是解密备份数据的关键,必须与备份文件同时保管:- 推荐:将
~/.key-box.config文件复制到新设备 - 备选:设置环境变量
export SEC_APP_SALT="原Salt值"
- 推荐:将
- OTP生成: 使用 OTP生成工具 或基础代码程序
界面分为三个标签页:
- 登录: 输入用户名和 6 位 OTP 验证码。
- 注册: 填写用户名、三个密保问题及答案。注册成功后会显示 Key B,请务必导入 Authenticator App。
- 重置密码: 通过密保问题重置 Key B。
登录成功后,您将进入密码库界面,支持:
- 查看已保存的密码(密码默认脱敏显示为
********)。 - 点击 "复制" 按钮将明文密码复制到剪贴板。
- 添加新的密码记录。
- 备份数据: 导出加密数据库并提示保存 Salt 值。
- 恢复数据: 从备份文件恢复数据。
- 退出登录。
⚠️ 重要: 备份文件和SEC_APP_SALT必须同时保管才能恢复数据,建议分开存储。
- 登录后,点击工具栏的 "备份数据" 按钮。
- 系统会弹出对话框:
- 显示当前
SEC_APP_SALT值 - 提供详细的跨设备恢复配置步骤
- 推荐将
~/.key-box.config文件复制到其他设备
- 显示当前
- 选择保存位置,数据库将导出为加密的 JSON 文件。
恢复前检查:
- 系统会检查
SEC_APP_SALT是否已配置 - 未配置时会阻止恢复并显示详细配置步骤
- 已配置时会显示配置状态确认
恢复步骤:
- 首次配置: 确保新设备已配置与原设备相同的
SEC_APP_SALT- 推荐方式:
scp ~/.key-box.config user@new-device:~/.key-box.config - 备选方式:
export SEC_APP_SALT="原Salt值"
- 推荐方式:
- 点击 "恢复数据" 按钮(登录前或登录后均可)
- 选择备份的
.json文件 - 如果账户已存在,系统会提示是否覆盖
- 恢复成功后使用原 TOTP 登录
备份文件为 JSON 格式,包含:
- 用户信息(用户名、密保问题、加密密钥)
- 加密的密码数据(密码保持加密状态)
- 备份时间戳
安全设计:
- 备份中的密码数据使用用户专属密钥加密
SEC_APP_SALT不包含在备份文件中(安全分离)- 即使备份文件泄露,攻击者仍需获取
SEC_APP_SALT才能解密
- 同时针对用户创建三个问题(密保问题,后台只记录问题不存储答案);将三个答案的hash作为分片,基于门限算法还原出保护密钥A。
- 使用密钥A加密安全随机数当做密钥M。
- 基于密钥M和用户名做密钥派生(HKDF函数)得到B。
- B首次展示给用户并服务端存储到数据库,用户自行存储。
- B的加密方式:从环境变量中读取特定数据做hash得到p,代码中固定写死一个密钥q。p和q做异或得到根密钥,使用根密钥加密B。
- 为用户生成一个真随机数当做密钥C
- 密钥B加密C
- B用于生成OTP
- OTP用于登录。(同样允许密码登录?)
- C用于加密用户存储的信息
CLI 版本支持两种配置 Salt 的方式:
方式一:配置文件(推荐)
程序会自动管理 ~/.key-box.config 文件。首次运行时如果没有配置,会自动生成并保存到此文件中。
方式二:环境变量(备选) 如果配置文件不存在,程序会尝试从环境变量读取:
macOS / Linux:
export SEC_APP_SALT="your-unique-secret-salt-2026"Windows (PowerShell):
$env:SEC_APP_SALT="your-unique-secret-salt-2026"配置优先级: ~/.key-box.config > SEC_APP_SALT 环境变量 > 自动生成
./key-box-client首次运行时,程序会自动生成 Salt 并保存到 ~/.key-box.config,请妥善保管此配置文件。
key-box-client: 命令行客户端。key-box-gui: 图形界面客户端。.key-box.db: 加密数据库文件(默认生成在用户主目录~/.key-box.db)。~/.key-box.config: Salt 配置文件(优先级高于环境变量,请妥善保管)。
- 密钥 A: 由密保答案通过 SSS 算法合成,不存储。
- 密钥 M: 随机生成,由 A 加密存储。
- 密钥 B: 由 M 和用户名通过 HKDF 派生,作为 TOTP 种子和数据加密的主密钥。
- Root Key: 由 Salt(来自
~/.key-box.config或环境变量)和硬编码常量异或生成,用于加密存储密钥 B。 - 密钥 C: 随机生成,用于加密实际的用户数据,由 B 加密存储。
注意:请妥善保管您的 ~/.key-box.config 配置文件和密保答案,一旦丢失将无法恢复数据。