用了6年的1Password要涨价了,看看免费的Bitwarden和KeePass是否足够安全
免费的密码管理软件也可以足够安全

1Password 要涨价了,所以我就重新调研了一下当下主流的密码管理软件,看看是否有更实惠的方案。我前两天写了使用密码时可能遇到的安全隐患,今天就继续对比下主流的几款密码管理软件,看看哪款更适合你我。
海选
我自己的使用场景比较简单,99%都是网站或 app 的账号密码,终端也只有 Mac 和 iPhone。所以在功能层面上,只要能存账号密码,只要能多端同步,再加上有自动填充功能,就已经可以满足我的需求了,我相信这也是绝大多数人的需求。
基于这个需求,找了几款密码管理软件,主要分三类:
- 商业软件,1Password就是这类的典型代表,其他的还有 Keeper、Dashlane、NordPass等。
- 开源软件,主要有 Bitwarden 和 KeePass。
- 附带软件,是指操作系统或商业软件附带的密码管理功能,例如苹果生态的"密码",还有主流浏览器自带的自动填充密码的功能。
我从功能性、安全性、易用性、价格等多方面对这几款软件进行了对比。先说结论,综合实力最强的还是我当下正在使用的 1Password,这个结论六年来并没有改变。但如果你不希望花钱,或是执着于自己掌控数据,Bitwarden 也是很好的选择。
下面我们来具体说一说。
初筛
商业软件中,除了 1Password 确实还有几家,但如果都已经愿意花钱买了,我还是建议优先选择最好的 1Password。其他几家虽然有一些价格上的优势,但整体功能和体验上都比 1Password 有一些差距。
而且如果你按年付费,1Password 平均一天也就不到一块钱,你已经愿意花钱了,完全没必要再省这么点儿钱,直接买最好的就行了。所以在之后的对比中,付费商业软件我就只考虑 1Password 了。
开源软件主要就是 Bitwarden 和 KeePass,但他俩的工作方式有很大不同。
Bitwarden 的工作方式类似 1Password,有各个终端的 app,有浏览器插件,但数据是保存在中心化的服务端的。只不过因为是开源软件,所以有免费版本可用。而且服务端支持自托管服务,也就是你可以在自己的设备或云服务器上部署服务,这样就完全由自己掌控数据,不依赖任何第三方。
KeePass 则是一种本地化的管理方案,所有密码数据都保存在你本地,完全由你自己掌管。它也有各个终端的 app,和浏览器插件,但想跨设备使用的话,就得由你自己来负责同步数据。
附带软件这个名字是我自己起的,你用了苹果的操作系统,人家就附带了一个管理密码的应用。你用了 Chrome 浏览器,它也附带了一个自动保存和填充密码的功能。所以我管这类软件叫附带软件。
首先,浏览器附带的密码管理功能我觉得要慎重使用,倒不是说它本身不安全,而是它的使用环境相对来说不太安全,尤其是当其他人也能使用你的电脑时,如果他人知道了你的电脑密码,那就可以直接查看你浏览器中保存的密码了。
苹果附带的"密码.app",为了避免混淆,后面就叫他 Password 吧。也是同样的逻辑,如果有人知道你电脑的密码,那 Password 的防护措施也会形同虚设。
当然,从安全角度讲,把自己电脑的密码泄露给别人本身就是巨大的安全隐患,最好不要这样做。但是,如果你的生活工作环境中无法避免这一点,那这类附带的密码软件就会放大这种隐患。
同时,我个人也有另一层考虑,这类附带软件都不是它们所属公司的主营业务,相对来说不会像专门的安全软件会受到足够的重视,相关信息披露也没有那么透明。附带软件出了问题,也就是有损口碑,顶多惹上官司,可专业安全软件出了问题是可以直接决定公司生死的。
所以,这类附带软件也不在我的考虑范围内,一些不太重要的账号密码,泄漏也不会造成损失的那种,也许为了方便我会使用这类附带软件,毕竟它们体验比较丝滑,但不会作为主力使用。
结合以上的考虑,入围最终比较的就只有三款了,1Password、Bitwarden、KeePass。他们都能满足我管理账号密码的需求,也都有浏览器插件和自动填充功能。
如果你不在乎花点儿钱,那 1Password 就是首选,它功能最全,体验最好。但如果你不愿意花钱,或者执着于自己掌控数据,那我们再接着看看 Bitwarden 和 KeePass 是否能达到我们的要求。
深入对比
首先需要说明的是,没有绝对的安全,不论是用哪一款软件,软件本身都可能出现漏洞,我们使用软件的方式也可能具有安全隐患。所以核心是那些众所周知的安全隐患,这些软件,以及我们自己,是否都已经进行了规避。
然后,在功能层面上,Bitwarden 和 KeePass 都能满足我们主要的管理账号密码的功能,也都有浏览器插件和自动填充功能,我都试用了一下,还是比较丝滑的,不比 1Password 差。所以以下内容还是侧重在安全和易用性上。
服务端是否会泄漏密码
Bitwarden 和 1Password 一样,都是将密码数据保存在服务端,然后通过各端的 app 来使用。所以最先考虑的就是服务端的数据是否安全。上一篇文章中提到了当年 CSDN 明文密码的泄漏事件,那么对于一个专门存放密码的服务,是否也会有类似的风险。
首先,不保存明文密码这种基本素养,这些专业软件还是具备的,并且它们不仅仅是不保存,甚至都不接收。你在密码管理工具中的所有信息,都是先在你本地进行加密,然后只把加密数据传输到服务端的。所以就算服务端数据被泄漏,黑客也无法获得你的密码是什么。
我们来大致了解下这个加密的过程。你在使用这些密码管理工具时,它都会让你创建一个主密码,之后你所有的账号密码信息,都是根据这个主密码,经过一系列的加密算法,形成密文,再传输给服务端的。
而当你想使用你保存的这些账号密码时,密码管理工具会从服务端获取到这些密文,然后再用你的主密码解密,你就可以获得原始的账号密码信息了。所以说,主密码是需要你自己记住的,并只在你自己的设备上使用的。
这样一来,哪怕服务端的加密数据泄漏了,只要没有你的主密码,那么那些加密数据也无法被还原成原始的账号密码。但这里也就存在一个风险点,如果黑客盗取了服务端的加密数据,然后又知道了你的主密码,那么他就能破解你所有的密码了。

