




















最近,我收到了 Github 的横幅通知,其要求我尽快启用双因素认证(2FA),否则将禁止我访问 Github。然后我才知道,打 2023 年起,Github 就已经开始逐步强制所有开发者都启用双因素认证来提高账号安全性。

这是 Github 2FA 推送机制。发起提示 45 天内不设置双因子验证的用户将被禁止访问 Github,可见其推进安全系统升级的决心:

近年来,以 Github 为代表的科技公司认为传统的密码已经难以满足如今的安全需求,其主张以双因素认证来替代传统的密码机制。这引起了我对账号安全性以及信息安全的兴趣。本文致力于回答以下问题:
密码是最直观的保证账号安全的方法。但是随着时代的发展,密码在安全性下降的同时还给用户造成了大量麻烦。
在互联网发展早期,互联网提供的服务还不多,用户的互联网账户很少,只需要为每个账户设置一个密码并且记下来就可以很好地保障安全。可是随着互联网渗透进生活的方方面面,现在我们每个人都手握起码几十个账号。如果每个账号都设置不同的密码,那要记住这么多密码几乎不可能。以我为例,不算移动端 app,我光是浏览器就保存了多达 186 个密码:

在这种情况下,大家开始想各种办法来减小密码给自己带来的负担。其中最常见的做法无疑是所有网站统一使用一个密码。
统一密码的好处是容易以及,坏处则是安全性大打折扣。这种情况下,只要有一个网站泄露了密码,其他所有网站的账号就会同时失去保护。要命的是,密码泄露事件非常常见。有一个叫做 Have I been PWNed? 的网站可以查询自己的邮箱信息是否被泄露。我在这个网站上查询了自己的邮箱,发现我的邮箱和相关密码早在 2016 年针对优酷的一次袭击中就已经泄露出去了。如果我这些年一直沿用相同的密码的话,后果是不堪设想的。

为了少记密码并且减轻安全风险,和很多人一样,我采取了一个自以为很有效的方法。我将密码分为三个部分:
[密码主体]![级别]+[网站名称] 这样的密码看似完美解决了问题,但是实际上又会产生别的新问题:
_ 和空格,有的则不允许使用特殊字符;总之,这样一套规则无法兼容所有网站,许多账号的密码都是要单独记忆的特例;ShaoShuPai 还是 SSPAI 呢?这是个问题;很久之后你还会记得你用了哪个吗?随着我因为输错密码而暴跳如雷的次数越来越多,各家网站「找回密码」这一服务的压力越来越大,在大家的呼声下,革新方案呼之欲出。而这次大家选择了双因素认证。
双因素认证(Two Factors Verification,2FA)是建立在原先的密码系统之上的一种方案。2FA 要求两样东西:
双因素中前者是已有的,后者则是新添加的要求,只有完成两步验证才能最终验证通过。有了第二步验证的加持,认证安全性大大提高。网站不需要再在密码上提太多苛刻的要求也可以满足安全性需要。
双因素认证在今天已经十分常见,仍然以 Github 为例,Github 支持如下双因素验证方式:

其中 SMS/Text Message 选项就是我们熟悉的密码+验证码双因素验证方式。除此之外,最值得提的双因素验证方式是 TOTP,即上图显示设置好的 Authenticator app 验证方式。
基于时间的一次性密码(Time-based One-Time Passwords,TOTP)是一种很常见的双因子验证方式,其验证需要用一个验证程序(Authenticator app),流程是这样的:

TOTP 是一种常用且有效的双因素验证方式。本文会在后面讨论如何用密码管理 app 有效管理生成以及管理 TOTP,在此之前我需要先向大家介绍一下我的机要信息管理方案。
前文提到,现在普通人需要管理的互联网账号越来越多,密码数量的增长造成了安全性和易用性的两方面麻烦。一个密码很可能有生以来从未遭受过一次恶意破解,但是却曾数次阻挠用户正常登录账号。不论是为了方便还是出于安全目的,我们都需要对密码有一个管理手段。
除了密码之外,这一概念还可以拓展到其他机要信息,比如密钥文件、关键信息等。机要信息的存储以及管理主要需要顾及这几个方面:
接下来我会先从密码本开始,带你一步步走完我的机要信息管理系统演变历程,最后着重介绍成熟的版本,希望能对你有所帮助。
我和很多人一样,需要高频输入密码,又自备一定功能的浏览器自然而然成为了第一个密码管理器。浏览器的优点毋庸置疑:
然而其缺点也是极其明显的:
由于我实在是很需要在 APP 里面输入各种密码,因此在浏览器难堪大用的情况下,我开始枉顾安全性,又把密码本这一传统智慧请了回来。然而明文存储手机便笺中、没有加密、没有同步的做法很快就带来了报应:我的手机屏幕坏了;但是由于害怕密码本泄露,我始终对送修心存忌惮,最终让我陷入了不断拉扯。就这样,我开始踏上了寻找更好的机要信息管理手段——一个真正的密码管理器的道路。
密码管理器是专门用来存储并且管理密码的软件。其基础功能包括安全地保存重要信息、自动生成密码等。
绝大多数密码管理器都通过维护一个密码库、并且为密码库设置单独密码来保护其它密码。只需要再辅之以自动填充等功能,这样用户就只需要记住一个密码库密码即可访问所有需要密码的 APP 和网站了。

