介绍
如今常见的密码管理器有三类:
- 本机安装本地访问的应用程序 - 数据库存于本地
- 在线服务,通常经网站访问 - 数据库存于在线服务器
- 经本机访问的外挂硬件设备 - 数据库存于特定设备
本文目前仅讨论前两种,即软件密码管理器。
主流软件密码管理器有三个,各自有不同侧重点:
KeepassXC 作为 KeePass (2013年发布) 的跨平台衍生版本,于 2016 年发布。KeepassXC 完全开源和免费,使用Qt5库构建,原生支持 Linux、Windows、macOS。所有数据仅保存在本地 .kdbx 文件。如需多设备共用需要自行设计文件同步。
Bitwarden 于 2016 年推出,最初支持移动端和部分浏览器扩展,后续扩展到全平台。信息经端到端加密存放在云端服务器。其客户端和服务端均开源,用户可以免费使用大多数功能,可以向官方付费订阅解锁全部功能,也可以自行部署服务器解锁全部功能(个人建议使用 Vaultwarden )。
1Password 于 2006 年推出,最初专为macOS设计,后续扩展到全平台。信息经端到端加密存放在官方云端服务器。1Password 完全是商业性质的闭源的软件,虽然可以在本地存储数据,但是 编辑、同步 等基础功能必须付费订阅。
| 密码管理软件 | KeePassXC | BitWarden | 1Password |
|---|---|---|---|
| 成本 | 完全免费 | 免费/订阅/自托管 | 仅订阅制,不可买断 |
| 客户端 | 开源 | 开源 | 闭源 |
| 服务端 | 无 | 开源,可自建 | 闭源,无法自建 |
| 数据存储位置 | 本地文件 | 官方或自建的服务端 | 官方服务端 |
| 开发团队或公司 | KeePassXC team | Bitwarden Inc | AgileBits Inc |
| Linux/Win 桌面客户端 | 官方支持 | 官方支持 | 官方支持 |
| Android 手机客户端 | 三方开源项目 | 官方支持 | 官方支持 |
| Chrome/Firefox 扩展 | 官方支持 | 官方支持 | 官方支持 |
| 浏览器扩展工作方式 | 直接连接桌面应用 | 主要是独立工作 | 独立,也可连接到应用 |
| 浏览器扩展:自动填充 | 支持 | 支持 | 支持 |
| 浏览器扩展:Passkey | 支持 | 支持 | 支持 |
| Android:自动填充 | 支持 | 支持 | 支持 |
| Android:Passkey | 支持 | 支持 | 支持 |
| TOTP | 完全支持 | 有限-需订阅 | 有限 |
| SSH Agent | 内置支持 | 通过官方CLI实现 | 通过官方CLI实现 |
| 强密码生成器 | 支持 | 支持 | 支持 |
第三方客户端:
Keepass 在 Android 上有两个热门的客户端:
- KeePass2Android:支持从 本地/云盘/FTP/WebDav 等方式选择数据库,不支持通行密钥
- KeePassDX:仅支持本地数据库,是支持也是目前唯一支持通行密钥的 Android 客户端
我个人更倾向于使用 KeePassDX ,感觉更强大一些。
还有一个 MD3 主题的开源第三方开源密码管理器客户端:Keyguard 。
Keyguard 应用支持 Android 和 Flatpak ,支持多账户,可同时登录到 Bitwarden 和加载 kdbx 密码库。此外,Bitwarden 限制高级版才能使用 TOTP 功能,其原理是免费账户客户端不显示 TOTP ,密钥是一样存储在服务器端。Keyguard 可以绕过这个限制,让 Bitwarden 免费账户也能使用 TOTP 。但可惜 Keyguard 目前不提供浏览器扩展,也不能与 KeePassXC 扩展连接。在 Linux 上也完全不支持快捷解锁,桌面体验上仍有不足之处。手机上 Keyguard Android 完全支持 Passkey 和快捷解锁,Bitwarden 官方免费版用户仍值得一试。
界面与使用体验
包括:Android手机,桌面浏览器扩展,Linux电脑,Windows电脑 的全方面使用体验。
Android 手机
界面美观
KeepassDX
KeePassDX 支持动态颜色,看起来也最原生。并且 UI 、图标和界面信息量等有很多自定义选项。

Bitwarden
Bitwarden 支持动态颜色。界面也很好看。

1Password
1Password 仅有默认蓝主题色,但UI设计全平台一致性好。整体观感不错。

