FreeOTP

FreeOTP WIKI

HOTP

HOTP(RFC 4226)全称为:HMAC-based One-Time Password algorithm,即基于HMAC的一次性密码算法。

它是官方标准化的一次性密码生成方案,由互联网工程任务组在2005年12月发布,旨在为各种网络应用(如VPN接入、Wi-Fi登录、Web应用等)提供一种可互操作的双因素认证标准

HOTP核心定义与公式

RFC4226将HOTP明确定义为:

HOTP(K, C) = Truncate(HMAC-SHA-1(K, C))

TOTP

TOTP(RFC 6238)全称为:Time-based One-Time Password algorithm,即基于时间的一次性密码算法。

它是 HOTP(RFC 4226)的时间驱动变体,由互联网工程任务组(IETF)于2011年5月正式发布为标准。TOTP已成为主动开放认证(OATH)的基石,被广泛应用于Google Authenticator、微信验证码等双因素认证(2FA)系统。

TOTP核心定义与公式

TOTP的核心思想是将HOTP中的事件计数器替换为基于时间的计数器。其基本公式为:

TOTP(K, T) = Truncate(HMAC-SHA-1(K, T))

与HOTP不同,TOTP允许使用SHA-256或SHA-512作为哈希算法,不局限于SHA-1。

以下是 HOTP (RFC 4226)TOTP (RFC 6238) 的全面对比总结:

HOTP vs TOTP核心差异速览

对比维度HOTPTOTP
核心因子事件计数器(Counter)时间戳(Time)
密码有效期直到下一次使用(无固定时限)固定时间窗口(默认30秒)
服务器状态需维护每个用户的计数器无状态(仅需共享密钥)
同步机制计数器偏移窗口(如±10)时间步窗口(如前后各1步)
时钟依赖无需时钟需要精确时钟同步

HOTP vs TOTP详细对比表

特性HOTPTOTP
RFC标准RFC 4226 (2005年12月)RFC 6238 (2011年5月)
基础算法HMAC-SHA-1(强制)HMAC-SHA-1/SHA-256/SHA-512
输出位数6-8位(通常6位)6-8位(通常6位)
移动因子64位整数计数器floor((T - T0)/X)
默认参数无(计数器用户控制)X=30秒, T0=0
硬件复杂度低(仅需按钮触发)高(需要精确时钟晶振)
用户体验需手动触发(按键生成)自动刷新(倒计时显示)
防重放能力弱(攻击者可在下次使用前重放)强(30秒后自动失效)
暴力破解防护需服务端速率限制需服务端速率限制
典型应用银行U盾、硬件令牌Google Authenticator、微信/支付宝验证码

HOTP vs TOTP安全对比

安全维度HOTPTOTP
中间人攻击可被实时劫持可被实时劫持(需30秒内完成)
重放攻击高风险(直到下次使用)低风险(30秒后失效)
暴力猜测需服务端限流需服务端限流
密钥泄露影响全部后续密码泄露全部后续密码泄露
社会工程学相同风险相同风险
设备丢失风险需撤销该设备需撤销该设备

注:两者都无法防止登录后的会话劫持,也不应作为唯一的身份验证因素。

两者均由 主动开放认证(OATH, Initiative for Open Authentication) 推动标准化,TOTP 本质上是 HOTP 的特殊化,将事件计数器替换为时间计数器,已成为现代双因素认证的事实标准。