// DOCS · 账号保险库

账号保险库 · Account Vaultv2 · 2026-08-07

统一记录 AI 平台的 API Key / token / 密码,密文存储、浏览器本地解密。本文说明架构、解密设计、v2 修复内容与当前状态。

v2 更新(2026-08-07): 修复三处致命 bug(线上页面此前输入任何密码都解不开)、新增关键词搜索、引入历史条目(legacy)机制。线上库与本地库已合并为单一数据源

1. 它是什么

一处存、两处取的密钥保险库。敏感值一律 AES-256-GCM 加密,服务器与仓库里只有密文

入口形态怎么解锁
/accounts/网页端,纯前端解密浏览器输入 VAULT_MASTER
WorkBuddy 对话account-vault 技能(CLI)自动读 .envVAULT_MASTER

数据真相源是本地 ~/.workbuddy/accounts/vault.json;网页端的 accounts/vault.json 是它的只读副本,由同步脚本推送。

2. 解密设计

网页端与 CLI 参数完全一致,否则互相解不开:

PBKDF2(master, salt, 100000 次, SHA-256)
  → AES-256-GCM(iv 12 字节,authTag 独立存储)

master = VAULT_MASTER,一串 64 位十六进制(不是人类口令)
每条 entry 都有自己独立的随机 salt —— 必须逐条派生 key
解密全程在浏览器本地用 Web Crypto 完成,主密码与明文不离开本机

数据结构

{
  "entries": [
    {
      "name": "DeepSeek Codex",
      "secret": { "salt": "…", "iv": "…", "tag": "…", "data": "…" },
      "description": "DeepSeek API key,Codex 用",
      "created": "2026-08-07T03:02:09.170Z",
      "legacy": false          // true = 旧 master 加密,已不可解
    }
  ]
}

使用步骤(网页端)

  1. 打开 /accounts/
  2. 粘贴 VAULT_MASTER(64 位 hex),点「解锁」
  3. 搜索框输关键词(如 deepseek智谱)实时筛选,Esc 清空
  4. 密钥默认脱敏(前 6 + 后 4),点「显示」出明文,「复制」写剪贴板

3. v2 修复了什么

旧版网页端存在三个叠加的 bug,导致无论输入什么主密码都提示「密码错误」——保险库实际上一直打不开:

#Bug后果
1entry.salt,而真实结构是 entry.secret.salt字段全 undefined,必然抛错
2只用第一条的 salt 派生一个 key 去解全部条目每条 salt 都不同,第 2 条起必失败
3主密码校验只试第一条第一条若不可解,整库误判「密码错误」

v2 的处理:兼容两种数据结构、逐条独立派生 key、校验规则改为「任一条能解开即通过」。

4. 历史条目(legacy)机制

⚠️ 2026-08-07 事故: 技能 .env 一度缺失,助手直接生成了一个新随机 master 并用它存新 key。结果 8/5–8/6 用旧 master 加密的 3 条(阿里云百炼 / 智谱 / 硅基流动)永久不可解——旧 master 已无副本,64-hex 有 256 bit 熵,不可能爆破。

这 3 条没有被删除,而是标记 "legacy": true 保留:

清理办法:到对应平台重新获取 key → 让我 add 重存 → delete 掉 legacy 条目。

铁律:.env 缺失时绝不擅自新建 master。 正确顺序是——先看 vault.json 是否已有条目;则立刻停手并索要原 master;确为空库才可生成新的,并把 64-hex 明确交给坤哥备份。重建前必须先备份现有 vault.json

5. 命令与同步

# 存入
node ~/.workbuddy/skills/account-vault/vault.js add "服务名" "密钥值" "描述"
# 查询(脱敏 + 明文)
node ~/.workbuddy/skills/account-vault/vault.js get 关键词
# 取明文(谨慎)
node ~/.workbuddy/skills/account-vault/vault.js raw 服务名
# 列表 / 删除
node ~/.workbuddy/skills/account-vault/vault.js list
node ~/.workbuddy/skills/account-vault/vault.js delete 服务名

# 同步到线上(打包密文 + 页面 → tar over SSH → ECS)
cd ~/.workbuddy/skills/account-vault && bash sync-accounts.sh

同步脚本内置防泄漏校验:推送后回查服务端 vault.json,命中 sk- 等明文特征会告警。

网页端源码在 ~/.workbuddy/skills/account-vault/web/index.html / app.js / vault.json),是唯一源,改完必须跑同步脚本,不要直接改 ECS 上的文件。

6. 安全说明

7. 后续可做