TOTP 生成器:两步验证码(2FA)的工作原理

二维码 次閱讀

什么是 TOTP?

TOTP(Time-based One-Time Password,基于时间的一次性密码)是一种两步验证(2FA)标准,由 RFC 6238 定义。它根据共享密钥和当前时间,每 30 秒自动生成一个 6 位数字验证码,验证服务器用同样的算法独立验证,不需要网络传输。

你每天使用 Google Authenticator、Microsoft Authenticator 或 Authy 扫码添加的账号,背后都是 TOTP 协议。

TOTP 的工作原理

  1. 共享密钥:网站生成一个随机 Base32 密钥(通常通过二维码呈现),你的 App 和服务器各自保存一份
  2. 时间计数器:将当前 Unix 时间戳除以 30,得到当前时间窗口的计数器值(T)
  3. HMAC-SHA1 计算:用密钥对计数器 T 做 HMAC-SHA1 运算,得到 20 字节结果
  4. 截取 6 位:按特定规则从结果中截取 4 字节,转换为 6 位十进制数
  5. 验证:服务器用相同算法计算,与你输入的码比对(通常允许 ±1 个时间窗口的误差)

TOTP vs. SMS 短信验证码

特性TOTP(App)SMS 短信
安全性高(密钥本地存储,不经网络)中(可被 SIM 劫持、运营商攻击)
可用性离线可用需要手机信号
速度即时可能延迟
成本免费有费用(运营商收费)
钓鱼风险低(时间窗口极短)中(验证码有效期较长)
设备丢失风险高(需要备份密钥)低(SIM 可补办)

如何使用 TOTP 生成器测试

使用 tool.tl 的 TOTP 生成器

  1. 访问 tool.tl/totp-generator
  2. 输入 Base32 格式的 TOTP 密钥(或使用生成的示例密钥)
  3. 即时显示当前 6 位验证码和剩余有效秒数
  4. 可用于验证你的 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 生成器完全免费,浏览器本地运算,密钥不上传,无需注册。