服务端泄漏后的安全如何保障
黑客如何能得知你的主密码呢?一般有两种方式,一种是盗取,一种是猜,或者说是暴力破解。盗取的话就是给你的电脑植入病毒或木马,或是利用钓鱼网站,DNS劫持等手段。在上篇文章中已经介绍过这方面的安全隐患了。
第二种就是猜,比如黑客知道你很懒,所以你的主密码一定特别简单,于是他找来了全世界人们最爱使用的一万种简单密码,挨个试了一遍,结果试到第78个的时候,就是你用的123456,于是不到1/10秒,你的所有账号密码就被破解了。
所以,好消息是你无需担心服务端会直接泄漏你的账号密码,但是,一旦服务端数据泄漏了,那么你的密码会不会被泄漏就完全取决于你自己的安全意识了,你对自己是否有信心呢?
不过在这方面 1Password 还是留了一手,不愧是业界第一。1Password 在你本地为你的信息加密时,不只使用了你的主密码,还使用了一串128bit的随机数,被称为 Secret Key。也就是说,如果黑客要盗取你的主密码,那还得同时盗取这个 Secret Key,如果想猜到你的主密码,那也得同时猜到你的 Secret Key。
显然靠暴力破解来猜到 Secret Key 几乎是不可能的,那么当你使用 1Password 时,黑客只有同时盗取到你的主密码、Secret Key 和服务端数据,才能破解你所有的账号密码。这么看,理论上来讲确实比 Bitwarden 更靠谱一些。
不过,有一个方法可以提升使用 Bitwarden 的安全性,那就是把你的主密码设置得复杂一些,复杂到能暴力破解的概率也很小时,那么在以上场景下的安全程度就与 1Password 旗鼓相当了。


