一次性口令解决"偷到一次就用不了第二次",多因子认证解决"偷到一个因子还不够";两者都依赖一条铁律——因子必须不同类。
上一节(针对密码的攻击)的结论有点让人沮丧:单靠口令,怎么设都有破的口子。这一节就是答案的下一层——在口令之外再加一样东西。
它接的是上一节末的那句:口令的复杂度收益有限,真正把攻击成本抬高一个量级的,是加一个"偷不走的因子"。
一、一次性口令:让"偷到"这件事贬值
一次性口令(OTP)的意思是:这个口令只能用一次,用过就失效。
它最直接的价值是把"偷"这件事贬值了:
- 攻击者站在你背后看到了口令 → 下次用就无效了
- 攻击者在网络上截获了口令 → 下次用就无效了
- 攻击者从某个日志里翻到了口令 → 下次用就无效了
一次性口令的常见实现有两种,区别值得知道:
| 形式 | 怎么生成 | 特点 |
|---|---|---|
| 基于时间(TOTP) | 手机上的认证器 App 每 30 秒算一个新码 | 不依赖网络和运营商,最常用 |
| 基于短信 | 服务器发一条短信 | 方便,但短信通道本身可被攻击 |
短信验证码的软肋必须单独说清:它可以被"实时转发"——攻击者做一个假登录页,你输入口令后,他把请求转发给真网站,网站发验证码给你,你输入,他立刻用它登录。整个过程你可能完全察觉不到。除此之外,补办手机卡、短信劫持也是现实手段。
所以主流看法是:短信验证码好过没有,但不是理想的第二因子——能换成就换成认证器 App 或硬件密钥。
二、多因子认证:关键在"不同类"
多因子的定义容易讲错。它的要求不是"两步",而是"两类":
| 因子类别 | 是什么 | 例子 |
|---|---|---|
| 你知道的 | 知识 | 口令、PIN |
| 你拥有的 | 物品 | 手机、硬件密钥、工牌 |
| 你本身的 | 生物特征 | 指纹、人脸 |
必须来自不同的类别,才算多因子。
所以下面这些都不算:
- 口令 + 密保问题(都是"你知道的")
- 口令 + 另一个口令(同一个类别)
- 指纹 + 人脸(都是"你本身的"——而且你没法换)
而真正的强多因子,是口令 + 硬件密钥这类组合——它不但跨了类别,还有一个额外的好处:能抗钓鱼。
三、为什么硬件密钥能抗钓鱼
这是本节最重要的一个技术点。
短信码和动态码都能被"转发":假页面骗你输入,攻击者拿着你的输入去真网站用。
硬件密钥不能。原因是它和网站之间有一个绑定关系:硬件密钥在响应时,会把"当前访问的是哪个网站"(域名)算进签名里。所以你登录假域名时,密钥算出来的响应在真网站那边对不上——攻击者拿到也没用。
这个机制叫源绑定。它把"抗钓鱼"从"靠用户眼力"变成了"靠密码学保证"——用户就算看错了域名,也登不进去。
这也是为什么主流指南把硬件密钥/通行密钥称为抗钓鱼的认证方式,并且明确说短信验证码不是。
四、多因子的价值到底有多大
一句话讲清多因子的作用:
它让你的账号从"一个秘密"变成"一个秘密 + 一件东西"。
对攻击者的影响是连锁的:
- 撞库基本失效——他有一批口令,但没有你的设备
- 钓鱼难度大幅上升——除非他能同时拿到口令和实时转发动态码
- 数据泄露的损失可控——某个站点的口令泄露了,不直接等于你的账号被拿走
但多因子不是万能的,也有它的短板:
- 有成本:用户要带设备、要操作一步;企业要部署、要处理"设备丢了怎么办"。
- 有恢复难题:设备丢了、换手机了怎么办?恢复流程往往是最弱的一环——很多攻击最终是从"找回账号"这一步进去的。
- 有的场景不适用:共享账号、无人值守的设备、自动化程序,都不能"掏出手机点一下"。
所以多因子的正确用法是分场景:高价值、可交互的账号(邮箱、财务、云控制台)必开;低价值的、机器用的账号用别的办法(凭据托管、密钥轮换)。
五、动手 Demo:六种登录方式的对照
下面这个 Demo 把几种常见组合放进同一张表,看它们各自能挡住什么。
# (方式, 抗撞库, 抗钓鱼, 抗偷看, 便利, 难共享)
# 强度分 = 抗钓鱼×3 + 抗撞库×2 + 抗偷看×1
实跑输出:
================================================================================================
一、六种登录方式的能力对照
================================================================================================
方式 抗撞库 抗钓鱼 抗偷看 便利 难共享
--------------------------------------------------------------------------------------------
只用口令 ❌ ❌ ❌ ★★ ★
口令 + 短信验证码 ✅ ❌ ❌ ★ ★★
口令 + 认证器 App 动态码 ✅ ✅ ❌ ★ ★★★
口令 + 硬件密钥(FIDO2) ✅ ✅ ✅ ★ ★★★★★
通行密钥 Passkey(免口令) ✅ ✅ ✅ ★★ ★★★★★
只用短信验证码(无口令) ❌ ❌ ❌ ★★ ★
================================================================================================
二、逐条点评(按防护强度排序)
================================================================================================
口令 + 硬件密钥(FIDO2) 强度 6/6 绑定域名,钓鱼页上根本用不了
通行密钥 Passkey(免口令) 强度 6/6 本机生物识别解锁,没有可偷的口令
口令 + 认证器 App 动态码 强度 5/6 动态码不落短信,钓鱼难度高很多
口令 + 短信验证码 强度 2/6 能挡撞库;拦不住实时转发的钓鱼页
只用口令 强度 0/6 最常见的形态,也是最薄的一层
只用短信验证码(无口令) 强度 0/6 单因子,换号即失守
④ 一次性口令的价值在【一次性】三个字上:
它让【这一次偷到的】变成废纸。但它不解决【当场被引导着交出去】。
⑤ 多因子的价值在【因子不同类】上:
知道的(口令)+ 拥有的(设备)+ 你本人(指纹)。
同为【知道】的两样,比如【口令 + 密保问题】,不算多因子。
⑥ 表里最刺眼的一行是【只用短信验证码】:
它看着像多因子,其实是单因子——而且这个因子还能被补办手机卡拿走。
2026 年的共识是:能把可被钓走的因子(短信码)换成钓不走的(硬件密钥、通行密钥),就换。
读这个输出:注意 口令 + 短信验证码 这一行——它抗撞库是 ✅,抗钓鱼是 ❌。这正是它现在的位置:它是明显好过"只用口令"的一步,但不是终点。 再看最后一行 只用短信验证码(无口令):它看着像"用了短信很先进",其实是单因子,而且换号即失守。
六、⚠️ 2026 现状
- 免口令的通行密钥已经规模落地。按 FIDO 联盟 2026 年的统计,全球处于使用状态的通行密钥已达数十亿量级,主流操作系统、浏览器和口令管理工具都已原生支持;企业侧也有相当比例的组织正在为员工登录部署。它不再是"未来选项",而是现在已经可用的方案。
- "启用"和"天天用"之间有落差。一个很现实的数据是:大部分人至少启用过一个通行密钥,但持续使用它的比例要低得多——原因通常是登录页上那个口令输入框还在。也就是说,技术上能做到,不等于习惯上会用它;推行时要把"口令作为默认路径"改成"通行密钥作为默认路径"。
- 主流指南已经把抗钓鱼作为分层要求。较高的保证等级明确要求使用抗钓鱼、密钥不可导出的认证器。这意味着在需要较强保证的场景(管理员账号、敏感系统),"口令 + 短信验证码"已经不被视为达标方案。
- 恢复流程成了新的薄弱点。当越来越多的账号用通行密钥保护,攻击者的注意力会转向"账号恢复"——通过补卡、找客服、社工兜过验证。做多因子部署时,恢复流程要和控制措施一起设计。
30 秒实验
打开你最重要的三个账号(邮箱、支付、云盘)的设置页,找"安全 / 登录 / 两步验证",做三步:
- 看现在开的是什么:没有开 → 这是第一优先级;开的是短信 → 可以升级。
- 升级到认证器 App(如果手机支持):扫描二维码即可,一般两分钟完成,同时会给你一组恢复码——把它抄下来离线保存。
- 如果条件允许,再上一个通行密钥:在同一页附近通常就有入口。
做完之后,你会发现"抗撞库"这件事基本不用再担心了。
常见误区
-
错误:开了短信验证码就是多因子了,安全了。——纠正:短信验证码形式上是第二因子,但它是可被实时转发的——假页面上输入口令,攻击者同步转发,验证码就落在他手上。它能明显提高门槛,但不是"抗钓鱼"的方案。
-
错误:验证码每 30 秒换一次,所以很安全。——纠正:换得快不等于钓不走。动态码的问题不在有效性长,而在它可以被当场转交。只有把凭据绑定到访问的站点上,才能从根上堵住这条路。
-
错误:口令 + 密保问题就是双保险。——纠正:密保问题属于"你知道的",和口令是同一类,不构成多因子。而且这些问题的答案往往能在社交平台上查到,比口令更弱。主流指南已经明确不建议使用。
-
错误:上多因子太麻烦,我们人少、不划算。——纠正:多因子的成本可以分层控制——对最关键的三五个账号必开,其他暂缓。而且很多场景下"麻烦"可以通过选择更顺手的因子来降低(比如通行密钥其实是比输口令更省事的登录方式)。
自测三问(点开对答案)
1. 为什么"一次性"这三个字能提高安全性? —— 因为它让**被偷到的那次凭据立刻作废**。攻击者看到、截获、翻到的那一串码,下次登录时已经无效。**它把"偷"的收益从"长期可用"降到"一次机会"。** 2. 为什么硬件密钥不怕钓鱼页面?手机上的动态码为什么怕? —— 硬件密钥在响应时会**把访问的域名绑进签名**,所以登录假域名时产生的响应在真网站上通不过——这是密码学保证的,**不依赖用户是否看清了域名**。而动态码只是"一串数字",用户在哪输入它就落到哪,**钓鱼页面照样能收走并实时转发**。 3. 部署多因子时,为什么"恢复流程"要和控制措施一起设计? —— 因为**恢复流程是绕过认证的唯一正当路径**——设备丢了、换手机了、员工离职了,都要走它。如果这条路的验证比正常登录更弱,攻击者就会专攻它。**认证越强,恢复流程就越要按同样的标准设计。**- ☐ 下一节(1-11 杜绝非法登录)
相关笔记
- 针对密码的攻击 —— 上一篇:三类攻击与破解时间的量级
- 杜绝非法登录 —— 下一篇:怎么判断"这次登录该不该信"
- 利用个人身体信息 —— "你本身的"这一类因子:生物认证
- 🛡️ 网络与信息安全 · 索引 —— 全课路线图