市面上的密码管理产品非常多,比如功能和评价都极好的 1Password,LastPass。但我这里主要介绍两款开源密码管理器:Bitwarden 和 Keepass。
Bitwarden 和 Keepass 均为广受用户欢迎的开源密码管理器,其中 keepass 有许多基于开源 keepass 2 进行二次开发的版本。本文主要会从基本功能、使用体验以及进阶功能三个方面对比 keepass 和 bitwarden,希望能为你提供一些参考价值。
Bitwarden 是一款功能完善且界面观感极好的开源密码管理器。大多数开源软件的界面设计不太考究,但是 Bitwarden 不论在 PC 端还是手机端都做出了简约漂亮而且易用的界面,从用户的角度来看,这是非常加分的。

用户可以用 Bitwarden 管理的信息类型如下:

每一种类型都拥有不同的字段。比如登录类型有用户名、密码、网站网址、以及备注这几个字段,可以用于存储我们生活中使用的大部分密码以及备忘信息;而支付卡则在此基础上还多了持卡人姓名、品牌等字段。此外,你也可以向其中添加自定义字段来适配你自己的需求,不过如果要在字段上附加文件则需要付费。相比起 1Password(月费 2.99 美元),Bitwarden 收费不高,仅仅为 10 美元(73.05 人民币)每年。
在生成密码方面,Bitwarden 支持自动生成强密码,可以选择密码长度、包含的字符类型以及密码短语。

生成的密码会被存储于你的私人密码库中,被同步到云上。此后不论是浏览器还是手机、电脑、平板客户端都可以轻松访问。
Bitwarden 支持包括 2FA 在内的多因素认证方式。以 TOTP 为例,只需要将验证器密钥填入准备好的字段内即可使用 TOTP 认证(这同样是付费功能):

除了基本的存储密码之外,普通用户最看重的是自动填充功能。我们希望当密码框出现的时候,密码管理器就能自动识别,并且省心地为我们填好密码。Bitwarden 的自动填充功能做得极好,不论是手机端还是电脑端(浏览器端需要安装浏览器插件),不论普通密码还是 TOTP 都能快速识别到并且自动填充。

手机端:

不仅是网站和 APP 密码,Bitwarden 手机端还能识别到微信支付密码输入并且进行自动填充。而作为可以自己部署的开源软件,Bitwarden 值得信任,不需要担心这样做会泄露重要的隐私信息。
不过值得注意的是,手机端的权限情况比 PC 要复杂得多,密码管理器可能需要特别的配置才能实现 APP 密码填充,而且配置方法随手机不同而不同。一般来说,Bitwarden 设置的自动填充选项会引导你进行正确的设置,相比起需要进行复杂配置或是需要 root 权限才能在手机端实现密码自动填充的密码管理器来说,Bitwarden 可以说是对用户非常友好。
Bitwarden 有许多进阶功能,我认为其中最为可圈可点的是这几个:
作为一款开源密码管理器,Bitwarden 支持 Docker自建。如果你认为 Bitwarden 提供的几个域名在国内访问太慢,或者单纯只是不信任服务提供方,那可以自行购买域名搭建服务,将数据掌握在自己手里。
Bitwarden 也支持安全共享文本或者文件。只需要编辑一个 Send,然后 Bitwarden 就可以为此生成一个可共享的安全链接,对方就可以通过链接安全地收到文件。这个功能对于有安全需求的组织非常有用。

