最近在纠结一个问题,要不要把密码 TOTP (Time-Based One-Time Password) 形式的 2FA (2-Factor Authentication) 合并到密码管理器中,这样可以更加方便地使用和管理,不过弊端也很明显,2FA 验证实际上变成了 1FA 验证,有被一锅端的风险,但仔细一想,似乎问题也没那么大?
目前密码管理使用的是自建 Vaultwarden (Bitwarden),TOTP 使用的是 Microsoft Authenticator,两者配合达到了“较高”的安全性。如果将 TOTP 添加到 Vaultwarden (Bitwarden) 中,一旦 Vaultwarden (Bitwarden) 发生泄漏,密码和 2FA 将一同送上,会造成严重损失。因此,需要做一个权衡:更安全还是更便捷。
首先好处是显而易见的,将 TOTP 放到 Vaultwarden (Bitwarden) 里之后,登录网站时不必专门打开手机 Authenticator 应用去看验证码,Vaultwarden (Bitwarden) 自动填写用户名和密码之后,二次验证码也会自动复制到剪贴板,只需粘贴即可完成登录。
还有就是备份。开启 TOTP 之后,两步验证工具的可靠性也很重要,手机丢失/损坏,同步/恢复出错也是一大风险点。虽然 iOS 上 Microsoft Authenticator 支持 iCloud 备份,但不支持跨平台同步(到 Android),也看到了一些系统升级导致数据丢失的例子。即便大多数账号在开启 2FA 时我都在本地加密备份了恢复代码,但随着注册的账号越来越多,难免有漏网之鱼,添加到 Vaultwarden (Bitwarden) 中管理也相当于多一份备份,而且我也早就想将所有的 2FA 重新设置整理一遍了。
相对于便捷性来说,安全性上唯一的增加的风险来自密码管理器自身的泄漏,但 Vaultwarden (Bitwarden) 本身也支持开启 2FA,你仍需要使用第三方应用/硬件来管理该 2FA,也就是说此时将两者一起存在和分开存放的安全性其实是差不多的,如果你的 Vaultwarden (Bitwarden) 账号 TOTP 泄漏,也意味着存在于该 Authenticator 应用上的其它账号的 TOTP 同时泄漏了。主要差距在于密码管理器的一大特点是多终端同步,你的 2FA 也会保存到所有你登录的终端,这就增加了一定的隐患,此时建议你将密码管理器的超时时间以及超时动作设置激进一些,或者直接创建两个账号分开存放并通过单独的设备管理 TOTP 账号。剩下的就取决于你是否有自信做到以下几点:
- 完全信任你使用的密码管理器
- 保证主密码的强度以及不会泄漏/遗忘
- 不会被邮件/短信轻易钓鱼
- * 自建服务器的可靠性以及定时备份,数据库文件不会被泄漏并破解
不会被人趁你不注意从解锁的客户端中导出数据
如果能保证这些,安全性其实依然不错。此外 TOTP 本来也不算特别的安全的 2FA 形式,要保证安全,就不建议进行任何形式的网络同步,并且 2FA 也不应该和密码同时存在于一个设备上,保存到本地离线设备才是最优解,TOTP 发展到今天被大众接受,本就是不断的向便捷性妥协的结果。更好的办法还是使用基于 FIDO2 (Fast IDentity Online 2) 的硬件密钥,不过这又回到了开始的问题,要更安全还是更便捷。
在我看来,鸡蛋不放同一个篮子的担心没错,不过篮子本身的可靠性也需要考虑,如果有同步 2FA 的需求,比起使用微软、谷歌等 Authenticator 工具的同步功能,我还是更愿意自己把控风险,一切都是 trade-off,你都不信任密码管理器了,那为什么还要使用它呢?别让自己一直处于如果被三体人破解了怎么办的忧虑中,在够用以及一定强度的安全保证下,更加便捷也是不错的选择,不过如果你也纠结的话,我肯定是建议分开存放的。
如果你觉得这篇文章还不错,可以考虑支持作者。