什么是 TOTP?
TOTP(Time-based One-Time Password,基于时间的一次性密码)是一种两步验证(2FA)标准,由 RFC 6238 定义。它根据共享密钥和当前时间,每 30 秒自动生成一个 6 位数字验证码,验证服务器用同样的算法独立验证,不需要网络传输。
你每天使用 Google Authenticator、Microsoft Authenticator 或 Authy 扫码添加的账号,背后都是 TOTP 协议。
TOTP 的工作原理
- 共享密钥:网站生成一个随机 Base32 密钥(通常通过二维码呈现),你的 App 和服务器各自保存一份
- 时间计数器:将当前 Unix 时间戳除以 30,得到当前时间窗口的计数器值(T)
- HMAC-SHA1 计算:用密钥对计数器 T 做 HMAC-SHA1 运算,得到 20 字节结果
- 截取 6 位:按特定规则从结果中截取 4 字节,转换为 6 位十进制数
- 验证:服务器用相同算法计算,与你输入的码比对(通常允许 ±1 个时间窗口的误差)
TOTP vs. SMS 短信验证码
| 特性 | TOTP(App) | SMS 短信 |
| 安全性 | 高(密钥本地存储,不经网络) | 中(可被 SIM 劫持、运营商攻击) |
| 可用性 | 离线可用 | 需要手机信号 |
| 速度 | 即时 | 可能延迟 |
| 成本 | 免费 | 有费用(运营商收费) |
| 钓鱼风险 | 低(时间窗口极短) | 中(验证码有效期较长) |
| 设备丢失风险 | 高(需要备份密钥) | 低(SIM 可补办) |
如何使用 TOTP 生成器测试
使用 tool.tl 的 TOTP 生成器:
- 访问 tool.tl/totp-generator
- 输入 Base32 格式的 TOTP 密钥(或使用生成的示例密钥)
- 即时显示当前 6 位验证码和剩余有效秒数
- 可用于验证你的 2FA 系统是否正确实现了 TOTP 算法
所有计算在浏览器本地完成,密钥不会发送到服务器。
常见 2FA App 推荐
- Google Authenticator:最广泛使用,简单易用,但不支持云备份(丢手机风险大)
- Authy:支持多设备同步和加密备份,换手机迁移方便
- Microsoft Authenticator:Microsoft 账号有额外集成,支持备份
- 1Password:密码管理器内置 TOTP,适合已使用密码管理器的用户
- Bitwarden:开源密码管理器,高级版内置 TOTP
TOTP 安全最佳实践
- 备份密钥:添加 2FA 时,把初始 Base32 密钥或二维码保存在安全位置,防止手机丢失后锁死账号
- 用 Authy 或 iCloud 备份:不要只依赖 Google Authenticator(不支持备份)
- 防钓鱼:TOTP 验证码有效期仅 30 秒,但仍不要在可疑网站输入
- 时间同步:设备时间必须准确,否则 TOTP 计算结果会偏移导致验证失败
常见问题
TOTP 验证码为什么每 30 秒变一次?
30 秒是 RFC 6238 定义的标准时间步长,在安全性(窗口足够短,被截获后难以复用)和可用性(留足够时间输入)之间取得平衡。
设备换了如何迁移 2FA?
Google Authenticator 支持导出功能(生成迁移二维码);Authy 可以在新设备上用手机号验证后自动恢复。无论哪种方式,建议提前保存各账号的初始密钥备份。
工具是免费的吗?
是的,tool.tl 的 TOTP 生成器完全免费,浏览器本地运算,密钥不上传,无需注册。