什么是两步验证

我们登陆一个网络服务时,使用账号密码的组合来验证身份,一旦密码被盗,账号安全便受到威胁。少数派有关于使用密码管理软件和设定更安全密码的专题文章。请参考相应文章,那是提升账户安全的第一步。

而这里要讲的两步验证,则是更进一步提升账户安全。两步验证,顾名思义就是需要两个步骤(使用两个钥匙)来验证使用者身份。给网络安全额外一层保护,即使密码被盗,账户依然安全。

打个比方,以前只有一道大门配一个钥匙,钥匙被盗坏人就能进屋。两步验证有两个大门和相应的钥匙,一个钥匙被盗(通常是密码)也打不开门,需要第二个钥匙。

两步验证 两道大门
两步验证 两道大门

两步验证 (Two-Step Authentication) VS 双因素验证 (Two-Factor Authentication)

根据验证机制,验证的因素有三类:

  • 「你本身」(Something you are),如指纹、虹膜和面部识别等
  • 「你拥有的」(Something you have),难以被复制的实体,如你的手机、实体动态密码器
  • 「你知道的」(Something you know),记在脑子里的,如密码

双因素验证使用两个因素:例如,一个是「你知道的」(密码),另一个是「你拥有的」(验证器,手机或 USB 钥匙)。盗号者必须通过不同渠道同时盗取两个不同机制的因素才能完成盗号。同时在网上盗取密码,并且在现实生活盗取实体非常困难,所以双因素验证更加安全。

「双因素验证」一定是「两步验证」,「两步验证」不一定是「双因素验证」。区别便是两步骤是否使用以上三类因素中的两个不同类别。但对于一般使用者,无论因素是否相同,两步验证都远比只有密码安全的多。

如何工作

启用两步验证后,在新设备登陆账户时:

  1. 像以前一样输入账号密码
  2. 并且还需要输入一个验证码(验证器验证码、短信验证码、电话语音验证码、实体 USB 钥匙等等的其中一个)

验证器的工作原理

短信验证码和电话语音验证码都是验证你是否持有这个手机或者电话来判断身份,原理比较简单,这里要详细讲的就是以上第二步中的验证器验证码。

使用验证器验证,在手机上安装密码生成应用程序验证器(Authenticator) ,可以生成一个随着时间变化的一次性密码,用于帐户验证,而且这个应用程序不需要连接网络即可工作。验证器使用 TOTP (Time-based One-time Password) ,也称时间动态口令,是OTP(One-time Password) 的一种,由 HOTP(HMAC-Based One-Time Password)演变而来,具体请参考 RFC 4226。网银和网络游戏的实体动态口令牌也是类似原理。它们都在用,你就知道有多安全啦。

用户开启验证器服务时:

  1. 服务器随机生成一个的密钥,例如「KJ9KU6J1N2SC7EF」,并且将这个密钥保存在数据库中。
  2. 页面上会显示一个二维码,内容是这个 TOTP 的密匙。
  3. 用户使用验证器客户端扫描二维码,把密钥「KJ9KU6J1N2SC7EF」保存在客户端,此时该密匙便离线保存在验证器里了。

用户需要验证身份登陆时:

  1. 验证器客户端每30秒使用密钥「KJ9KU6J1N2SC7EF」和时间戳通过一种「算法」生成一次性动态口令,如「325434」。
  2. 用户输入一次性动态口令「325434」。
  3. 服务器端使用保存在数据库中的密钥「KJ9KU6J1N2SC7EF」和时间戳通过同一种「算法」生成一个6位数字的一次性动态口令,应该与客户的相同。
  4. 两个动态口令在服务器验证时如果相同,则验证成功允许登录。

你需要两步验证吗?

两步验证的优点很明显:提供额外的安全保护。而且这样的安全保护是 1+1 > 2 的。但是也有缺点,那就是第二钥匙丢失时可能被锁在自己账户外。

因此,在设置两步验证时,需要注意两点:

  1. 需要至少设置两个「你拥有的」验证方式,即:验证器验证码、短信验证码、实体 USB 钥匙中的两个。
  2. 设置两步验证时,会生成一次性登陆码,也是为了避免被锁在账号外。一定要保存好一次性登陆码。

并不是每个人都需要两步验证,盲目设定而没有好的管理习惯很容易把自己锁在账户外,造成不必要的麻烦。请根据你对账户的重要性和验证方式的信心酌情考虑。

动手设置两步验证

选择合适的验证器 App

由于 TOTP「算法」是开放的,所以可以使用任何的验证器 App 将所有的验证密匙放在一起方便管。常见的验证器有:

  • Google Authenticator
  • Microsoft Authenticator
  • OTP Auth(内购)
  • 1password (订阅收费的高级功能)
  • Authy
  • LastPass Authenticator
  • SAASPASS
  • Obsidian - OTP Authenticator

选择验证器主要考虑以下因素:

  • 稳定性
  • 持续更新
  • 安全性
  • 是否有云备份功能(云备份可能会降低安全性)
  • 颜值

毕竟涉及安全,一般推荐考虑大厂家的 App 。

进入相应网站开启两步验证

大的厂家如 Facebook 、Google 、 Evernote 、 Dropbox 等都有两步验证功能,而且开启方式相似。以下以开启微软账号的两步验证(这里叫双重验证)为例。

步骤1. 打开账户设置页面:https://account.microsoft.com ,进入「安全性」-「更多安全选项」并输入密码验证身份。

null

步骤2. 点击「设置双重验证」,按照提示设置:「下一步」-「应用」-「其他」。注意:这里选择「其他」是为了能使用通用的验证器,如果使用微软自家的验证器,这里按相应系统选择直接登陆账号,没有扫描二维码这一过程。

null

步骤3. 使用自选的验证器 App 扫描二维码(可能需要保存二维码),添加密匙到 App 。

null

步骤4. 输入 App 上显示的动态码,验证成功。

null

步骤5. 因为有的应用无法弹框输入两步验证码,所以还需要为这些应用或设备创建应用专用密码,按照提示创建并使用专用密码去相应设备登陆即可。

null

步骤6. 在「恢复代码页面」,生成恢复代码,并保存好。

null

验证器备份

使用验证器最大的风险便是设备或者 App 损坏或丢失,把自己锁在自己的账户外。那做好备份就很重要了。

云备份

使用 iCloud 备份的有:

  • OTP Auth
  • Obsidian - OTP Authenticator

而使用自家云备份的有:

  • 1password
  • Authy
  • LastPass Authenticator
  • SAASPASS

使用云备份涉及到传输过程和云上储存的安全性,是否降低了两步验证的安全性有待讨论。同时也要考虑使用 iCloud 或自家备份系统的安全性差异。

本地备份

注意到两大厂家的验证器 Google Authenticator 和 Microsoft Authenticator 都没有提供云备份功能。不知道这是基于安全考虑还是还没有来得及做(懒)。所以,如果你使用这两家的验证器App或者不信任云备份就需要自己做本地备份。

本地本份其实很简单,在开启两步验证的第三个步骤时,把二维码通过截图或者右键另存为保存下来,和一次性登陆码放在一起,放在安全的地方。在验证器 App 损坏,手机丢失等情况下,只要用新的验证器 App 扫描二维码就可以再次添加,不需要全部关闭两步验证再全部开启重新设置。