快捷解锁
KeePassDX
支持将解锁凭据存储在设备 KeyStore 中,通过系统指纹或密码快捷解锁。
BitWarden
支持系统验证解锁或自定义PIN码解锁
1Password
支持系统指纹或密码解锁
桌面浏览器扩展
界面美观
KeepassXC
界面非常简单,由于浏览器扩展依赖连接桌面应用,所以像是桌面应用的功能延伸。但它还是提供了一个设置页面来自定义扩展的外观、功能等。

Bitwarden
界面凑活,风格一致。由于浏览器扩展主要是独立工作所以集成了更多功能。
我认为这个界面可以改进的更好,而不是直接套用类似移动端的设计(甚至导航栏顺序还不一样)。

1Password
依旧一致风格的UI,并为扩展单独设计了界面。
由于可以连接桌面应用,所以浏览器扩展略微简化。但与密码保存和填充相关的主要功能都有。扩展自身也带有一个独立设置页面,与桌面端类似。

快捷解锁
KeepassXC
桌面应用解锁状态下直接连接
如果桌面应用未解锁,点扩展内解锁按钮可直接唤起桌面应用解锁。
如果桌面应用未打开,会报错无法连接。因此建议将 KeePassXC 桌面应用设为自启动。
Bitwarden
目前 Microsoft Store 版本的 Bitwarden 桌面应用不支持浏览器集成…
Windows Hello 解锁需要桌面集成,但与桌面应用集成的唯一作用貌似是让桌面应用唤起个 Windows Hello 弹窗。即使桌面应用已打开并已解锁,浏览器扩展还需要再解锁一遍。如果你在浏览器扩展设置了 Windows Hello 解锁但没有打开桌面应用,那浏览器扩展就会卡加载。。
Linux上支持系统 PAM 解锁,但是每次解锁弹 PAM 弹窗之前甚至都还有一个确认连接窗口要求用户再点一遍。
我觉得,要是注重独立工作就完全独立,想要桌面集成就好好集成,现在的解锁体验还是半成品。

1Password
如果桌面应用已解锁,浏览器扩展可直接解锁。
如果桌面应用未解锁,点扩图标直接唤起解锁。
如果桌面应用未打开,点扩展图标会直接启动桌面应用并弹出解锁窗口。
Linux 电脑
界面美观
KeepassXC

专业风格的本地软件,兼容 KDE 原生顶栏。支持自定义托盘图标(彩色或单色)
Bitwarden

感觉就像套了个网页,菜单与内部界面较为割裂。兼容 KDE 原生顶栏。
1Password

依旧一致的商业风格的UI。兼容 KDE 原生顶栏。
快捷解锁
KeePassXC
官方在 2.8.0 终于支持了系统 PAM 快捷解锁(可使用指纹)。之前版本锁定后必须手动输入密码解锁。密钥文件支持记住路径。
还有一个项目能通过利用 systemd-creds 和 TPM2 为 KeepassXC 实现开机后自动的无密码解锁:
https://github.com/sumwale/keepassxc-unlock
BitWarden
首次解锁应用需要主密码或 PIN 解锁。
重启系统或应用也都需要使用主密码解锁。
后续再锁定才支持系统认证解锁。

1Password
首次解锁仅支持主密码解锁,不支持PIN。
重启系统或应用也都需要使用主密码解锁。
应用保持运行时再锁定才支持系统认证解锁。

Windows 电脑
界面美观
KeepassXC
专业风格的本地软件,使用系统顶栏。支持自定义托盘图标(彩色或单色)
Bitwarden
依旧像套网页,依旧内部界面与菜单割裂。使用系统顶栏。
1Password
依旧保持一致的商业风格的UI,并专门设计了窗口顶部空间。
快捷解锁
KeePassXC
首次解锁必须使用设置的密码密钥。首次解锁后再锁定和解锁时支持调用 Windows Hello 。
奇怪的是目前版本(2.7.12)启用 Windows Hello 快捷解锁后,即使是首次(使用密码密钥)解锁完成也会再调用一次 Windows Hello 验证,不知道是 Bug 还是有意为之。
不支持使用 TPM 作为解锁凭据。
BitWarden
支持 Windows Hello 解锁,也支持在首次开启时就使用 Windows Hello 解锁。支持自定义 PIN ,支持用户自己选择应用重启后是否要求手动输入密码或 PIN 。但不清楚是否使用了 TPM 。