此外,暗网的社工库一直以来都在严重威胁普通用户的密码安全,造成隐私泄露以及恶意使用。Bitwarden 团队会主动监控暗网,及时发现泄露密码,并提醒你更改。
综合来看,Bitwarden 是一款基本功能十分完善、对用户十分友好而且收费不高的密码管理器。适合能接受一定付费的普通用户,尤其是不满 1Password 以及 LastPass 过高收费的用户。此外有相关技术背景的用户可以考虑自建 Bitwarden,保证数据时刻掌握在自己手中。
Keepass 是一款很有名的开源密码管理器,其支持包括存储密码、密码分组、密码生成以及自动输入在内等许多丰富的功能特性。

和 Bitwarden 一样, Keepass 支持所有的基本功能。用户可以创建 entry,entry 包含有标题、用户名、密码、URL 等字段,并且用户可以自行添加新的字段。

Keepass 提供一个强大且高度可定制的密码生成器。相比起 Bitwarden,Keepass 的密码生成器可以实现更加精细的控制,不仅可以控制是否使用空格、拉丁文字符,甚至还可以自定义密码生成算法,足够满足高度专业性的需求。

和 Bitwarden 相同,Keepass 也允许添加文件作为附件。但是 Keepass 包含这个功能在内的所有功能都完全免费,更加适合不想在密码管理上花钱的用户。

Keepass 本身是完全离线的,其会将所有的信息都存储在一个密码数据库文件(.kdbx)里面。这个密码数据库本身被高度加密,需要使用唯一的主密码才能打开。默认情况下,Keepass 使用 AES/Rijndael 算法来加密数据库文件,在没有主密码的情况下几乎不可能通过暴力破解打开数据库。如果对安全性还有更高的要求,可以调高迭代次数,继续增大破解难度。但是相应地,打开数据库的速度就会变慢。

虽然 Keepass 本身不具备云同步功能,但是其却为你使用第三方同步提供了支持。Keepass 同步只需要同步密码数据库文件即可。我比较推荐使用坚果云 webdav 的方法来进行同步,只需要在坚果云对该文件启用 webdav,然后选择打开 URL 选项即可打开云端 webdav 密码数据库,轻松实现 webdav 同步。

Windows 端的 Keepass 的并没有原生的自动填充功能,实现自动填充要依赖插件。在 2025 年我比较推荐的自动填充方案是 KeepassRPC+Kee,其中前者是 Keepass 插件,后者是浏览器插件。只需要打开 Keepass,解锁密码库,然后就可以在浏览器中使用 keepass 的自动填充功能了。
如果网页和密码库中的密码能匹配上,那么 Kee 会为你自动填充好账号和密码,你只需要点击登录即可。

Keepass 使用 TOTP 也需要插件的辅助,TOTP 插件我推荐两个:
以 Github TOTP 为例。安装 TwoFactorQRCodeReader 后,右键一条已有的密码(如 Github 账户),选择扫描二维码。之后只要二维码出现在屏幕上,就可以被检测扫描从而获取到 TOTP 密钥(如果没有成功扫描到,可以截图选取二维码区域,TwoFactorQRCodeReader 会读取剪贴板的图片从中识别二维码)。

之后,TOTP 数据就会被添加到这条密码的「其他数据」中。右键这条密码,选择「其他数据」,就可以复制 TOTP 验证码。

如果你使用的是 KeeTrayTOTP,那你需要手动复制 TOTP 密钥到 Keepass 中。如果采用这样的方式,复制 TOTP 验证码也需要选择 Tray TOTP Plugin 选项。
Keepass 本身只支持 Windows 平台,要在手机上使用 Keepass,还需要其它 app。以安卓为例,手机端 Keepass app 有很多,我最推荐的仍然是 Keepass2Android。

