说说「双因素认证」(2FA)
「双因素认证」(2-Factor Authentication,也常被称作「两步验证」,下文略作 2FA)这个主题一直都保持着一定的热度。这其实是一个很好的让账户变得更安全的方式,不过它仍然没有得到广泛地应用[1],甚至将近一半的人完全没听说过它[1:1]。
本篇文章会回答以下问题:
- 2FA 是什么
- 2FA 如何保护我的账户
- 2FA 在多大程度上是安全的
- 为什么要使用 2FA
- 如何(在一些网站上)启用 2FA
- 启用 2FA 后的注意事项
- 「短信验证码」算不算 2FA
- Apple 的「双重认证」又是什么
本文对 2FA 的定义可能相对广义。如果有任何文章相关的问题,欢迎在评论区共同讨论。如果发现文章有疏漏或错误,也欢迎在评论区提出。
那么让我们开始吧。
2FA 是什么
双因素认证,实际上是多因素认证(Multi Factor Authentication)的子集。这里的「因素」,指的是能证明某人身份的几种方式:
- 你是谁[2]
- 你有什么
- 你知道什么
让我们为这三种因素举几个例子:
- 「你是谁」 - 指纹、虹膜、面部识别(虽然现在的面部识别方案似乎都不是很精确)、好友辅助申诉
- 「你有什么」 - 短信验证码、UsbKey(U盾)、二步验证码、设备锁
- 「你知道什么」 - 密码、密码保护问题的答案
常见的使用密码登录的方式,是典型的单因素(密码,也就是「你是谁」)认证。与之相对,使用 两种/多种 因素对登陆尝试进行验证的方案,就叫做 双/多 因素验证。双因素认证的几个例子:
- 密码(知道什么) + 二步验证码(有什么) (多数 2FA 的方案,如 Steam、GitHub)
- 密码(知道什么) + 设备锁(有什么)(腾讯 QQ、微信等)
2FA 如何保护我的账户
两方面:
账户所有者依旧可以正常登录
账户真正的所有者应该拥有上述的所有三种「因素」,故双因素认证不会使账户所有者无法登录。
非账户所有者不能登录
第三方通常只有以上三种「因素」中的一种(绝大多数情况下是密码)。使用两种因素进行验证的话,只有密码的第三方将无法登录。
2FA 在多大程度上是安全的
简单来说就是:
- 如果第三方只有你的密码,他无法登录。
也就是说,2FA 在以下情况下可能(但不是一定)无法保护你的安全:
- 当你的手机丢失的时候(有些服务提供仅通过手机验证码重置密码的功能)
- 当你将你的两步验证码告诉了持有你密码的人的时候
- 当你的服务商使用的两步验证码生成方案过于薄弱以至于可以被破解的时候
- 当第三方可以通过他所得到的信息进行密码重置的时候
- 当你的设备可以被远程控制和读取的时候
- 当服务端出现可绕过登录的漏洞的时候
- ...
- 简而言之,2FA 通常无法防御与登录无关的任何入侵手段。
为什么要使用 2FA
既然 2FA 在这么多种情况下都没法保护我的账号,为什么要费劲用它呢?
因为对于安全意识较好的用户和说的过去的网站,大多数情况下的问题都是,由于键盘记录器,或其它网站的密码数据库泄漏,或你的密码被人通过某种方式窥探,使他人获得了你的登录密码。而在这种情况下,2FA 可以保护账号不被他人随意登录。它保护了最常发生的一个安全问题。
如何(在一些网站上)启用 2FA
- 部分服务在绑定手机号码之后,可以以短信验证码为基础进行二步验证。如各种银行和支付平台。
- 部分服务可以通过能生成二步验证码的硬件设备进行二步验证。如银行密码器、YubiKey、RSA SecurID。
- 部分服务可以通过在手机上安装特定的 App ,通过 App 生成的一次性验证码进行二步验证。如战网通行证。
- 部分服务可以通过向邮箱发送包含一次性验证码的邮件进行二步验证。如 Microsoft 和 Steam。
- 部分服务可以通过已登录设备进行验证。如 Google 服务框架和 Apple 的多重认证。
- 许多服务提供以通用的 TOTP 协议为基础的二步验证功能。
具体启用 2FA 的方案,请参见相应网站的指南或 Authy 提供的指引。
个人推荐 andOTP 作为 Android 平台的 TOTP 客户端。
启用 2FA 后的注意事项
- 请在需要登录的时候,随身携带 2FA 设备/应用程序。
- 请妥善保管与保护 2FA 设备/应用程序。
- 请妥善保存启用 2FA 服务时提供的恢复代码(如果有)。
- 除非需要代为登录/验证,请不要将 2FA 代码告诉他人。
- 请妥善备份 2FA 数据(尤其在使用基于 TOTP 协议的二步验证功能时)。
- 重置密码通常会重置 2FA 密钥。
FAQ
「短信验证码」算不算 2FA
算。但是短信容易被监听(例如,当监听者是政府的一部分的时候)。
Apple 的「双重认证」又是什么
一种更方便的「双因素认证」。密码(你知道什么) + 设备确认(你有什么)仍然是二步验证。