浅谈关于密码的管理和使用策略——效率与安全平衡的艺术

浅谈关于密码的管理和使用策略——效率与安全平衡的艺术

Published
Published May 7, 2020
Updated
Last updated April 10, 2022
Description
Progress
Author
每当你注册一个新的网站,你就很可能多了一个需要保管的密码。这时你便面临着选择困境:
  1. 使用已有的密码:选择了效率,但你将增加被撞库的风险。
  1. 使用新的密码:选择了安全,但你将增加记忆的难度。
那么有没有什么方法能够让我们能够向两个方向各前进一步呢?
🚧
本文不包含某个软件的具体使用教程(在 Reference 中给出)

TL;DR

  • 密码管理软件
  • 密码记忆策略
    • 随机高强度密码
    • 高强度但有特殊含义的密码
    • 高强度可推导的密码
      • 可记忆部分
      • 可推导部分
    • 分级
  • 第三方认证避免密码使用

效率与安全平衡的难题

摘要中其实已经点名:安全和效率在绝大多数情况下都是“二律背反”的。
实际上笔者也没有完美的解决方法——能够同时带来效率和安全的梦境般的密码管理方法。
但是优化依然是存在的。

使用密码管理软件

graph LR; A(人脑记忆)-->B(文本记忆); B-->C(密码管理软件);
用密码管理软件解放人脑
使用密码管理软件是脱离苦海的第一步。笔者这几年来尝试过:
  • KeePass
  • Google Password Manager
  • LastPass
他们各有各自的特点,接下来稍微说一下笔者的个人体验。

Keepass 的使用体验

keePass
keePass
笔者是这样使用的: - 作为唯一的密码管理工具 - 启用了 Windows 用户账户关联 - 仅在 Windows 下使用 - 离线保存密码,定时备份文件
感受: - 确实比人脑记忆好了很多 - 随机的高强度加密 + 自动输入和混淆让当时的我眼前一亮 - 新注册的一些网站可以直接采用高强度的随机密码 - 但有时摸不到电脑,就没法拿到密码 - 没有使用插件是感觉配置太麻烦 + 有一些担心

Google Password Manager 的使用体验

Google Password Manager
Google Password Manager
在笔者开始频繁使用 Chrome 浏览器以及 Google Account 之后, Google Password Manager 逐渐替代了 KeePass。
笔者使用它的方式: - 不需要额外应用安装与配置 - 多客户端 + 可同步 - 注册时候用于生成高强度密码 - 非常适合笔者这种很懒的,并且依赖 Google 的用户
各款浏览器目前应该都有推出密码管理功能,那么这一段可以自行引申到其他竞品上。
感受:
Google Password Manager 似乎是 KeePass 的一个对立面:效率第一,原生的远程备份
当你折腾来折腾去发现自己还是想当一个懒人——不想牺牲太多效率——那么浏览器的密码管理器适合你。
但是考虑到近几年人们对 Google 的印象有了一定程度的滑坡,这种不信任 也蔓延到了它的产品上。因此在某一天也许我会从 Google 上迁移出来。

LastPass 的使用体验

LastPass 的浏览器插件
LastPass 的浏览器插件
第一次接触 LastPass,是因为需要接收对方分享的密码。于是在这之后 LastPass 作为了一个我的 “备选项”,一直出现在浏览器插件里。
笔者使用它的方式:
  • 使用其浏览器插件。
  • 将密码在保存到 Google 以后,如果可以,单独再保存到 LastPass 一份。
  • 接收其他用户分享的密码。
感受:
  • 其实如果不是需要“兼容”同学的话,确实我应该不会有机会使用它。
  • 分享功能适合团队写作,而其他的体验和其他产品基本一致。

小结

最后笔者试图用一张表总结他们的特点,并引出接下来的分析:
KeePass
Google Password Manager
LastPass
上手难度
较难
简单
正常
特殊要求
使用 Google 全家桶(安卓体验更加)
开源
可否共享
多用户
分享
而我们这次的目的并不是说要推荐某一款浏览器插件,只是说:
这些浏览器插件各有可取之处,单独/组合使用能够不失安全地大大提升生产力。

设置密码策略

密码管理软件能够覆盖你大多数的应用场景,甚至能彻底改变以往的密码设置方式:
  • 不重要网站的“一次性”密码
但以下这些场景依然需要人脑记忆:
  • 主密码
  • 开机密码
  • 离线 & 非主力设备上使用的密码
对此,(配合着密码管理软件)你可以使用以下组合的密码策略:
  • 随机高强度密码
  • 高强度但有特殊含义的密码
  • 高强度可推导的密码
    • 可记忆部分
    • 可推导部分
  • 分级

随机高强度密码

这类密码用于一次性网站,使用管理软件记忆。
比如一串 uuid 或者随机生成的长密码:
2c3e8e82-64c0-d2de-3604-02d8f2562100 jcmjjY3CP5hmCByqMQnPLMBnXq5
这样能够最大程度避免撞库攻击

高强度但有特殊含义的密码

这类密码用于主密码,比如操作系托登录的密码。需要直接记在脑袋里。
比如笔者的全名这样对自己很特殊的字符串:
BiZheDeQuanMing CodeForGood
这样能够不依赖推导、不依赖平台。

高强度可推导的密码

上一类密码虽然很好,但是太费脑子了,可能一个人同一段时间的使用不会超过十个。
那么其他的密码怎么办?这就需要可推导的密码了。
它使用固定部分和当前网站的信息推导的部分组合而来:
// ZhiHu lolalalolala-ZhiHu // DouBan lolalalolala-DouBan // BaiDu lolalalolala-BaiDu
这样我们便可以用上面一种密码生成更多实用的高强度密码。

分级

根据应用场景的重要程度,使用不同级别的密码。重要程度从上到下依次为:
  1. 主密码
  1. 主要软件/网站的密码
  1. 大部分网站密码
  1. 不太重要的密码

第三方认证

以 OpenID, SSO 为代表的第三方认证是一个彻底替代密码的方式。
大部分网站都提供第三方认证的支持:
OpenID & SSO
OpenID & SSO
所以如果你愿意,笔者也非常推荐这种方式来代替部分密码记忆。

Reference