Keepass2Android 支持一个手机端密码管理器所需的一切功能,包括存储密码、Webdav 同步、自动填充等。和 Bitwarden 手机端一样,Keepass2Android 自动填充一样需要一定的配置。如果你也使用小米系手机,在设置中启用自动填充并且将自动填充 app 设置为Keepass2Android 即可。
Keepass2Android 一样支持 TOTP。PC 端不论是 KeeTrayTOTP 还是 TwoFactorQRCodeReader 产生的 TOTP 都可以在Keepass2Android 中兼容。在 Keepass2Android 中,你可以看见 TOTP 验证码每 30s 刷新一次(由于 App 内禁止截图,所以这里就不演示了)。
此外,Keepass2Android 也支持指纹验证、安全键盘等。Keepass2Android 也是一个基于 Keepass 构建的开源软件,安全性可以保证,可以放心授予相关权限。
Keepass 是我使用时间最长的密码管理器,其功能之丰富,插件生态之强大,可以允许有技术基础以及相关需求的人进行深度定制。然而 Keepass 基于 C# 以及 .NET 平台构建,不支持 Windows 之外的平台,苹果生态下的用户将无缘Keepass。此外,Keepass 的设计风格比较古典,习惯现代扁平风简约设计风格的用户可能会不习惯。
更重要的是,Keepass 的大量功能由插件提供,这些功能往往缺乏打磨。比如 Kee 可以填充密码,但是由于 Keepass 的 TOTP 功能由其他插件提供,因此 Kee 不能自动填充 TOTP 验证码。这就导致了一种情况:单看每个指标都很不错,但综合体验却不行。
为了解决这些问题,KeepassXC 诞生了。KeepassXC 使用 C++重写了 Keepass 的功能,不仅设计了更加现代化的界面,而且还将功能集成起来进行重新打磨。相比起 Keepass,KeepassXC 具有这些特性:

KeepassXC 的浏览器插件支持完整的自动填充,不仅可以自动填充账号密码,也可以自动填充 TOTP 验证码,这使得 2FA 登录体验也变得无比丝滑。而 Kee 插件是不支持自动填充验证码的。


KeepassXC 可以设置快捷键调出全局自动输入,对于插件识别失败的密码框或者是 APP 密码,可以直接按下快捷键调出密码。

除了基本的密码存储以及填充,KeepassXC 也原生支持 SSH Agent 密钥填充(Keepass 必须通过 KeeAgent 插件)。Windows 自带 OpenSSH 服务,这个服务提供了 SSH-Agent 功能。KeepassXC 支持存储密钥,并且在数据库开启的时候将密钥添加到 SSH 环境中并且及时移除密钥,从而免去将密钥存储在本地导致泄露的风险。
要使用 SSH-Agent,要先启用 Windows 自带的 OpenSSH 服务:
Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent然后选定一条密码(一般是服务器密码),将私钥文件添加到附件中:

然后在 SSH 代理界面选择刚才添加的私钥附件,并且粘贴公钥。勾选上两个选项,使得密钥和数据库同步可用:

点击确定之后,重启 KeepassXC,之后在登录远程服务器的时候就再也不需要输入密码了。这种 SSH 代理的方式不仅可以保护密钥安全,还很方便迁移密钥。
不过 KeepassXC 对 webdav 的支持不如 keepass。KeepassXC 不支持直接使用 webdav 链接,而是必须将 webdav 文件挂载到本地,再以文件的形式打开。不过好在 Windows 的文件管理器原生支持此功能。你需要打开文件管理器,右键「此电脑」,选择「映射网络驱动器」:

接着选择一个还没用过的盘符,文件夹处输入 webdav 链接,接着输入密码。验证通过之后就可以像是访问本地文件一样访问 webdav 文件了。

除此之外,KeePassXC 还有一些实用小功能。比如密码统计:

密码健康检查,可以提醒自己及时更换密码,规避安全风险:

HIBP 检查,即使用文章开头提到的 Have I been PWNed 检查密码泄露次数。我也是为了写这篇文章才知道,我居然使用被泄露可能有 10 万次的密码。

总得来说,KeepassXC 是一款发扬了Keepass 优点同时也对用户很友好的开源密码管理器。KeepassXC 虽然总体上不如 Bitwarden 易用,也不如 Keepass 有那么多高级功能,但是却很好地平衡二者之优点,而且完全免费,非常符合不希望付费但是希望拥有相对好的体验的用户。
| 软件 | 付费 | 密码生成 | 2FA | 自动填充密码 | 跨平台同步 | 易用性 | 功能丰富程度 | 数据掌握在 | SSH Agent | 适合用户 |
|---|---|---|---|---|---|---|---|---|---|---|
| Bitwarden | 10 美元/年 | 一般 | 支持 | 好 | 自带跨平台同步 | 极好 | 一般 | 云端(但是自行部署) | 支持(付费) | 有付费意愿的普通人 |
| KeePass | 免费 | 好 | 需要插件 | 一般(需要插件) | Webdav | 一般 | 极高 | 用户 | 需要插件 | 技术极客&专业用户 |
| KeePassXC | 免费 | 好 | 支持 | 好 | Webdav(需要手动挂载) | 好 | 好 | 用户 | 支持 | 无付费意愿的普通人 |
我是@西郊次生林,一个关注效率工具研究生,欢迎关注我收看更多真实体验 & 测评。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。