⌘ PASS / 架构笔记
资料核实 · 2026.10.10
SECURITY ARCHITECTURE / 交互式技术手册

密码放在哪里,
钥匙又在谁手里?

从主密码到保险库密钥,拆开 1Password、Bitwarden、Proton Pass 与 gopass 的四种设计。看懂本地 App 如何解锁、CLI 如何取用,以及手机授权应该放在哪一层。

查看四套架构 ↗四个系统 · 七个章节 · 可交互演示
端侧明文 + 密钥本机加密 / 解密
⇄只同步密文
云端密文 + 加密的密钥身份认证 / 同步 / 授权
01

同一个目标,四种组织方式

这里的“密钥”是用途分类,不是固定数量。一个账户可以有多个保险库、设备、密钥版本和恢复路径。

维度1PasswordBitwardenProton Passgopass
核心入口主密码 + Secret Key主密码派生密钥账户密码保护用户私钥GPG / age 私钥
数据组织账户密钥集 → 保险库用户密钥 → 条目密钥;组织单独共享用户密钥 → 库密钥 → 条目密钥每条记录一个加密文件
同步服务官方云服务官方云 / 自托管官方云服务Git 远端,可使用私有仓库
端侧体验桌面、移动 App、扩展桌面、移动 App、扩展桌面、移动 App、扩展CLI 为主,浏览器需桥接组件
自动化入口op + Service Accountbw;另有 bwspass-cli + agent tokengopass + 可用解密私钥
解锁后手机复批不是常规个人库的标准流程有设备批准登录;不是 CLI 限时复批agent token 不是手机逐次批准需另加手机授权协议
开放程度公开安全设计;非全套开源公开源码,可自托管;许可按组件核对客户端和 CLI 开源;云服务不等于可自托管开源 CLI,可自行管理存储
读图前

认证 ≠ 解密;锁定 ≠ 退出;授权过期 ≠ 密码消失。 2FA 决定是否放你通过登录入口;加密密钥决定拿到密文后能否读取。这两个边界可以相互补充。

02

沿着钥匙,走到密码

选择一种系统,查看它的密钥层级、存储边界与授权方式。箭头表示解锁依赖,不是把主密码上传到云端。

03

端侧 App 是真正的密码库客户端

它有交互,也承担安全职责。云端保存记录,本机完成密钥处理和明文使用。

A

桌面 App

下载与缓存密文,解锁密钥,创建和编辑记录,提供搜索、复制、生成密码与锁定设置。部分产品还与 CLI、SSH agent 或浏览器连接。

不是只有一个“查看网页”的窗口。
B

手机 App

本地解密,通过 Face ID / 指纹解锁,在手机系统中自动填充。Bitwarden 还能让已有设备批准另一台设备的登录请求。

自动填充、登录批准与库解锁是不同交互。
C

浏览器扩展

识别当前网站,显示匹配账号,自动填充、保存登录信息。可以独立管理解锁状态,也可以与桌面 App 连接,具体按产品设置。

扩展处理网页交互;桌面 App 不等于自动填充本身。
D

CLI

给脚本读取字段、输出结构化数据、注入环境变量。它也是客户端,但通常有自己的登录、会话和缓存机制。

不能假定桌面 App 锁定就会使所有 CLI token 失效。
共同数据流示意 · 非网络协议抓包
云端 / Git密文记录、加密密钥、版本
⇄
端侧客户端拉取密文 → 本地解密
→
使用密码查看 / 填充 / 子进程

编辑时方向反过来:先在端侧加密,再上传密文。账号、设备、访问时间等服务元数据不一定全部被端到端加密。

产品图形与交互与 CLI 的关系手机授权的实际能力
1Password完整桌面/移动 App、扩展;硬件解锁op 可通过桌面 App 验证,也可用独立服务账号Apple Watch 可批准 Mac 解锁;不等同于任意手机复批
Bitwarden完整 App、扩展;PIN / 生物识别按平台支持bw 有自己的登录与解锁会话已有设备可批准登录并加密传递解密能力;不是普通 bw 解锁流程
Proton Pass完整 App、扩展;锁定策略按客户端设置pass-cli 独立登录,个人会话与 PAT 会话有差异现有 token 授权不能直接替代你想要的手机复批
gopass命令行交互;浏览器通过桥接组件接入CLI 就是核心客户端;GPG / age 后端管理解密与缓存没有内置手机批准;本机 agent 可配置缓存期限

来源:1Password CLI 集成 · Bitwarden App 设置 · 设备批准登录 · gopass 客户端

04

“解锁一次能用多久”没有统一答案

本地库锁、服务器会话、长期 token 和操作系统锁屏,是四个不同的状态。

本地锁定

客户端停止使用当前解密能力,并尽力清理敏感内存。密文缓存通常仍在设备上。下次可通过主密码、指纹或已配置的解锁方式恢复。

退出登录

通常还会清除本地登录状态和相关账户缓存。它比“锁定”更彻底,但不能收回已经复制到别处的密码。

授权过期

意味着服务器或正常客户端拒绝后续操作。静态密码与解密密钥没有天然的过期属性;密钥轮换和实际密码轮换是另外的动作。

空闲计时与绝对时长

空闲锁定会受到键鼠活动影响;“批准后 30 分钟失效”是绝对期限,即使一直操作也到期。设计时必须明确是哪一种。

