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

每当你注册一个新的网站,你就很可能多了一个需要保管的密码。这时你便面临着选择困境:

  1. 使用已有的密码:选择了效率,但你将增加被撞库的风险。
  2. 使用新的密码:选择了安全,但你将增加记忆的难度。

那么有没有什么方法能够让我们能够向两个方向各前进一步呢?

本文不包含某个软件的具体使用教程(在 Reference 中给出)

TL;DR

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

效率与安全平衡的难题

摘要中其实已经点名:安全和效率在绝大多数情况下都是“二律背反”的。

实际上笔者也没有完美的解决方法——能够同时带来效率和安全的梦境般的密码管理方法。

但是优化依然是存在的。

使用密码管理软件

graph LR;
A(人脑记忆)-->B(文本记忆);
B-->C(密码管理软件);

用密码管理软件解放人脑

使用密码管理软件是脱离苦海的第一步。笔者这几年来尝试过:

  • KeePass
  • Google Password Manager
  • LastPass

他们各有各自的特点,接下来稍微说一下笔者的个人体验。

Keepass 的使用体验

keePass

笔者是这样使用的:

  • 作为唯一的密码管理工具
  • 启用了 Windows 用户账户关联
  • 仅在 Windows 下使用
  • 离线保存密码,定时备份文件

感受:

  • 确实比人脑记忆好了很多
  • 随机的高强度加密 + 自动输入和混淆让当时的我眼前一亮
    • 新注册的一些网站可以直接采用高强度的随机密码
  • 但有时摸不到电脑,就没法拿到密码
  • 没有使用插件是感觉配置太麻烦 + 有一些担心

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. 主密码
  2. 主要软件/网站的密码
  3. 大部分网站密码
  4. 不太重要的密码

第三方认证

以 OpenID, SSO 为代表的第三方认证是一个彻底替代密码的方式。

大部分网站都提供第三方认证的支持:

OpenID & SSO

所以如果你愿意,笔者也非常推荐这种方式来代替部分密码记忆。

Reference