HOTP 计数器验证码 - 不是所有 2FA 都基于时间
HOTP vs TOTP
大多数网站 2FA 用的是 TOTP(时间基),但少数服务用 HOTP(计数器基,RFC 4226 标准)。
| 方面 | TOTP | HOTP |
|---|---|---|
| 基准 | 当前时间 | 计数器数值 |
| 刷新频率 | 30 秒自动变 | 每生成一次变一次 |
| 对设备时间要求 | 严格 | 不敏感 |
| KeePassDX 默认算法 | SHA-1 | SHA-1 |
HOTP 常见于硬件令牌(YubiKey 旧版、银行 U 盾)和某些专有 2FA 系统。移动端用得比 TOTP 少,但配置方法类似。
配置步骤
- 编辑 KeePassDX 条目 → 添加 OTP
- 把类型从 "TOTP" 切换到 "HOTP"
- 输入参数:
- 密钥:网站/硬件给的 Secret Key
- 初始计数器值:默认 0(从网站获取)
- 算法:默认 SHA-1
- 位数:默认 6 位
- 保存

HOTP 的特殊之处
计数器需要同步
HOTP 的计数器每次生成验证码后 +1。手机上的计数器和服务器的计数器必须保持同步——如果手机生成了 5 个验证码没用到,服务器还是 0,就会验证失败。
不过 KeePassDX 和服务端通常有一个"漂移窗口"——允许计数器在 ±N 范围内匹配。如果计数器不同步了:
- 在 KeePassDX 里手动把计数器往前调
- 或者联系服务提供商重置计数器
手动触发生成
TOTP 自动每 30 秒刷新。HOTP 需要手动点击生成——每点一次,计数器 +1,生成新码。
典型使用场景
- 硬件令牌的软件替代(YubiKey HOTP 模式)
- 某些企业 VPN/SSO 系统
- 银行安全令牌的移动化
日常使用和 TOTP 相同
HOTP 在 KeePassDX 条目里的显示、剪贴板复制、Magikeyboard 填充、通知栏提醒等功能和 TOTP 完全一致。只是需要注意计数器同步问题。