TOTP 与短信验证码:哪个更安全?
都比只有密码强,但两者的安全差距比大多数人想象的大
短信验证码是普及率最高的两步验证方式——不用装 App,人人都会用。但在安全圈,它的评价并不好:美国标准机构 NIST 早在 2016 年发布的数字身份指南(SP 800-63B)中,就已将基于短信的验证列为"受限"(restricted)方式,不再推荐。为什么?
短信验证码的三个软肋
- SIM 卡劫持(SIM Swapping)。攻击者冒充你,用社工手段说服运营商客服把你的手机号转移到他的 SIM 卡上。得手后,所有发给你的验证码都发到了他的手机里。这不是理论攻击——加密货币圈因 SIM 劫持导致的盗窃案每年都有大量报道,单案损失可达数百万美元。
- 传输链路不可控。短信在运营商网络中明文传输,SS7 信令协议的老旧漏洞允许有能力的攻击者远程拦截短信;伪基站也能在局部范围内截获。你无法控制、甚至无法感知这条链路的安全性。
- 钓鱼转发。钓鱼网站可以实时把你输入的短信验证码转发给真网站完成登录。虽然 TOTP 同样怕实时钓鱼,但短信多了"攻击者主动触发发码 + 冒充客服索要"这类更容易得手的社工剧本。
TOTP 为什么更可靠
TOTP 验证码由你的设备用密钥和当前时间在本地计算,全程不经过任何通信网络:
- 没有传输环节,就没有拦截面——SIM 劫持、伪基站、SS7 漏洞对它统统无效;
- 不依赖手机信号,飞机上、地下室、国外漫游都能正常出码;
- 密钥掌握在自己手里,可以自由备份到多个验证器,不被某个手机号绑架。
直观对比
| 维度 | 短信验证码 | TOTP 验证器 |
|---|---|---|
| 验证码产生位置 | 服务器生成,经运营商网络下发 | 本地离线计算 |
| SIM 卡劫持 | ❌ 直接沦陷 | ✅ 不受影响 |
| 无信号/出国场景 | ❌ 可能收不到 | ✅ 正常可用 |
| 依赖第三方 | 运营商 | 无 |
| 换手机号 | 需逐个网站改绑 | 不受影响 |
| 上手门槛 | 最低 | 需要一次性设置 |
实际建议
- 重要账号(邮箱、云盘、代码托管、金融类)优先绑定 TOTP 验证器,参考我们的Google、GitHub、Microsoft 教程;
- 绑定 TOTP 后,检查能否把短信从验证方式中移除或降级——只要短信还是可用的兜底通道,SIM 劫持的风险就还在;
- 任何形式的 2FA 都强于裸密码。如果某个网站只支持短信,开着它仍然远好于不开。
准备换用 TOTP?拿到密钥后在线生成验证码:
使用在线 2FA 工具 →相关阅读:Google 账号两步验证教程 · 丢失 2FA 设备后如何恢复账号