提前声明:本文虽然会谈到个人的账户安全和密码管理,但是其实是个随笔,会扯到很多我的无聊日常。😂 请不要将它作为科普文看待。
显而易见,互联网已经成了我们生活中不可或缺的一部分。而账号又成了互联网不可或缺的一部分。其实早期,除了论坛、游戏、电子邮箱、聊天软件等个人属性非常鲜明的服务,大多数服务都是不需要账号的,一个小小 cookie 就足够承载所有匿名且临时的个性化内容了。而且那个时候各互联网服务供应商也没有那么大的欲望去挖掘用户的个人信息 🤣。那个时候,记住账号和密码是个轻而易举的事情,基本上所有账号都共用同一套用户名和密码或者几个用户名和密码随机组合。随着互联网飞速发展,和服务供应商对用户信息的越发渴望,我们需要注册的账号也越来越多,账号中包含的信息也越来越多,也越来越多的不法分子盯上了我们的账号。于是层出不穷的问题和安全限制,让我们的老方法越来越不适用
- 要求定时更新密码——多套密码循环使用解决。
- 不得使用过去几次使用过的密码——那我们就多准备几个密码来循环使用吧。
- 不得使用简单密码——又得多准备几套复杂密码了。
- 不得使用过去使用过的所有密码——你在逗我吗!
由于以上原因,这样的对话经常会发生在我和我老婆之间。
我老婆:我需要上 XXXX 干 YYYY。
我:那你需要注册一下 XXXX 你才能 YYYY。
我老婆:那我注册一下。
One thousand years later…
我老婆:上面提示我已经用邮箱注册过了,但是我想不起密码了。
我帮助她通过邮箱找回了账号并设置了新密码,然后反复提醒她务必记住。当然我知道她一定会忘了。
我老婆:你是怎么记住这么多账号和密码的?
我:我不知道我的密码是什么。有些账号的用户名是什么,我都不知道。
我老婆:那你怎么登录了。
我:我用密码管理工具啊。
我老婆:听着好复杂啊。算了!
我 😓 ……
这个对话每隔一段时间就会出现一次
随着需要维护的账户越来越多,我现在已经完全离不开密码管理工具了。多套密码循环这个方法,我其实坚持用了很久。因为早期的密码管理工具太难用:
- 不支持同步功能。我需要将一个设备视为主设备,用于管理所有账户,然后定期导出账户文件然后导入其他设备。在现在万物皆可云的时代,手动导入导出简直是太恐怖了,但我的确还坚持了一段时间
- 不支持跨平台。那个时候,由于浏览器和移动操作系统市场份额的不稳定,浏览器和移动操作系统 SDK 的不完善,使得微软、谷歌和苹果之间简直是隔了好几座山。很难找到一个软件能同时兼容 Mac、Linux、Windows、Android、iOS,同时兼容 Chrome、Chromium 和 Internet Explorer。想要找到一个跨平台的密码管理工具就更是难上加难了。
- 交互极差。在桌面上还是比较好用的,我们可以通过浏览器插件来自动将密码管理器里面对应账户的用户名和密码填入到登录框中。但是在手机上面简直就是个噩梦。那时候,我们只能使用密码管理器 APP 内置的浏览器来实现自动填入,但是相信大家都可以想象到内置的浏览器有多么难用。所以我们不得不通过复制粘贴的方式把用户和密码填入其他浏览器或者 APP 的登录框中,时间久了之后就觉得特别崩溃。更不用提很多站点密码框是不允许复制粘贴的。
所以在我尝试了一段时间早期密码管理工具后,我就退化到了多套密码循环使用的老方法中。
读到这里,我相信肯定有人会想,为什么这家伙有多无聊使用这么多不同浏览器和操作系统。其实原因还很简单
- 当时办公本是 Mac 的。我个人本子用的是 Ubuntu,但是又割舍不下游戏,就又安装了 Windows 双系统。
- 由于工作经常需要 oncall,需要常年带个人和工作两部手机,一个 iPhone 一个 Android。
- 虽然我现在喜欢用 Firefox。以前我常规情况下在 Windows 和 Mac 下面用 Chrome,Linux 下面用 Chromium。但是那个时候很多站点,比方说银行和政府站点通常只支持万恶的 Internet Explorer 6,所以必要时候只能切换到 IE。
个人密码管理
随着 Chromium 项目日趋完善和 Firefox 市场地位的巩固,现在主流应用基本都会同时提供 Chrome 和 Firefox 两款扩展,当然 Edge 扩展现在也逐步成为主流扩展之一。同时多亏了 Android 的 Autofill 还有 Accessibility 等等能力的支撑,以及 iOS 的 AutoFill Passwords 这个设置项的出现,彻底又开始让我重新开始拥抱密码管理工具了。在尝试了多个密码管理工具之后,我最终选择了 Bitwarden,因为
- 支持云端同步,我所有的设置共用一套账号库。
- 提供 Chrome、Chromium、Firefox、Safari 的扩展,满足我对浏览器支持的所有需求。
- 同时支持 iOS 和 Android。
- 即便有个别服务商出现账号泄漏事件,也可以大幅度降低使用相同密码引起的撞库风险
- 免费版已经可以满足我目前的需求。
有了密码管理工具,我在注册服务的时候,就不再需要自己想密码了,直接使用密码生成器来生成一个符合要求的密码。为了可以最大限度地符合所有服务商的密码要求,我通常都是把所有条件都勾上。
使用生成密码注册服务账号的同时,可以选择将这个自动保存在 Bitwarden 里面。从此以后,就可以通过 Bitwarden 来完成这个服务用户名和密码的填写,完全不需要记住各种复杂的密码。通过这个方式,完成可以保证每个账户的密码肯定是不同的,完美地避免了撞库风险。
个人账号安全
密码管理工具的确非常好用,但是却存在一个隐患:如果 Bitwarden 账号被盗了,岂不是所有服务的账号都被盗了。其实这个可以概括成两个问题:
- 如何最大限度避免 Bitwarden 被盗?因为 Bitwarden 是我们所有账户的入口,所以不可能设置一个极其复杂的密码
- 如果 Bitwarden 真的被盗了,如何保证其管理的所有账号不会被轻易盗取?
这个时候,就引出了另外一个概念:双重认证(2FA),可能有些朋友喜欢说成二次验证、双因子验证。
Multi-factor authentication (MFA; encompassing authentication, or 2FA, along with similar terms) is an electronic authentication method in which a user is granted access to a website or application only after successfully presenting two or more pieces of evidence (or factors) to an authentication mechanism: knowledge (something only the user knows), possession (something only the user has), and inherence (something only the user is). MFA protects user data—which may include personal identification or financial assets—from being accessed by an unauthorised third party that may have been able to discover, for example, a single password.
Wikipedia
根据 Wikipedia 结合上文,简而言之,你需要通过设置保证除了提供用户名和密码以外,你还要提供至少多一个的认证信息,才能登录你的账号,比如说:
- 手机验证码。它的曝光率很多时候甚至超越密码,成为了第一认证手段。当手机验证码成为第一认证手段的时候,其实是个很大的安全隐患。如果你的手机被盗了,对方即便无法解锁你的手机,也可以把你的 SIM 拔出插到其他手机里面,轻易知道你的手机号码和接收短信验证码登录到服务里面。所以为了避免这个,我所有的 SIM 都是开启 PIN 锁的。开启 PIN 锁之后,手机在重启后,或者 SIM 卡插入到新手机中,都需要输入 PIN 才能接收到信号。多次输错 PIN 之后,SIM 会被销毁,只能到营业厅更换新的 SIM 卡。
- 电子邮件验证码。
- 身份验证器应用生成的 OTP,常见的有:Microsoft Authenticator 和 Google Authenticator。我个人推荐前者,因为前者带有同步功能。我曾经有一次因为手机坏了,无法通过 Google Authenticator 拿到 OTP 丢失了个里面存有重要历史信息的账号。客服特别“敬业”,即便我提供了用户名、密码、电子邮箱地址、我过去一段时间的登录地点和时间,他依然不肯重置我的身份验证器绑定。🤦♂️
- 绑定身份验证器时提供的恢复码。务必保存好,除非你确定不会丢失验证器绑定,否则就有可能出现我上次发生的情况。
- 物理身份认证设备。后面会简单讲一下。
回到前面第一个问题:如何最大限度避免 Bitwarden 被盗?请务必打开你的 Bitwarden 账户的双重认证。
第二个问题的答案也是一样的。只要服务商支持双重认证,请务必开启这个功能。
开启 2FA 容易埋的坑
先说结论:
- 在开启 2FA 的时候,请务必开启至少两个双重认证方法,如果服务商支持的话。
手机验证码用时爽,改起来真是要人命。我曾经因为换城市而更换了手机号码,然后发现我根本想不起来所有绑定过原手机号码的服务,无法把所有服务的绑定号码改成新号码。就算我能想起来,全部绑定一遍也是个很恐怖的事情。现在得益于密码管理工具,我可以清楚地列出我所有的账号,并做好分类,比如说:绑定中国手机号码是一个分类,新加坡号码一个分类,绑定物理身份认证设备又是一个分类。同时我的账号几乎都激活了至少两个的 2FA 方法,所以当一个认证方法出现问题后,我也不用急于在很短的时间内把这些账号设置都更新一遍。
- 尽量使用不常变的方法作为 2FA。比方说,相对于手机验证码,我现在更喜欢用电子邮箱验证码和物理身份认证设备
- 对于可能变化的方法,增加备份。我现在常用的重要服务都会绑定两个手机号码。物理身份认证设备更不用说了,绑定了两个。一个随身携带,一个扔在保险箱里面。
物理身份认证设备
说到物理身份设备,得追溯到我本科时代了。那个时候,银行业非常落后,什么在线支付、手机支付都是天方夜谭,甚至连信用卡刷卡都不怎么普及,出门几乎都是现金。
到了本科快毕业的时候,一些较为超前的银行如招商银行发布的网上支付和转账功能。但是操作起来极其复杂。每次完成一个操作,必须具备四个条件:
- Windows 操作系统。即便后来我不再使用双系统,还依然需要保留一个 Windows 虚拟机。
- 银行提供的管理软件,而且只支持 Windows。
- Internet Explorer。因为银行的密码输入控件和数字证书只支持 IE。
- 一个叫做 U 盾的物理身份认证设备,这个设备只有这个银行能用。
由于操作之复杂、电子商务的不流行,很多时候我宁可用 ATM 来完成转账。而且这个 U 盾使用率太低了,经常赶上换宿舍或者搬家就弄丢了。每次去银行网点补办都要先挂失,挂失需要 24 小时生效后才能补办,不光要跑两次,还要提交一坨材料,简直是反人类。
来了新加坡,我又换了一次手机号,这也让我有了重新尝试物理身份认证设备的念头。查了发现,结果喜人,现在已经有很多物理身份认证设备支持通用第二因素(U2F)了。支持 U2F 就意味着,我可以用一个设备解决几乎所有账号的 2FA 需求,不需要一个服务商对应一个设备了。看了一些评测,我最终选择了 YubiKey。如果你在选择型号时候遇到困难的话,他们也贴心的提供了一个选择器。😂 当然你可以在上面提供的列表链接里面找到适合你的物理身份认证设备。
如果你想要在你的手机上也使用认证设备来登录账号,建议选购 NFC 版本。因为很多 APP 支持 NFC 读取认证设备内容,使用 NFC 版本的认证设备只需要在手机背面触碰一下即可。
一个小提醒,如果你选择 NFC 版本的认证设备,建议使用如下图类型的钥匙环。因为如果你使用传统硬钢圈的钥匙环,当你想把认证设备贴合在手机背面的时候,钢圈会让设备翘起来,影响 NFC 的识别速度。
作为一个物理身份认证设备,他的能力当然不仅仅局限于账户登录这么简单,比方说:
- 他可以用来控制电脑登录,你需要插入设备才能完成开机后的用户登录。毕业设计或者论文被盗的情况也不是什么小概率事件了。当然如果你的资料已经重要到要用身份认证设备来控制开机的话,也务必别忘了开启磁盘加密,免得硬盘被人直接拆走。😂
- 装个支持开源智能家居协议的电子门锁和 NFC 读取模块,就能实现刷认证设备开门了。毕竟单支持指纹的智能门锁比支持指纹和门卡的要便宜不少。
- 当然也可以拿个支持 NFC 的废旧手机做成 NFC 读取终端,配合开源智能家居,玩出很多新花样
- 用设备维护你的 GPG Key 来实现免密码 SSH 登录和代码库操作。
以上只是抛砖引玉,更多的大家可以自己挖掘。
前天把密码管理全换成了 BitWarden,今天无意中从我之前评论的博客回复链接里点到友情链接到你的博客就看到了这篇密码管理的内容。
昨天折腾自己搭建 BitWarden 服务端,又发现了 2FA 这个有意思的东西,今天把很多重要的账号都加了 2FA 认证。
看到你这篇文章感觉简直是太巧了。
我也在考虑是否在 NAS 上自己搭建个 Bitwarden……