自托管是否安全
前面说了 Bitwarden 还支持自托管服务,也就是你可以不使用官方在公网提供的服务,而是使用自己部署的服务。这样一来,你所有的数据都可以由你自己来掌控,完全不会有其他人接触到你的数据。那么自托管是否比使用官方服务更安全呢?
在我看来,除非你是专业人士,不然自己部署的安全性未必就比官方高。只不过默默无闻的你,不太可能受到黑客的关注而已。可一旦你的部署操作出现漏洞,黑客也肯定不会介意顺便攻击你一下。
所以,除非你确定自己知道维护一个服务所需的安全知识,不然还是老老实实使用官方的服务吧,况且自己部署和维护一个这样的服务其实挺麻烦的,相当于大大降低了软件的易用性。
像我们这样的开发者,有时确实会执着于开源,执着于数据主权,但这也要有相应的实力来匹配。尤其是与安全相关的问题,千万不要盲目自信,跟那些有着巨大利益驱动的黑客群体相比,我们个人的能力微不足道。

纯本地方案是否安全
既然自己部署服务也没那么安全,那纯本地方案呢,我只把数据存放在我本地,完全无法在公网访问,是否更安全一些呢?
Bitwarden 的服务是可以部署在局域网的,然后完全与公网隔离,这样就可以避免来自公网的攻击。但同样需要你有专业知识来保障你的局域网是安全的,否则就跟放在公网无异了。一般公司组织可以这样用,仅用来为公司内部提供服务。
当然,你也可以直接部署在个人电脑上,但这样的话就失去了 Bitwarden 的服务端功能了,你只能自己在家用,那不如考虑使用 KeePass 了。
KeePass 就是一个纯本地方案,你所有的账号密码都会被加密存储在一个本地文件中。与 1Password 和 Bitwarden 比,相当于服务端数据和客户端数据都在你本地了。所以是否安全,就在于你自己的电脑是否安全了。
跟你把密码存到本地的记事本相比,首先你的密码不是明文存储的,这样就算这个文件被泄漏,也不会直接泄漏你的原始密码,这与前面说的服务端不保存明文密码是一个道理。所以如果你就是执着于一定要把密码控制在本地范围内,那 KeePass 肯定是比任何明文记录方法都更好的选择。
不过既然是本地方案,那么如果你想跨终端使用,就得自己解决同步问题。例如你在电脑上创建的密码,想在手机端使用。那你就得先把这个密码文件复制到手机端,你总不能每次都手动复制吧,那怎么办,找个网盘?或者使用什么同步工具?
你看,只要自己做了一个同步方案,那这个同步方案就可能成为另一个安全隐患,尤其是通过第三方的网盘或同步工具时,第三方就成了你的一个安全隐患,就又失去了你执着于本地方案的意义。

本地方案适合冷备
所以,当需要跨终端使用时,就不建议使用这种纯本地方案了。那什么时候会单设备使用账号密码呢,我觉得冷备是个不错的场景。
不论是 1Password 还是 Bitwarden,我们的数据都存储在服务端,如果他们的服务器出现意外,我们的数据很可能会丢失。虽然这是个小概率事件,但当我考虑安全问题时,本身就是在处理小概率事件。
所以我们需要定期对我们的账号密码数据进行备份,这样就算出现小概率事件,也不会导致我们的数据完全丢失。不过上篇文章也提到过,明文保存密码是很危险的,所以我们可以把账号密码数据导入到 KeePass 中,就相当于加密保存到了本地,以此来实现备份功能。
当然,还可以更进一步,把这个加密文件再进行改名或是压缩,然后存放在一个不太容易被访问的地方,比如一个不常用的 U 盘,或是一块加密磁盘上。让它不容易被访问到,即使被访问到了也不容易看出是什么文件。这就看你对数据安全的要求有多高了。

