双因素认证 (2FA) 在允许某人登录账户之前,要求提供两种不同类型的证明。第一种几乎总是密码(你知道的东西)。第二种是不同类别的证明,例如手机上的验证码(你拥有的东西)或指纹(你本身的特征)。因为两种证明来自不同类别,窃取其中一种通常无法让攻击者获得另一种。
类别区分才是关键。密码可能在数据泄露中外泄、被钓鱼窃取或被猜到。如果攻击者和你的账户之间唯一的屏障就是那个密码,那么一次泄露就足以导致账户被入侵。增加来自不同类别的第二因素意味着攻击者必须同时突破两个不相关的防线,这在大规模攻击中要困难得多。
三种认证因素
安全领域将证明分为三个类别。只有当两种证明来自两个不同类别时,登录才算双因素认证。
- 知识(你知道的东西): 密码、PIN 码、安全问题的答案。
- 持有(你拥有的东西): 接收 SMS 或推送通知的手机、身份验证器应用、硬件安全密钥。
- 固有特征(你本身的特征): 指纹、面部扫描、声纹。
两个密码仍然只是知识因素,所以先输密码再输 PIN 码并不是 2FA。密码加上手机验证码才是,因为它将知识与持有配对。如果你想深入了解界限在哪里,请参阅双因素认证与两步验证的区别。
第二因素可以是什么?
实际上,第二因素几乎总是持有因素,你有几种选择,在便利性和抗攻击能力之间做权衡。
- SMS 或语音 OTP。 一个短的一次性密码通过短信发送到你的手机号码,或由自动电话语音播报。它适用于任何手机,无需安装应用,这也是它成为全球最常见第二因素的原因。
- TOTP 身份验证器应用。 Google Authenticator 或 Authy 等应用根据共享密钥和当前时间生成一个每 30 秒轮换的六位验证码。验证码从不经过网络传输,因此没有可被中途截获的内容。
- 推送批准。 服务向已注册的应用发送提示,你点击批准或拒绝。使用方便,但容易引发 "push fatigue" 攻击,即用户为了让提示停止而随手点击批准。
- 硬件密钥和通行密钥。 物理密钥(FIDO2/WebAuthn)或存储在设备上的通行密钥使用永不离开硬件的私钥对质询进行签名。它们能抵抗钓鱼攻击,因为签名绑定到真实站点的来源,仿冒域名无法收集任何可重用的信息。
为什么重要
大多数账户接管始于攻击者已经掌握的密码,来源可能是泄露数据、重复使用的凭据或钓鱼页面。这些都无法让攻击者获得你的第二因素。所以即使是基本的 SMS 验证码(并非最强的选项),也能阻止绝大多数纯粹依赖被盗密码的批量自动化攻击。
值得坦率地说,2FA 不是具有单一安全级别的单一事物。硬件密钥和 SMS 验证码都是 "2FA,",但它们防御的威胁截然不同。根据你所保护内容的价值来选择第二因素。
有哪些权衡?
基于 SMS 的 2FA 最容易部署,也最容易被攻击。SIM 卡交换欺诈(攻击者说服运营商将你的号码转移到他们的 SIM 卡)和 SS7 拦截都可能将你的验证码发送给他人。基于应用的 TOTP 完全绕过运营商,因为验证码在你的设备上生成,没有可重定向的消息。硬件密钥和通行密钥更进一步,能抵抗钓鱼攻击,但代价是用户需要拥有并随身携带密钥。
合理的默认方案:提供 SMS,因为它覆盖面最广,但允许注重安全的用户升级到身份验证器应用或通行密钥。某些账户(管理控制台、财务仪表盘)值得直接要求使用更强的选项。
如何添加 2FA?
如果你是用户,在服务的账户或安全设置中找到并启用它。服务通常会显示一个二维码供你扫描到身份验证器应用中,或者要求你确认一个用于接收 SMS 验证码的手机号码。将恢复码保存在安全的地方,以免手机丢失后被锁定在账户之外。
如果你在构建这个功能,有两条路径。你可以自己实现 TOTP(它是一个规范明确的标准,计算量很小)并为每个用户存储一个共享密钥。或者你可以将 OTP 的发送和验证交给提供商,这样你就不需要自己运行 SMS 管道或手动处理请求速率限制逻辑。Bird 的 Verifications 产品通过 SMS、语音和电子邮件发送并校验一次性验证码,底层的 SMS 产品负责消息投递,如果你想自行组装流程的话。
常见问题
双因素认证和两步验证是一回事吗?
不完全是。2FA 要求两种证明来自不同的因素类别。两步验证意味着两个连续步骤,可能使用也可能不使用两种不同的因素。这两个术语经常混用,但当你分析一次攻击实际上需要突破什么时,区别就很重要了。
基于 SMS 的 2FA 足够安全吗?
对于大多数消费者账户来说,足够了,因为它能阻止依赖被盗密码的批量攻击。对于高价值账户,建议使用身份验证器应用或硬件密钥,因为 SMS 容易受到 SIM 卡交换和网络拦截攻击。
如果我丢失了第二因素怎么办?
大多数服务在你启用 2FA 时会发放恢复码。将它们离线保存。如果没有恢复途径,丢失持有第二因素的设备可能会让你完全无法登录账户。
2FA 能替代强密码吗?
不能。第二因素是额外的保护层,不是替代品。弱密码或重复使用的密码仍然会扩大攻击面,所以在使用 2FA 的同时,继续使用密码管理器和唯一密码。
双因素认证是提高账户接管成本的最经济方式之一,第二因素通常是一次性验证码。如果你想了解验证码本身的工作原理,请阅读 OTP 的含义,或者查看 Bird 如何在 Verifications 产品中处理验证码发送和验证。