统一记录 AI 平台的 API Key / token / 密码,密文存储、本地解密。本文说明架构、解密设计与当前状态。
/accounts/ 是浏览器端解密的密钥保险库;WorkBuddy 里另有一套同算法的 account-vault 技能。两者算法一致、存储独立、master 未统一——这是当前最大的隐患。
| 维度 | 线上保险库 | WorkBuddy 技能 |
|---|---|---|
| 存储位置 | 站点 accounts/vault.json | 本地 ~/.workbuddy/accounts/vault.json |
| 当前内容 | 阿里云百炼、智谱、硅基流动(8/5–8/6) | DeepSeek Codex(8/7 存入) |
| 解锁方式 | 浏览器输入 VAULT_MASTER | 读 .env 的 VAULT_MASTER |
| 访问入口 | /accounts/index.html | 对话里让我"记一下/查一下" |
算法与 WorkBuddy 技能 完全对齐(app.js 注释原话):
PBKDF2(master, salt, 100000 次, SHA-256)
→ AES-256-GCM(iv 12 字节,authTag 独立附加在密文尾部)
master = VAULT_MASTER,一串 64 位十六进制(不是人类口令)
解密全程在浏览器本地用 Web Crypto 完成,主密码与明文不离开本机
VAULT_MASTER(64 位 hex),点「解锁」*).env 缺失,新建了一个随机 master 来存 DeepSeek Codex。两者算法相同但 master 不同,互相打不开对方的条目。
.env 的 VAULT_MASTER 改成同一个值、并用该 master 重新存一遍 DeepSeek,即可两库统一。
app.js 解锁后是铺开全部条目,不按关键词过滤。可作为后续增强。
# 存入
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 服务名
/accounts/ 是公开 URL,但只存密文;明文需主密码本地解密,服务器看不到。VAULT_MASTER 写进任何对外内容(文章 / 网页 / 聊天转发)。.env 仅本机可读,防的是 vault.json 单独泄露,不防整机被拿走。app.js 解锁后加一个过滤框,输入服务名即筛。