二次验证(2FA)是登录时在密码之外再过的一关。交易所账户常见的有四种:短信验证码、验证器 App 的动态码、硬件密钥、通行密钥(Passkey)。它们不是同一种东西的四个版本,各自的弱点差别很大,所以开了二次验证这句话本身说明不了多少,要看开的是哪一种。
二次验证有哪四种
登录凭据一般分三类:你知道的(密码)、你拥有的(手机、密钥)、你本人的特征(指纹、面容)。二次验证通常是在密码之外,再加一样你拥有的东西。
短信验证码
登录时平台往你的手机号发一条验证码,你把它填进网页。不需要装任何软件,门槛最低;四种里它的弱点也最多,下一节讲。
验证器 App 的动态码(TOTP)
Google Authenticator、Microsoft Authenticator 这类验证器 App 用的是 TOTP 算法。绑定时你扫一个二维码,把一段共享密钥(常叫种子)存进 App;之后 App 用这段密钥和当前时间算出一串数字,登录时填进去。按 RFC 6238,默认每 30 秒换一次。
和短信比,种子存在你的设备里,验证码不经过运营商。但它仍然是一串要你亲手填进网页的数字,这一点带来的问题在后面讲。
硬件密钥(如 YubiKey)
一把独立的实体密钥。以 Yubico 的 YubiKey 5 系列 为例,官方列的接口有 USB-A、USB-C、NFC 和 Lightning。登录时把它插上或贴近设备,按浏览器的提示触碰一下密钥,登录完成。
它和验证码的差别在于:整个过程没有任何数字需要你输入。挡住钓鱼站中继靠的就是这一点。
通行密钥(Passkey)
通行密钥和硬件密钥用的是同一套 FIDO 标准,区别是不需要单独买一把密钥,手机或电脑本身就能当密钥用。FIDO 联盟的说明 把它分成两种:在你的多台设备之间同步的,和只绑定在一台设备或一把硬件密钥上的。
短信验证码为什么不安全
短信验证码走的是电话网络,验证码发到哪里,取决于你的手机号此刻挂在哪张 SIM 卡上。针对这一点的攻击叫 SIM 换卡(SIM Swap):攻击者冒充机主,让运营商把你的号码补办或转移到他手里的 SIM 卡上。办成之后,你的手机失去信号,发给这个号码的短信验证码全部到了他那里。
这类案件有公开数字。FBI 互联网犯罪投诉中心(IC3)在 2022 年 2 月 8 日发布的 公告 I-020822-PSA 里写道:2018 年 1 月到 2020 年 12 月,IC3 一共收到 320 起 SIM 换卡投诉,调整后损失约 1,200 万美元;仅 2021 年一年就收到 1,611 起,调整后损失超过 6,800 万美元。同一份公告给个人的建议里有一条:用更强的多因素验证,比如生物识别、实体安全密钥或独立的验证器应用。
标准层面的态度也一样。美国国家标准与技术研究院(NIST)的数字身份指南 SP 800-63B 把通过电话网络(短信、语音)发送验证码列为受限(restricted)的方式,并要求验证方在发码前留意设备更换、SIM 更换、号码携转这些风险信号。
短信验证码的问题在于它不由你决定。密码再强、设备再干净,只要攻击者说服了运营商,他就能收到你的验证码。这道防线的关键一环在运营商那里,另外三种方式都没有这个环节。
所以对短信的处理是:能关就关,改用验证器或通行密钥。有的平台要求保留手机号或短信验证,那就按它官方的说明来,同时把更强的方式也绑上。
验证器的动态码防得住什么、防不住什么
动态码的种子存在你的设备里,不经过运营商,SIM 换卡对它没有用。这是它比短信强的地方。
它防不住的是钓鱼站中继。动态码是一串要你读出来、再填进网页输入框的数字。假设有一个钓鱼站做得和真站一模一样,你在它的输入框里填了动态码,钓鱼站背后的服务器可以趁这串数字还有效,把它转交给真站。真站验证通过,登录进去的是攻击者。
这不是哪一款验证器的缺陷,凡是要手动输入的验证码都一样。NIST 的 SP 800-63B 写得很直接:需要手动输入验证结果的验证方式,包括一次性密码(OTP),不算防钓鱼。
另一个要留意的是种子放在哪。只存在本机的验证器,换手机前要先把种子导出或逐个网站重新绑定,手机丢了就得走各平台的找回流程;带云同步的验证器省了这一步,但种子的安全从此取决于那个云账户,云账户被攻破,里面的种子一起失守。两种都能用,选了哪种就把对应的那一头管好。
硬件密钥为什么能防钓鱼站
硬件密钥不生成数字,它生成签名,而且只给注册时的那个网站签。
这套机制的标准是 W3C 的 WebAuthn。注册时,密钥为这个网站生成一对公私钥,公钥交给网站,私钥留在密钥里。标准规定每个凭据都限定在一个网站标识(RP ID,是一个域名)之下,之后只有属于这个网站的页面才能用到它,而且这条限制由浏览器和密钥共同执行,不靠你的眼力。
放到钓鱼场景里:你在 example.com 注册了密钥,后来被引到一个把其中某个字母重复了一遍的近似域名上。浏览器看到的是另一个域名,在这个域名下找不到 example.com 的凭据,签名这一步进行不下去。钓鱼站拿不到任何能转交给真站的东西。
第二道防护是触碰确认。WebAuthn 把它叫用户在场测试:要有人实际碰一下密钥,签名才会进行。电脑被远程控制、恶意程序在后台发起签名请求时,没人去碰那把密钥,它就不签。
剩下的风险在实物上:密钥丢了或被人拿走;有人骗你把密钥插上并触碰;买到被动过手脚的密钥。最后一种靠从厂商官方渠道购买来避免,前两种靠随身携带主用的那把、把备用的那把锁好。
YubiKey 5 系列除了 FIDO2 和 U2F,官方列出的功能还有智能卡、OTP 和 OpenPGP,价格以 Yubico 官网为准。
通行密钥(Passkey)是什么、怎么开
一句话:用设备的屏幕锁(指纹、面容或解锁密码)代替密码登录网站。按 FIDO 联盟的定义,通行密钥是绑定在你某个网站或应用账户上的 FIDO 加密凭据,设计上没有共享的秘密,能防钓鱼。
原理和上一节的硬件密钥相同,都是一对公私钥。Apple 的 通行密钥安全说明 里写得清楚:设备为每个账户单独生成一对密钥,服务器只保存公钥,私钥不会交给服务器。所以哪怕网站的数据库泄露,流出去的也只有公钥,拿它登不进你的账户。域名对不上时不签名这一点也和硬件密钥一样。
通行密钥怎么开
先确认设备开了屏幕锁。各平台的入口一般在账户的安全设置里,名称是 Passkey 或通行密钥。以 Google 账号为例,Google 的帮助页 给的步骤是:
- 设备先开好屏幕锁(指纹、面容或 PIN 都算);iPhone、iPad、Mac 还需要开 iCloud 钥匙串。
- 打开 myaccount.google.com/signinoptions/passkeys,点 Create a passkey。
- 按提示解锁一次设备,通行密钥就建好了。
在别人的电脑或没存通行密钥的设备上登录时,可以用手机接力:登录页选 Try another way,再选 Use your passkey,屏幕上出现一个二维码,用存有通行密钥的手机扫码并解锁。Google 的说明里提到这一步需要打开蓝牙。
用通行密钥要留意的三点
它的强度不超过你的屏幕锁。通行密钥靠设备解锁来确认是你本人。屏幕锁如果是一个简单的 4 位数字,通行密钥的防护也就只有这 4 位数字的强度。
同步的通行密钥,安全取决于云账户。Apple 的说明是:通行密钥通过 iCloud 钥匙串在你的设备之间同步,钥匙串端到端加密,密钥 Apple 也不掌握;使用 iCloud 钥匙串的账户必须开启双重认证。也就是说,云账户本身的密码和二次验证要管好,否则同步过去的通行密钥会跟着云账户一起出问题。
设备丢了要会处理。Google 的做法是用另一台还能登录的设备进账户,把丢失设备上的那个通行密钥删掉。所有设备都丢了、云账户也进不去时,只能走平台的账户找回流程,所以备用邮箱和平台给的备份码要另外保存好。
不是每个平台都支持通行密钥,支持的也各有限制,以平台安全设置页和帮助中心当时的说明为准。
四种方式各防什么,一张表对照
把前面几节的结论并到一张表里:
| 方式 | SIM 换卡 | 钓鱼站中继 | 你要保管好的东西 |
|---|---|---|---|
| 短信验证码 | 防不住 | 防不住 | 手机号,而它实际握在运营商手里 |
| 验证器动态码 | 防得住 | 防不住 | 存种子的设备,或同步种子的云账户 |
| 硬件密钥 | 防得住 | 防得住 | 密钥实物,外加一把备用 |
| 通行密钥 | 防得住 | 防得住 | 设备的屏幕锁,以及同步用的云账户 |
表里的防得住,指的是这种攻击手法本身对它无效,不等于账户从此安全:只要账户上还留着短信作为备用验证或找回方式,SIM 换卡这条路就还开着。
同一个钓鱼站,动态码和硬件密钥的结果差在哪
把前面的原理放进同一个场景里推一遍。假设你被引到一个反向代理式的钓鱼站:域名看着眼熟,地址栏照样有锁头,你在页面上输入的东西,它会原样转给真站。
你用的是动态码:你输入邮箱、密码和验证器上的数字,钓鱼站趁这串数字还有效,把三样一起转给真站。真站验证通过,攻击者拿到一个有效的登录会话。之后提币如果再要一次验证码,钓鱼站可以继续让你输、继续转。
你用的是硬件密钥或通行密钥:输入邮箱和密码后,浏览器要找这个域名下的凭据。你的凭据登记在真站的域名下,钓鱼域名下没有,签名这一步进行不下去。钓鱼站拿不到能转给真站的东西。
差别不在你够不够小心。动态码只要输进了钓鱼页面,就可能被拿走;硬件密钥和通行密钥是机制上不给错误的域名签名。
交易所账户的二次验证怎么搭配
按投入从小到大,分三步走。
第一步,把短信换下来。账户里只要有钱,就把登录和提币的验证从短信换成验证器的动态码,不用买任何硬件。换完再看一眼:短信是不是还留在账户的备用验证或找回方式里。留着的话 SIM 换卡这条路就还开着,能关就关;平台要求保留的,按它官方的说明来。
第二步,补上一种能防钓鱼的。动态码防不住钓鱼站中继,要补这个缺口,就绑硬件密钥或通行密钥。用硬件密钥的话建议买两把,一起绑到账户上:一把日常带着,一把锁在家里。只有一把,丢了就得走找回流程。
第三步,把退路留好。用通行密钥的话,设备的屏幕锁用长一点的密码,不要用 4 位数字。指纹和面容只是解锁的快捷方式,背后顶着的还是这个密码,所以该做的是把密码设强,不是把它关掉。同步通行密钥的云账户也要有像样的二次验证。平台提供备份码的,抄在纸上收好,不要存在联网设备里。
各平台支持哪几种方式、能不能同时绑多把密钥,以它安全设置页和帮助中心当时的说明为准。只能选一种时,优先能防钓鱼的硬件密钥或通行密钥。
挑的时候可以只问一个问题:最坏的情况下,这道锁的钥匙在谁手里。短信的钥匙在运营商那里;动态码的钥匙在你的设备里,但你自己可能把它交给钓鱼站;硬件密钥的钥匙是你身上那把实物;通行密钥的钥匙在你的设备和云账户里。各类钓鱼手法怎么认,见 钓鱼诈骗图鉴。