HOTP

HOTP(基于 HMAC 的一次性密码,RFC 4226)是 TOTP 的基于计数器的兄弟标准。TOTP 依据时钟递进,HOTP 则通过令牌和服务器在每次使用时同步递增的共享计数器来递进。HOTP 是 YubiKey OATH、旧式硬件令牌和部分服务器无法依赖时钟同步的银行流程的标准模式。

规范文件:RFC 4226, HOTP: An HMAC-Based One-Time Password Algorithm (2005).
URI 方案:Google Authenticator Key URI Format, 所有验证器达成共识的 otpauth:// 方案.
关联规范:TOTP (RFC 6238), 基于 HOTP 构建的时间变体.

概述

HOTP 注册 QR 是以 hotp 为类型的 otpauth:// 方案 URL,携带共享 HMAC 密钥和两端必须保持同步的 计数器 值。格式:

otpauth://hotp/LABEL?secret=SECRET&issuer=ISSUER&counter=N&digits=N&algorithm=ALG

HOTP vs TOTP, 选哪个

属性HOTP (RFC 4226)TOTP (RFC 6238)
递进依据计数器(每次成功使用)时钟(每 30 秒)
需要时钟同步是,在 ~30 秒内
偏移时重同步服务器接受接下来 N 个计数器值服务器接受 ±1 窗口
典型场景YubiKey、旧式硬件令牌、离线银行所有消费者 2FA, Google、Microsoft、1Password、Authy
计数器重用灾难性, 随时间泄露密钥不适用
密钥泄露风险未来所有代码可被预测过去和未来所有代码可被预测

标准测试向量

RFC 4226 附录 D 提供了密钥 12345678901234567890(20 字节,Base32 GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ)的 6 位 HOTP 参考值:

计数器HOTP(6 位)
0755224
1287082
2359152
3969429
4338314
5254676
6287922
7162583
8399871
9520489

计数器 0 时注册的最简 QR 载荷:

otpauth://hotp/Example:test?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&counter=0

实时 Base32 密钥验证器

与 TOTP 页面相同的验证器。HOTP 密钥使用相同的 Base32 字母表(RFC 4648 §6:A-Z、2-7)。在浏览器中运行,无服务器往返。

请输入密钥进行验证。

常见陷阱

验证器应用兼容性

应用 / 令牌HOTPSHA256/5128 位备注
YubiKey Authenticator (iOS/Android/桌面)HOTP 是 YubiKey OATH 的标准模式。完整 RFC 4226 支持。
Google Authenticator忽略(仅 SHA1)忽略(仅 6 位)事实基准。HOTP 安全,但仅支持 6 位 SHA1。
1Password完整 RFC 支持。计数器随条目存储和导出。
Bitwarden完整 RFC 支持。
Microsoft Authenticator完整 RFC 支持。
Authy,,近期版本已移除 HOTP,仅支持 TOTP。
Duo Mobile,,使用自己的推送流程,仅 TOTP 备用。
OATH 硬件令牌 (Feitian、Token2 等)因设备而异因设备而异标准硬件 HOTP 市场;除非数据表另有说明,始终为 6 位 SHA1。

另请参见

规范参考核实 2026-04-19。RFC 4226 (2005),Google Key URI Format。