凭证
Coffer 把你注册的每个密钥 —— API key、bot token —— 以 Fernet 密文形式存入本地 SQLite 数据库,由一把主密钥解锁。加密是透明的:需要密钥的功能去引用它,Coffer 仅在使用时在内存中解密。明文绝不进入日志、审计记录或事件。
存储并引用一个密钥
bash
coffer credentials set openai-key # 在隐藏提示处粘贴值(或通过 stdin 管道输入)
coffer credentials list # → openai-key | present
coffer credentials get openai-key # 仅检查是否存在([redacted])
coffer credentials get openai-key --show # 打印真实值(一次被审计的读取)
coffer credentials delete openai-key- 其他功能取的是引用而非密钥本身:模型用
--credential-ref openai-key,渠道用--bot-token-ref,以此类推。 - 优先用提示或 stdin,而非
--value(它会出现在你的 shell 历史里)。
主密钥存放在哪
任一时刻只有一个后端处于活动状态:
bash
coffer credentials storage # 显示当前后端
coffer credentials storage --set keychain # 把密钥移入操作系统钥匙串
coffer credentials storage --set file # 把它移回 0600 文件- file(默认)——
~/.coffer/master.key,权限0600。零钥匙串提示。它不防御已经能读取~/.coffer/的攻击者。 - keychain(可选)—— 操作系统钥匙串。防御对
~/.coffer/的离线窃取,代价是每次守护进程启动至多一次提示。切换只搬运密钥;不会重新加密任何密钥。
备份数据库时一并备份主密钥
coffer.db 现在只保存密文。恢复它需要匹配的主密钥,因此请把 ~/.coffer/master.key(或你的钥匙串条目)与数据库一起备份。若密文存在却解析不到密钥,守护进程会拒绝启动,而不是半盲运行。
在应用里,存储后端是 Settings → Security 下的一个开关。各个密钥则在你注册引用它们的模型、渠道与 MCP 服务器时被设置。