本文给出了一个只需使用桌面浏览器就可以二步验证的方案。

二步验证(2-Factor Authentication,2FA)已在各种隐私敏感应用中使用。因为比传统的账号 + 密码多了一层验证,各大网站也是推荐用户采取 2FA 来保护自己,我校近期也强制切换到了 2FA 系统。普遍 2FA 的方法是由验证器生成一个一次性的验证码,一般是 6 位数字。有效期只有 30 秒,过期便需要重新生成一个验证码。用户登录除了需要传统的账户密码,还得有这个实时生成的验证码才可以。验证器可以是一个手机 app,或者通过短信,打电话来传递。

Motivation

这篇文章的由来也是有一个 motivating problem 的,学校给学生登录账户的 2FA 提供了四种方案:

  1. 安装一个手机 app(名字叫 DUO)。经过一堆设置后,每次登录发送一个 push 到手机,点击同意即登录。
  2. 短信
  3. 打电话
  4. 直接填入 6 位验证码登录

前三种方案对一个没有手机(或手机经常不在身边)的人是非常不友好的,比如我老板 _(:з」∠)_ 。因而,需要迫切需要一个没有手机还能 2FA 的方案。

问题分析

之前 折腾 1Password(但那篇文章并未提及 1P 的这个小 feature)了解到了 One-Time Password(OTP)机制。这个 OTP 验证码的生成算法是公开的,已被标准化,任何人只需持有原始的密钥,便可以任意时候生成实时验证码。大多数 OTP 都是基于时间的,故而叫做 TOTP。

为了解决 motivating problem,我们需要做两件事:1) 找到自己的密钥,2)找到一个桌面可使用的 authenticator(即验证码生成器)。

如何找自己的密钥

登录自己的 学校账户管理页 ,注意这一步本身也是需要 2FA 的。接下来可以参照 此网页 的 Enrolling the WinAuth Software 标题下的 Step 6-7。网页会显示一个二维码密钥,就是我们想找的。

同理,设置其他采用 2FA 的网站,也需要找到一张类似的二维码图。这张图包含了用户的 2FA 密钥,所以一定要妥善保存。

用 Authenticator 生成验证码

因为所有的 TOTP Authenticator 都是基于同一个算法,所以我们只需找到一个可以采用 TOTP 算法并支持扫码的软件即可。桌面端我自己用的 1Password 已经集成了 OTP 功能。对于不使用 1Password 的人,我们还需要一个更便捷的软件。比如 Authenticator 是一款 Chrome 扩展,就非常好用。BTW, 作者是国人,而且软件开了源,赞一个。这个扩展几乎一看就会使用,这里就不赘述了。

如此,每次登录 2FA 账户,便无需手机在身旁。打开 authenticator 随时复制粘贴验证码即可。

需要重视一点,为了安全,一定要妥善保存自己的密钥,也应避免别人可以随意接触到自己的(即使是)实时的验证码。