Verify

OTP vs TOTP vs HOTP:有什么区别?

OTP 指一次性验证码;HOTP 基于计数器生成验证码,而 TOTP 基于时间生成验证码。

身份验证器应用可以在不接收消息的情况下生成验证码。通过短信发送的验证码则通过投递通道送达,因此设置方式和失败处理有所不同。

每个术语的含义是什么?

OTP 描述的是一次性使用的验证码。HOTP 和 TOTP 描述的是生成该验证码的算法。

术语验证码由什么提供用户需要什么
OTP总称,与生成方式无关取决于所选方式
HOTP共享密钥和递增计数器已注册的令牌或应用
TOTP共享密钥和当前时间区间已注册且时钟可用的身份验证器

RFC 4226 定义了 HOTP 的共享密钥和计数器。RFC 6238 用时间替代该计数器来生成 TOTP。

身份验证器和验证方需要相同的密钥来计算匹配的验证码。在注册和存储过程中保护好该密钥,因为持有它即可生成验证码。

HOTP 如何更换验证码?

令牌在生成验证码时递增计数器。验证方在接受预期验证码后递增其对应的状态。

HOTP 验证码不会仅因时间流逝而过期。生成验证码但不提交会使令牌领先于验证方。

请提供 HOTP 规范要求的计数器重新同步机制。限制搜索后续计数器值的范围,因为接受更多候选值会增加被猜中的机会。

在此过程中限制失败的认证尝试次数。重新同步不能成为无限猜测的途径。

TOTP 如何更换验证码?

TOTP 根据共享密钥和当前时间区间生成验证码,即使没有人请求新验证码也是如此。

RFC 6238 推荐 30 秒的时间步长。显示的验证码会在时钟跨入下一个区间时更新。

在区间即将结束时输入的验证码可能在下一个区间才到达验证方。允许有限的延迟,以免正常的输入时间差导致不必要的失败。

RFC 推荐网络延迟最多允许一个步长。该建议针对的是传输延迟,并非对所有时钟重新同步的通用限制。

保持设备和服务器时钟对齐。较宽的接受窗口能容纳更多时钟漂移,但也会接受更多候选验证码。

即使在时间区间内,也要拒绝已被接受过的验证码。时钟的后续变化本身不能保证一次性使用。

通过 Bird 发送的验证码算 TOTP 吗?

不算。Bird Verify 生成随机验证码,并通过所选通道投递。

接收者无需注册共享的身份验证器密钥即可收到该验证码。其有效性取决于验证流程的过期时间和尝试策略,而非身份验证器的计数器或时钟区间。

为验证流程选择验证码长度、过期时间和尝试次数限制。当接收者反馈延迟时,测量投递和完成间隔

HOTP 和 TOTP 在注册后于本地生成验证码,因此登录时无需等待消息。其恢复机制则需要考虑身份验证器或共享密钥丢失的情况。

应该选择哪种方式?

  1. 当流程需要验证用户是否能访问某个可达的号码或地址时,使用已送达的验证码。
  2. 当用户能够注册并保留一个时钟可靠的身份验证器时,使用 TOTP。
  3. 当令牌无法依赖时间且你能维护计数器同步时,使用 HOTP。
  4. 无论哪种方式,都要限制猜测次数、强制一次性使用,并在上线前定义好账户恢复流程。

简而言之

  1. OTP 是总称。

    HOTP 和 TOTP 是生成一次性验证码的方式。服务器也可以生成并发送随机验证码。

  2. HOTP 基于计数器。

    生成未使用的验证码会使设备领先于验证方。请提供有限范围的重新同步机制。

  3. TOTP 基于时钟。

    推荐的时间步长为 30 秒。在考虑输入延迟的同时,不要将接受窗口设置得过宽。

  4. 选择注册和恢复模型。

    身份验证器验证码需要预先共享的密钥。已送达的验证码需要一个可用的投递通道。

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

从一个渠道开始。
准备好后,再添加其他渠道。

测试 API 密钥即刻可用。添加支付方式并验证发送者身份后,即可解锁生产环境。

正在使用 Claude Code、Cursor 或 Codex?复制一条设置提示,您的智能代理即可自动安装 Bird CLI 和相关技能。选择您的工具:

Cursor