系统有效期和锁定需要注意
1Password App可设设备空闲后锁定、锁屏/休眠锁定;另设多久重新输入主密码重新输入主密码的周期不是持续解锁时长;“随设备解锁”可单独关闭
Bitwarden bw解锁得到 BW_SESSION;按 CLI 文档通过 bw lock / logout 结束不能直接继承图形 App 的锁屏策略。当前 CLI 源码已有桌面生物识别解锁路径,是否可用受版本与功能开关影响
Proton pass-cliPAT / agent 会话文档标明 2 小时,不能开启 session locktoken 的有效期与登录会话是两回事;持有未过期 token 可以重新登录
gopassGPG 模式的口令缓存主要由 gpg-agent 管理age 后端也有可选会话 agent 与空闲超时。两种后端均需另加锁屏清缓存集成;缓存期限不是密钥过期

来源:1Password 自动锁定 · bw 会话 · pass-cli 会话 · gpg-agent 缓存设置

05

给 agent 的不是主密码,而是有限能力

自动化仍需要一个初始凭据。减少它能读取的范围,比把整个个人密码库交出去更容易管理。

1Password op

有人参与时可通过桌面 App 验证;无人值守可用 Service Account。服务账号 token 包含认证及解密材料,授权到指定保险库与读写权限。

op read 'op://Agent/GitHub/token'
op run -- python job.py
服务账号安全设计 ↗

Bitwarden bw / bws

bw 的个人 API key 只负责登录,通常还要用主密码解锁。Secrets Manager 是独立的自动化产品,bws 使用机器账号 token 读取授权密钥。

bw login --apikey
bw unlock
bws secret list
Secrets Manager 模型 ↗

Proton pass-cli

agent token 指定库或条目,支持有效期、读写角色和撤销。读取等审计操作要求声明原因;原因是可审查的陈述,不是动作正确性的证明。

export PROTON_PASS_AGENT_REASON='部署项目'
# 在该环境下执行凭据读取
pass-cli item view 'pass://Agent/GitHub/token'
Agent 命令与审计 ↗

gopass

agent 使用已授权的私钥。可通过独立密码库/子库与接收者隔离数据。它不内置云端限时 token、集中访问审计或手机复批。

gopass show -o agent/github-token
接收者与安全边界 ↗
撤销的边界

删除 token 可以阻止以后通过服务获取数据。已经下载的密文、已取得的解密密钥和已复制的密码无法远程收回。泄露后需要轮换实际凭据;使用 run 注入环境变量也不能阻止同权限恶意进程读取。

06

你的方案:手机批准,电脑临时解锁

以下是拟议设计,不是四个产品现有功能。假设接受电脑解锁期间可读取密码,重点保护尚未授权、授权到期和锁屏后的状态。

▯

手机

保存长期解锁能力
设备安全存储保护
生物识别批准请求

配对并核对设备身份
⇄
加密交付本次解锁材料绑定随机挑战、临时公钥、目标库和期限
▱

电脑

磁盘只存密文
解锁能力暂留内存
锁屏 / 休眠 / 到期后清除

交互演示 / 不连接设备,不接收真实密码

试一遍授权状态机

已锁定
已锁定→待手机批准→临时解锁→到期 / 锁屏
尚未授权

电脑已解锁,也不会自动解锁密码库。点击“电脑请求解锁”开始。

  1. 密码库已锁定,等待请求。

适合第一版的规则

  • 手机逐次批准,并展示电脑、密码库、用途与期限。
  • 批准后固定 30 分钟到期,使用过程中不自动续期。
  • 锁屏、休眠、会话退出或程序重启即关闭解锁状态。
  • 每次使用新的临时会话密钥,防止旧批准被重放。
  • 手机不可用时保持锁定;恢复能力单独离线保存。

能保证什么,不能保证什么

正常客户端在授权到期后停止使用解密能力,磁盘不保存可自动解锁的长期凭据。手机批准建立真实的解锁依赖,而不只是增加一个弹窗。

把解锁材料交到电脑后,期限由可信客户端执行。已控制电脑的程序可能保留它;如要求外部强制过期,应改为独立服务按需读取,或让服务代执行。

“人在电脑旁”是本设计接受的使用前提,不能单独证明操作系统没有恶意程序。

为什么不一定需要 Shamir 分片密钥?

你的目标是由手机控制每次解锁。把必要的长期秘密留在手机,临时加密交付解锁材料,就能实现正常客户端的复批体验。分片更多用于多方批准或恢复;如果分片最终在电脑上重建完整密钥,解锁期间仍可能被复制。是否采用分片应由恢复和多方控制需求决定。

Bitwarden 的手机批准能否直接实现?

它提供的是“登录时由已有设备批准”的流程。超时动作设为退出登录后,可以再次选择设备登录,接近图形客户端的复批体验,但仍有主密码等替代登录入口,也不是普通 bw CLI 的现成授权流程。强制每次解锁走手机以及绝对时长,需要额外设计。

07

来源与阅读范围

核实日期:2026 年 10 月 10 日。图中省略 TLS、完整认证报文和恢复协议;优先说明传统账户与最常见使用路径,SSO / passkey 模式应另看对应设计。

说明页不收集密码,不连接密码库。示例命令不含实际密钥,交互演示仅维护当前页面内存状态。此处架构说明用于理解系统,不能替代具体版本的协议审计。