
多年来,短信一次性密码(SMS OTP)一直是保护在线账户的首选第二因素。但随着网络钓鱼攻击日益复杂,全球监管机构——包括香港证券及期货事务监察委员会(SFC)——现在正强制要求逐步淘汰 SMS OTP,转而采用抗钓鱼的身份验证方法。这一转变将基于时间的一次性密码(TOTP)生成器(如 Google Authenticator、Microsoft Authenticator 以及 Aegis 或 OTPBox 等开源替代品)推到了聚光灯下。
在本文中,我们将解释为什么 SMS OTP 不再安全、TOTP 生成器的工作原理、何时使用它们,以及——最重要的是——如何安全管理它们。您还将看到一个使用流行验证器应用设置 TOTP 的完整示例,以及不同 2FA 方法的对比。立即尝试我们的 OTP 生成器,即时生成您自己的 TOTP 代码。
为什么 SMS OTP 正在被淘汰
SMS OTP 曾是一个强大的第二因素,但攻击者已经找到了多种绕过方法:
- 网络钓鱼:虚假网站模仿合法登录页面;用户输入密码和 SMS OTP,攻击者立即使用。
- SIM 卡交换:攻击者说服移动运营商将受害者的手机号码转移到他们控制的 SIM 卡上,从而拦截所有短信。
- 恶意软件:受害者手机上的木马应用读取传入的短信并将其转发给攻击者。
- 社会工程学:攻击者冒充银行给受害者打电话,诱骗他们透露 OTP。
由于这些风险,SFC 等监管机构现在要求金融机构采用抗钓鱼的身份验证——那些不容易被钓鱼或拦截的方法。TOTP 生成器本身并非抗钓鱼(用户仍可能被诱骗在虚假网站上输入 TOTP 代码),但结合适当的安全教育和设备绑定,它们比 SMS 安全得多。
什么是 TOTP 生成器?
基于时间的一次性密码(TOTP) 生成器是一种应用或硬件设备,它生成一个短的数字代码,每 30 秒(或其他间隔)变化一次。该代码源自一个共享密钥和当前时间,使用 HMAC-SHA1 算法(根据 RFC 6238)。
主要特点:
- 无需网络:代码在设备本地生成,因此可离线工作。
- 时间同步:服务器和生成器的时钟必须同步(在几分钟内)。
- 短暂有效:每个代码仅在短时间窗口内有效(通常为 30 秒)。
工作原理(简化)
- 在设置过程中,服务提供一个密钥(通常编码为二维码或 Base32 字符串)。
- 验证器应用存储此密钥,并将其与当前 Unix 时间(除以 30)结合,使用 HMAC-SHA1 计算。
- 生成的哈希被截断为 6 位数字。
- 用户在登录页面输入此数字,服务器执行相同的计算以验证。
何时使用 TOTP 生成器
TOTP 适用于:
- 个人账户:电子邮件、社交媒体、云存储和开发者平台(GitHub、GitLab、AWS)。
- 企业 2FA:许多组织强制要求员工使用 TOTP 访问 VPN、电子邮件和内部工具。
- 自托管服务:如果您运行自己的服务器(例如 Nextcloud、GitLab),TOTP 是一种轻量级、可离线的 2FA 选项。
如果服务支持硬件安全密钥(FIDO2/WebAuthn)或通行密钥(passkeys),则不建议将 TOTP 作为高价值金融账户的唯一第二因素,因为后者才是真正抗钓鱼的。
TOTP 的常见陷阱
- 密钥泄露:如果在设置过程中二维码或 Base32 密钥被截获,攻击者可以克隆令牌。
- 时钟漂移:如果设备的时钟不准确,代码可能不匹配。大多数应用都有“时间校正”功能。
- 无备份:丢失设备且没有备份意味着丢失所有受该验证器保护的账户的访问权限。
- 单点故障:依赖一部手机意味着丢失或损坏设备可能导致您被锁定。
- 钓鱼仍然可能:用户可能被诱骗在虚假网站上输入 TOTP 代码。仅靠 TOTP 并不能防止钓鱼。
完整示例:使用 OTPBox 设置 TOTP
让我们通过一个使用 OTPBox(一款开源 Android 验证器)的完整示例来逐步操作。(相同的步骤适用于大多数 TOTP 应用。)
步骤 1:获取密钥
当您在某个服务(例如 GitHub)上启用 2FA 时,您会看到一个二维码和一个“设置密钥”(一个 Base32 字符串,如 JBSWY3DPEHPK3PXP)。复制设置密钥或使用 OTPBox 扫描二维码。
步骤 2:在 OTPBox 中添加账户
打开 OTPBox,点击 + 按钮。选择 扫描二维码 或 手动输入。如果手动输入,粘贴 Base32 密钥,并可选输入发行者名称(例如“GitHub”)和账户名称(例如“user@example.com”)。
步骤 3:验证代码
OTPBox 将立即显示一个每 30 秒刷新一次的 6 位代码。在服务的验证页面上输入此代码。确认后,2FA 即激活。
步骤 4:导出和备份(至关重要!)
在 OTPBox 中,进入 设置 → 导出。选择 加密导出 并设置一个强密码。这将创建一个包含所有密钥的 JSON 文件,使用 AES-256-GCM 加密。将此文件存储在安全的离线位置(例如加密的 USB 驱动器或密码管理器的安全笔记)。
警告:切勿将未加密的导出文件或二维码截图存储在云存储、电子邮件或即时通讯应用中。
对比:SMS OTP vs. TOTP vs. 通行密钥
| 特性 | SMS OTP | TOTP 生成器 | 通行密钥 / FIDO2 |
|---|---|---|---|
| 抗钓鱼能力 | 低 | 中等(用户仍需输入代码) | 高(加密挑战) |
| 离线能力 | 需要蜂窝网络 | 可离线工作 | 可离线工作(设备绑定) |
| SIM 交换风险 | 高 | 无 | 无 |
| 拦截风险 | 高(短信转发、恶意软件) | 低(本地生成) | 非常低 |
| 备份复杂度 | 自动(SIM 卡) | 手动(导出密钥) | 通常与设备生态系统绑定 |
| 用户体验 | 简单,但容易有延迟 | 设置好后快速 | 无缝(生物识别或 PIN) |
如何安全管理 TOTP 密钥
- 启用应用锁:使用验证器应用内置的 PIN 或生物识别锁,防止未经授权的访问。
- 备份密钥:导出加密备份并离线存储。某些应用(如 OTPBox)支持通过 GitHub Gist 进行加密云同步——请谨慎使用。
- 使用多台设备:在两台设备(例如手机和平板)上注册相同的密钥,以避免单点故障。
- 保留恢复代码:大多数服务在您启用 2FA 时会提供恢复代码。将它们存储在密码管理器或保险箱中。
- 避免截图:切勿截取二维码或密钥的屏幕截图。如果必须捕获,请使用安全的方法,例如密码管理器的内置扫描器。
常见问题
如果我丢失了装有验证器应用的手机怎么办?
如果您有备份(加密导出或恢复代码),您可以在新设备上恢复账户。如果没有备份,您需要使用每个服务的恢复流程禁用 2FA,这通常需要身份验证,可能需要数天时间。
我可以在多台设备上使用相同的 TOTP 密钥吗?
可以。大多数验证器应用允许您在多台设备上扫描相同的二维码或输入相同的密钥。这是实现冗余的好做法。
TOTP 容易受到钓鱼攻击吗?
是的,如果用户被诱骗在虚假网站上输入 TOTP 代码,攻击者可以立即使用它。TOTP 本身不抗钓鱼。要获得抗钓鱼能力,请使用通行密钥或硬件安全密钥。
如何从 SMS OTP 迁移到 TOTP?
登录到每个支持 2FA 的服务,禁用 SMS OTP,并通过使用验证器应用扫描新二维码来启用 TOTP。按照服务的说明完成迁移。
所有 TOTP 应用都一样安全吗?
大多数是安全的,只要它们将密钥存储在加密的设备存储中(例如 Android Keystore、iOS Keychain)。避免那些需要互联网权限或未加密地将数据发送到云端的应用。Aegis、OTPBox 和 andOTP 等开源应用是可审计的,通常受到注重安全的用户的青睐。
结论
淘汰 SMS OTP 是在打击网络钓鱼和账户接管方面迈出的必要一步。TOTP 生成器提供了一种强大的、可离线的第二因素,比 SMS 安全得多——前提是您仔细管理密钥。通过了解风险并遵循最佳实践,您可以显著提高今天的账户安全性。
准备好生成您自己的 TOTP 代码了吗?尝试我们的 OTP 生成器 看看它是如何工作的。