跳到主要内容
2FAAuth.Work
语言: 中文
阅读约 10 分钟 作者:2faauth.work 编辑政策

2FA 简史:从硬件令牌到通行密钥

双因素认证如何从外挂式硬件令牌与短信验证码,演变为如今可抵御网络钓鱼的通行密钥——以及每一步演变的原因。

为什么仅靠密码已不再足够

几十年来,用户名和密码是攻击者与你的账户之间唯一的防线。当账户只存在于一台办公室服务器上时,这尚且可行。而当几乎所有事情——银行、电子邮件、工作、购物——都转移到网上后,这就不再可行了。

两个问题叠加在一起。首先,人们会重复使用密码:一个小网站发生泄露,攻击者就获得了凭据,这些凭据可能还能打开某个电子邮箱或银行账户。其次,数据泄露达到了工业规模,产生了海量被盗的用户名-密码对,犯罪分子会用它们自动测试其他服务。这种自动尝试被称为“撞库”:攻击者用泄露清单批量登录其他网站,几秒内就能试完数百万个组合——人类根本不可能手动做到,而机器可以不知疲倦地昼夜运行。

单因素认证存在结构性缺陷:它所依赖的唯一因素——秘密——可能被猜出、窃取、重复利用或钓鱼获取。钓鱼尤其棘手:攻击者伪造一个和真实网站几乎一样的登录页面,用户在假页面上输入密码,密码就直接落入了攻击者手中。再强的密码也防不住这种欺骗,因为问题不在于密码本身,而在于用户根本不知道自己在向谁证明身份。

安全研究人员用三种因素类型来描述认证:

  • 你所知道的 — 密码或 PIN
  • 你所拥有的 — 手机、硬件令牌或安全密钥
  • 你所是的 — 指纹或面孔

关键在于“不同”二字。密码加第二个密码(比如安全问题)仍是同一类因素,攻击者拿到一次泄露往往能把两者一起骗走。真正的提升来自跨类别组合:知道密码的人,还必须同时拿到你的手机或指纹。

组合两种不同的因素会大幅提高门槛:仅凭一个被盗的密码不再能打开大门。攻击者还必须窃取设备或生物特征。正是这个简单的想法驱动了接下来的一切。

硬件令牌时代(1980年代–2000年代)

最早广泛使用的第二因素是小型硬件令牌:钥匙扣式或卡片大小的设备,带有一个显示数字代码的小屏幕。银行将其发放给企业客户,企业则将其交给员工用于 VPN 和网络登录。RSA 于 1980 年代推出的 SecurID 成为最著名的例子。

代码如何离线工作

令牌无需任何连接。在基于时间的设计中,令牌与服务器共享一个秘密种子和一个时钟;每隔一分钟或半分钟,双方都从该种子加上当前时间推导出相同的代码。基于事件的设计用计数器取代了时钟:按下按钮即递增计数,双方根据新的计数值计算代码。由于令牌与服务器遵循完全相同的规则,它们无需通信即可保持同步。

这种离线特性也带来了实际的运维细节。时间型令牌的时钟会漂移:长期放置不用的设备可能走快或走慢,导致代码与服务器不一致,管理员不得不预留一定的容错窗口,或定期校准。计数型令牌则怕“按了不用”:用户按下按钮却没登录,计数器就永久前进一格,服务器必须允许一定范围的超前计数,否则令牌会逐渐失效。此外,种子在制造阶段写入设备,一旦工厂或分发环节泄露,攻击者就能离线算出所有代码——这类种子泄露事故曾迫使厂商大规模更换令牌。

为什么普通用户从未见过它们

每个令牌都必须经过制造、运输、注册,并在电池耗尽或丢失后最终更换。这种按用户计算的成本,加上库存和帮助台的开销,使硬件令牌仅限于银行和大型企业使用。丢失令牌还意味着员工无法登录,帮助台需要一套身份核验流程来补发——这些都是个人用户难以承受的复杂度。

短信验证码让 2FA 走向大众