1Password
支持 Windows Hello 解锁,也写明了支持 TPM 解锁。用户可选择“通过设备解锁”,在首次解锁输入密码(不支持自定义PIN)后续解锁使用 Windows Hello ,也可以选择“通过 TPM 解锁”,使得包括首次解锁也可以使用 Windows Hello ,无需再输入密码。

TOTP 与 Passkey 支持
Android 端 TOTP


KeePassDX:手动输入密钥添加,不支持扫码,可选择算法,支持 Steam 等。(最佳)

BitWarden:支持扫码或输入密钥,无法选择算法,支持 Steam(加上 steam:// 前缀)。
Keyguard:支持扫码或输入密钥,无法选择算法,支持 Steam(加上 steam:// 前缀)。
1Password:仅支持扫码,无法输入密钥,无法选择算法,不支持 Steam 等。
Linux/Windows 桌面端 TOTP


KeePassXC:仅支持输入密钥,无法扫码,允许选择算法,支持 Steam 等。(最佳)

BitWarden:支持扫码或输入密钥,无法选择算法,支持 Steam(加上 steam:// 前缀)。

Keyguard:支持扫码或输入密钥,无法选择算法,支持 Steam(加上 steam:// 前缀)。

1Password:支持扫码或输入密钥,无法选择算法,不支持 Steam 等。
Android 通行密钥
Android14 引入了 Credential Manager 接口,允许用户选择凭据管理器应用。
目前三个密码管理器均支持 Android 通行密钥,可为任意 APP 或浏览器网页使用。

Linux/Windows 桌面端通行密钥
Linux 上,系统级“通行密钥提供应用”仍在早期阶段。
目前三个管理器均不支持,而是仅能通过浏览器扩展为网页提供通行密钥支持。
Windows11 支持自定义系统通行密钥管理器,代替 Windows 自带的仅支持本地存储的管理器。
目前只有 1Password 进行了适配,设置后可接管所有应用程序的通行密钥。

Windows 设置系统通行密钥管理软件

Windows 调用 1Password 注册通行密钥
浏览器扩展 - 网页端通行密钥
KeePassXC

Bitwarden

1Password

三个密码管理器扩展均可介入网页的通行密钥请求。
三种弹窗都挺符合软件自身风格,喜欢哪一种因人而异。
如果在弹窗中点击取消或关闭,会下降到浏览器自带的通行密钥管理,不影响使用物理安全密钥。
但如果不使用硬件密钥,KeePassXC 允许关闭浏览器自带的通行密钥管理。
如果同时启用了多个密码管理扩展,它们会按一定顺序依次打开,直到其中一个成功完成交互。
个人总结
安全
KeepassXC >> Bitwarden > 1Password
KeepassXC 的本地存储通常是最安全的。但如果要设计文件同步,需要注意额外的安全风险。
Bitwarden 开源且支持自建服务器,因此比 1Password 更可靠。
Bitwarden 和 1Password 都采用“零知识(Zero-Knowledge)”与端到端加密架构。目前两家均从未发生过加密用户密码库的数据泄露。
成本
1Password :如果愿意为密码管理器长期付费订阅,且信任这个商业产品,果断选它。
Bitwarden 对个人来说免费版完全可用。如果愿意长期付费,还坚持开源精神?那选这个。但我认为 Bitwarden 对于个人来说不太适合订阅,不如把钱花在服务器上自托管。
另外,将 TOTP 密钥存入 Bitwarden 是免费的,但只有高级版才会生成并显示验证码。
不付费的话建议用 Aegis 这种优秀且专业的 TOTP 管理器。
KeePassXC 是纯粹的本地数据管理器,完全免费。
KeePassDX 虽然免费开源,但默认仍有一些限制,例如 Steam TOTP 和动态颜色主题不可用。开发者希望用户能做出项目贡献或捐款,随后用户向 [email protected] 发送证明。开发者确认后会回复一个 Pro 凭证APK,安装后即可解锁 KeePassDX Pro 并解锁所有功能。KeePassDX Pro 验证机制纯粹是检测本地有没有 com.kunzisoft.keepass.pro 这个应用。技术上也可以创建一个空包并安装,一样可以解锁。
跨平台
1Password > Bitwarden ≈ KeepassXC
1Password 在多平台界面和风格一致性,扩展使用体验,应用解锁体验 等综合表现最好
Bitwarden 在移动端的界面和功能都不错,但桌面端和扩展的使用体验要差一些
KeepassDX 移动端已经做的很不错了,但会有些许割裂感。
外观与设计
1Password:优秀
KeepassXC/DX:优秀
Bitwarden:中规中矩
名词与定义
2FA/MFA
Two-Factor/Multi-Factor Authentication:双重/多重 身份验证
2FA 将验证信息分为:知道的(密码)、拥有的(手机或安全密钥)、固有的(生物识别信息)。2FA 要求用户在登录时提供两种不同因素的组合
MFA 包含2FA,但不仅限于两种,可能是三种或更多因素的组合验证。
PIN码、OTP、TOTP、Passkey、指纹/面部识别 都可以作为多“因子”。
动态密码
动态密码常作为第二因素使用。目前动态密码的最优解是TOTP,很多平台均已支持。
OTP(One-Time Password/一次性动态密码)
只能使用一次的密码。包括:短信验证码、邮件验证码。
在账户2FA中,OTP 通常由服务器生成并发送给用户,或者通过特定算法在本地生成。在登录时输入并在服务器进行校验,用后即作废,因此可防止密码泄露后被重复利用。
由于这种OTP可能产生费用,且短信/邮件仍有泄露风险,已不再推荐使用。
HOTP (HMAC-based One-Time Password/基于事件的动态密码)
依靠一个共享密钥和一个计数器(每次使用后递增)来进行哈希算法生成生成一次性密码。
HOTP 生成无需联网,但最大的缺点是步调同步,用户无效点击和误操作都会导致密码和服务器不同步,因此还需要复杂的同步操作。因此目前已经被 TOTP 取代。
TOTP(Time-based One-Time Password/基于时间的动态密码)
依靠共享密钥和当前时间作为输入,通过不可逆哈希算法生成通常为 6 位的数字。
TOTP 同样生成无需联网,每隔30秒或60秒更新一次。通常比短信或邮件更安全,校准时间后就无需担心同步问题。但需要注意密钥(尤其当以二维码呈现时)一定不能泄露。
标准 TOTP 可使用 Aegis,Google Authenticator 等应用录入。
某些平台使用私有 TOTP 协议,例如 Steam Guard 令牌,兼容性取决于 TOTP 管理器。
TOTP 测试网站:
安全密钥
FIDO(Fast IDentity Online/线上快速身份验证)
由 FIDO 联盟制定的标准,旨在减少对密码的依赖,改用更安全非对称加密认证和生物识别。
经历了早期 FIDO1 (UAF/U2F) 和 FIDO2(包含 WebAuthn 和 CTAP 协议)两个主要阶段。
UAF
Universal Authentication Framework/通用认证框架
FIDO1 标准的一部分,属于第一因素。
目标是允许用户直接通过本机生物识别或 PIN 等本地认证来登录在线服务,完全丢弃密码。
U2F
Universal 2nd Factor/通用第二因素
FIDO1 标准的另一部分,属于第二因素。
U2F无法代替密码,而是专注于物理证明,以作为第二层防护。
Webauth
Web Authentication/Web身份验证
FIDO2 标准的一部分,让网页端实现了无密码登录。
WebAuthn 是 W3C 和 FIDO 联盟共同制定的一个标准接口,允许浏览器和服务器直接调用操作系统底层的安全硬件(如电脑的TPM芯片、手机的指纹识别器或外接物理密钥)。
**CTAP
Client to Authenticator Protocol/客户端到认证器协议**
FIDO2 标准的另一部分,定义了操作系统与外部独立认证器如何通信。
CTAP 是一个底层协议,让 电脑/手机 客户端配合外接物理安全密钥(蓝牙、NFC、USB密钥)进行认证。CTAP1 兼容 U2F 设备,CTAP2 提供完整 FIDO2 能力。
Passkey(通行密钥)
基于 FIDO2(以上四种技术)标准的最终、最具用户友好性的商业实现。
支持传统的“私钥”存储在外部硬件设备,由用户物理掌管;亦或者保存在软件管理器中,通过云端账户进行多设备同步。用户在登录时,不需要输密码,而是直接 插入密钥设备 或 调用密码管理软件 即可完成验证。
硬件Passkey 可以连接后直接验证,也可以附带 按钮/密码/指纹 等额外硬件。
软件Passkey 通常需要弹窗确认,也可以调用 内置PIN/指纹/系统密码 来额外验证。
Passkey 通常既可作为第一因素,也可作为第二因素使用。
Passkey 测试网站:
Passkeys.io – A Real-World Passkey Demo & Info Page
链接与参考
*本文用到的svg图标来自图标包:Papirus
https://github.com/PapirusDevelopmentTeam/papirus-icon-theme