总结
所以,如果你确实不愿意花钱,我觉得 Bitwarden 的免费版也足够我们使用了,功能性、安全性、易用性上,与 1Password 相比差距也不是很大。而 KeePass 的本地方案比较适合做冷备,不太适合在跨终端的场景中使用。
使用 Bitwarden 的一些注意事项
锁定
当我们使用 1Password 时,首先需要输入主密码,然后才能解锁软件,查看我们的账号密码。之后如果一段时间不用,软件会自动锁定,再想查看密码还要再次输入主密码。这是 1Password 的一种安全机制,但我不记得这是软件默认的设置还是我自己设置的了。
而 Bitwarden 安装后默认是没有开启这个锁定机制的,我们需要自己配置一下。不然只要输入过一次主密码,后面不论谁使用你的设备,就都能看到你所有的密码了。这个设置需要在各个终端和浏览器插件中分别设置,千万别忘了。



剪贴板
使用密码时,除了自动填充,我们有时也会复制和粘贴密码,这样密码就会被保存到剪贴板,这同样也是一个安全隐患,一方面有些软件有可能会获取你剪贴板的内容,另一方面也容易误将密码粘贴到其它不安全的地方。
所以,尽量使用自动填充,确有必要使用复制粘贴时,也要尽量缩短密码在剪贴板存留的时间。尤其是当你使用一些剪贴板增强工具时,应该留意它会不会长期存储你复制的密码,好的剪贴板增强工具会刻意不留存从密码管理工具中复制的内容。
1Password 和 Bitwarden 都有自动清除剪贴板的功能,1Password 是默认开启的,Bitwarden 你得自己设置一下。尤其是手机端,好多 APP 都会监视你的剪贴板,复制完密码后不要随意开启其它软件,清空时间也尽量设置短一些。



不论你使用 1Password 还是 Bitwarden,都建议你把软件的所有设置项都看一遍,看不懂的可以问 AI,它们大都是为了进一步加强安全防护而设计的。
哪里来的信任
前面对比了几款软件的安全措施,但是这里会有一个问题,这些软件都不是我做的,就算是开源软件我也没读过它们的源码,读了也未必能看懂,那我凭什么相信它们做到了它们所宣称的安全。
严格来说,在安全问题上你应该始终保持怀疑,毕竟没有绝对的安全。最终我们选择这些产品,不是因为我们完全信任它,而是我们排除了更差的产品,选择了相对更好的。
这些产品和它们背后的公司深耕安全领域多年,已经有了不错的口碑,关键是他们的品质不只是他们自己说的。1Password 和 Bitwarden 都会定期进行第三方安全审计,也就是找行业里公认的外部安全专家来审查他们服务的安全性,所以他们的"宣称"才变得更加可信。
前面说我不会把苹果的 Password 和 Chrome 的密码管理功能作为主力,也是因为这些附带软件往往不太透明,很大程度上是依赖苹果和谷歌的口碑,而不是它们本身有什么公开的安全审计。
安全没那么简单
一个信息,你希望除了自己之外谁都不知道,最好的办法就是藏在心里,没有人可以直接从你的大脑中获取这个信息。
但当这样的信息越来越多时,你的大脑就没有能力记住这么多信息了,你就只能借助外部介质来保存信息。可只要是外部介质,就很容易被别人获取。
于是你就要加密或上锁,可这样你就又得确保解密的方法和锁头的钥匙不能被他人获取,难道要为它们再加一次密,再上一把锁吗?而且你能确保自己不忘记密码,不会丢失钥匙吗?
这样一直推演下去,你会发现似乎很难找到一个既安全又方便的方法。而对绝大多数人来说,对方便性显然是更敏感的,于是就会有意无意忽视安全性。
再加上绝大多数人都不懂得其背后的安全原理,就更加难以发觉各种安全隐患了。所以,专业的事交给专业的人做吧,如果你自己没打算成为安全专家,那么使用一些安全软件似乎是最好的选择了。