到了 2000 年代中期,手机已经无处不在。银行意识到可以通过发送一次性短信验证码来确认登录或转账,一夜之间,第二因素触达了数以百万计的用户。无需购买硬件令牌,无需安装软件——口袋里已有的手机就成了第二因素。

Web 服务紧随其后。电子邮件服务商、社交网络和购物网站纷纷将“向你的手机发送验证码”作为一项选项,2FA 不再只是企业安全工具,而成为普通用户轻点几下就能开启的功能。

不过,SMS 也有实实在在的代价:

  • SIM 卡调包:攻击者通过欺骗或收买运营商,将你的号码转移到新 SIM 卡上,从而接收你的验证码。给运营商设置 SIM 卡 PIN 或换卡密码可以增加一道门槛;同时尽量减少号码在网上暴露的机会,例如避免在公开的个人资料中填写手机号。
  • 拦截:验证码经由移动网络传输,可能通过某些电信攻击被截获。旧式 2G 网络尤其容易受到这种攻击,而短信本身从未被设计为安全信道。
  • 依赖运营商:没有信号、没有漫游,就没有验证码——往往也就无法登录你的账户。出国旅行前,务必确认漫游已开通,并提前准备一种备用登录方式。
  • 号码回收:换号或销号后,旧号码会被运营商重新分配。新机主若尝试用该号码找回你的账户,验证码会落入他人之手。换号前,先在各账户中更新手机号,或改用其他 2FA 方式。

SMS 让 2FA 走向大众,但也暴露了一个缺陷:第二因素掌握在运营商手中,而不属于你自己。

身份验证器应用与推送批准

智能手机让每个人口袋里都有了一个硬件令牌。Google Authenticator 和 Authy 等 TOTP 应用基于共享密钥离线生成 30 秒有效期的验证码。由于生成过程在本地完成,验证码在飞行模式下也能使用,且从不经过网络传输——不依赖运营商,验证码本身也不会被拦截。手机时间不准是少数常见的坑:TOTP 依赖系统时钟,时间偏差超过半分钟就会验证失败,通常在系统设置中开启“自动设置时间”即可解决。

更轻松的注册

早期的设置意味着手动输入冗长的 base32 密钥。二维码注册取代了这种方式:扫一下,完成。密钥几秒钟内即可传输完毕,减少了输入错误和支持请求。但换新手机时很多人直接抹掉旧机,密钥随之丢失,账号只能走漫长的恢复流程。注册后应保存恢复码,并确认应用是否支持备份或云同步——Authy 支持加密同步,而早期版本的 Google Authenticator 完全离线,一旦丢机即失去所有验证码。

推送批准

推送批准彻底取代了手动输入:通知到达,轻点一下即可登录。它更快、更不容易出错,即使用户看不到登录屏幕也能使用。号码匹配——将屏幕上显示的数字输入到提示中——后来增加了防止意外批准的保障:用户必须看到登录方屏幕才能正确输入,盲点“接受”就不再是有效操作。

便利是把双刃剑。攻击者学会反复发送批准请求,直到疲惫的用户点了接受——这就是推送疲劳。号码匹配和更清晰的提示降低了这种风险,但无法消除。而且与密码和短信验证码一样,当用户被骗念出 TOTP 验证码时,同样会被网络钓鱼窃取。因此无论验证码来自应用还是短信,识别钓鱼网站才是根本防线。

安全密钥与向公钥认证的转变

到2010年代初期,一个名为 FIDO 联盟的组织着手消除此前所有方法的核心弱点:共享密钥。密码、短信验证码,甚至 TOTP 种子,都同时存在于服务器和用户两端,因此任何窃取服务器副本的人都能登录。FIDO 用公钥密码学取代了这一模式。私钥永远不会离开你的设备;服务器只存储公钥,并发出只有你的私钥才能应答的质询。任何秘密都不会经过网络传输。

硬件安全密钥

安全密钥是通过 USB、NFC 或蓝牙连接的小型物理设备。它们的决定性特性是抵御网络钓鱼:密钥在签署任何内容之前都会验证网站的来源,因此仿冒域名上的假登录页面无法获得有效签名。

