TOTP 代表基于时间的一次性密码。这是许多身份验证应用中显示的六位数代码背后的技术。TOTP 代码是根据私有初始化密钥和当前时间计算得出的,并在短时间后失效。

TOTP 通常用作双因素认证的第二步。由于身份验证器是在本地计算代码,而不是等待消息推送,因此即使没有移动信号也能正常工作。

生成 TOTP 验证码需要哪些信息?

有两个关键输入:共享密钥和时间计数器。账户提供商在设置过程中生成一个密钥,并通过二维码或手动密钥将其提供给您的身份验证器。随后,双方将时间划分为等长的时段,并执行相同的加密计算。

如果密钥、算法和时间窗口匹配,双方将生成相同的短代码。密钥本身无需在每次登录时传输。

Four-stage TOTP process from secret and time to code validation
身份验证器和服务端会基于相同的密钥和时间窗口独立计算出一个值。

TOTP 是如何工作的?

  1. 服务提供商为身份验证器的注册生成一个唯一的密钥。
  2. 您在可信设备上扫描设置二维码或输入手动密钥。
  3. 身份验证器将密钥与当前时间窗口相结合。
  4. 计算结果会被简化为一个短的数字代码,通常为六位数。
  5. 服务提供商计算其预期的验证码,并与您的输入值进行比对。

RFC 6238 将 TOTP 定义为 HOTP 的基于时间的变体。一种常见的配置是使用 30 秒的时间周期、六位数字和 HMAC-SHA-1,尽管还存在其他受支持的算法和设置。

为什么 TOTP 代码会过期?

较短的有效期限制了复制的验证码可被重复使用的时间长度。一旦时间窗口发生变化,验证器就会生成另一个值。服务可能会容忍相近的时间窗口,以应对网络延迟和微小的时钟差异,但更宽的容差范围也会增加接受窗口。

请在计时开始时尽快输入新验证码。如果验证码持续被拒绝,请按照我们的指南解决双因素认证验证码无法使用的问题

TOTP 与 HOTP

TOTP 和 HOTP 采用相似的计算方式,但更新机制不同:

  • TOTP 根据时间步长进行更新,因此身份验证器的时钟必须保持同步。
  • HOTP 则在计数器递增时更新,例如按下按钮或成功使用后。

TOTP在软件验证器应用中较为常见,因为时间本身提供了一个自动变化的因素。HOTP仍被部分硬件令牌和专用系统所采用。

TOTP 与短信验证码的对比

TOTP 应用在设备上计算验证码,通常可在离线状态下运行。短信则依赖电话网络来发送验证码。短信虽然方便,但可能会受到 SIM 卡调包、号码重分配、拦截以及发送失败等因素的影响。

无论是普通 TOTP 还是短信验证码,都无法完全抵御钓鱼攻击:一个逼真的假登录页面可以捕获并转发当前验证码。对于重要账户,如果系统支持,通常使用密钥或 FIDO 安全密钥会更安全。请参阅我们关于身份验证应用与短信验证码的详细对比。

什么是 TOTP 密钥?

该密钥是该注册所有未来验证码背后的长期有效凭证。任何掌握该密钥的人都可以配置另一个认证器并生成匹配的验证码。设置二维码的截图属于敏感信息,因为它通常包含该密钥。

我们的指南解释了如何查找手动双因素认证设置密钥,以及如何将其与密码或恢复码区分开来。

TOTP 可以在离线状态下使用吗?

可以。一旦配置完成,身份验证器只需密钥和精确的时钟,无需活跃的互联网连接。负责验证登录的服务仍需访问其存储的注册信息。

如何安全使用 TOTP 生成器

  • 请仅使用您有权管理的账户对应的密钥。
  • 在输入密钥前,请核实网站地址和设备信息。
  • 切勿通过聊天或支持表单发送密钥或设置二维码。
  • 请将恢复码与日常使用的身份验证器分开存放。
  • 若密钥可能已泄露,请重新生成注册密钥。

对于授权测试,Get2FA.dev TOTP 生成器会在您的浏览器中计算标准验证码。对于重要账户的日常使用,请优先选择信誉良好的身份验证器或基于硬件的方法。

常见问题

TOTP 验证码的有效期有多长?

30 秒是常见的默认值,但服务提供商可以配置其他时长。倒计时属于一个时间窗口;当您查看或复制代码时,倒计时不会重置。

为什么 TOTP 代码通常为六位数?

六位数在易用性和有限的可能值数量之间取得了平衡。由于代码空间本身并不大,因此速率限制和较短的有效期非常重要。

两台设备可以显示相同的TOTP验证码吗?

可以,前提是两台设备持有相同的密钥、使用相同的设置,并且时钟已同步。是否适合重复注册取决于您的安全策略。

TOTP 就是双因素认证(2FA)吗?

不。TOTP 只是一种可能的身份验证方法。请阅读 2FA 的含义及其它方法的工作原理