实际使用很简单:注册时把密钥插入设备并轻触一次,登录时再插入轻触即可。多数密钥内置触摸感应或指纹识别,防止远程攻击者在你不在场时使用它。建议注册两把密钥,一把随身携带,一把存放于家中,因为密钥丢失后无法凭空恢复,账号可能因此被锁在门外。

为什么来源绑定很重要

由于每个签名都绑定到确切的来源,从一个网站获取的凭据无法在另一个网站上重放——也无法通过伪造域名在同一网站上重放。根本不存在可供窃取的可复用内容。这正是它与 TOTP 的关键区别:TOTP 代码可以被实时钓鱼页面诱骗输入,而来源绑定让这类攻击在原理上失效。代价是设备依赖——密钥不在身边就无法登录,所以务必提前配置备用登录方式。

通行密钥:当前的篇章

通行密钥是这个故事的最新篇章,构建于 FIDO2 框架及其 WebAuthn 协议之上,使网站能够直接在浏览器中验证登录。通行密钥用加密密钥对取代了密码的共享秘密:私钥保留在你的设备或同步的账户中,而网站只存储公钥部分。

对日常登录的改变

  • 无需输入任何内容。 登录只需通过指纹、面部或设备 PIN 进行确认。没有需要接收、重新输入或被拦截的验证码。整个流程通常在两三秒内完成,比输入六位验证码更快,也不会因为信号延迟而卡在等待短信的界面上。
  • 跨设备同步。 Apple、Google 和 Microsoft 通过其账户服务同步通行密钥,因此丢失一台设备也不会把你拒之门外。前提是同步账户本身有强密码和第二道验证——否则同步服务反而成了薄弱环节。
  • 服务器上没有秘密。 由于网站只保存公钥,数据库泄露也不会向攻击者透露任何可用于登录的信息。

通行密钥在设计上还具有防钓鱼特性:浏览器通过加密方式将每个凭据绑定到合法网站的地址,因此一个足以乱真的假冒网站也无法收集到能在其他任何地方使用的凭据。

启用过程通常很简单:在账户安全设置里找到“通行密钥”或“登录方式”,按提示用设备解锁方式确认即可。常见的失误是只在一台设备上创建、又没开启同步,结果换手机时凭据随之丢失——建议先确认同步已开启,再删除旧的验证方式。

历史的启示

每一代 2FA 都以不同的方式权衡同样三样东西:安全性、成本和易用性。硬件令牌安全,但昂贵且易丢失。短信验证码免费且为人熟知,却易被拦截和遭受 SIM 卡劫持。验证器应用以极低代价提升了安全性,而推送批准偏向便利,有时牺牲了审慎判断——用户容易在匆忙中随手点下“批准”。通行密钥终于让安全与易用趋于一致,只是普及尚需时日。

恢复流程才是真正的薄弱点

在每个时代,攻击者很少正面攻破认证因素本身,而是重置它。基于备用邮箱、安全问题或一通能说会道的客服电话的恢复流程,曾击溃最强大的认证。如果恢复流程能绕过通行密钥,它便保护不了什么。

常见的失误包括:备用邮箱仍只靠密码保护;安全问题答案可在社交网络上被查到;旧手机号未从恢复选项中移除。攻击者只需攻下最弱的一环。

共存,而非取代

硬件令牌、验证器应用、短信验证码和通行密钥将共存多年。服务、预算和用户的迁移速度各不相同。银行可能仍依赖短信,而开发者平台已率先支持通行密钥。同一个用户往往在不同账户上使用不同方法,这本身没有问题。

实用建议

凡是提供 2FA 的地方都开启它。优先选择通行密钥、安全密钥或验证器应用,而非短信。将备份代码离线保存——打印或存入保险柜,切勿放在邮箱或云笔记里;换新手机前,先在旧设备上迁移验证器应用,否则令牌会随旧机一同消失。然后检查你的恢复设置——大多数账户正是在那里失守。

分享本指南

阅读约 9 分钟

2FA安全清单:12步锁定你的账户

一份实用的安全清单,涵盖2FA设置、密码卫生和恢复选项。今天就能执行的12个具体步骤,强化你的账户,防止被接管。

阅读更多