TOTP算法与HOTP算法
1、算法定义
TOTP(Time-based One-Time Password)和 HOTP(HMAC-based One-Time Password)是两种常见的动态口令生成算法,均基于哈希运算生成一次性密码。两者的相同点和差异如下:
两者相同点:
1)基于HMAC的哈希运算:两者均使用 HMAC(Hash-based Message Authentication Code) 作为核心算法,通常采用 SHA-1(或其他哈希算法如SHA-256)生成一次性密码。
2)共享密钥:都需要预先在客户端(如令牌/App)和服务端之间共享一个 静态密钥(Secret Key),用于生成和验证密码。
3)一次性密码:生成的密码均为一次性有效,使用后即失效,增强安全性。
4)标准化实现:均遵循 RFC标准(HOTP: RFC 4226;TOTP: RFC 6238),兼容性高。
两者差异:
特性 | HOTP | TOTP |
---|---|---|
触发机制 | 基于事件(计数器递增) | 基于时间(当前时间窗口) |
动态因子 | 计数器(Counter) | 时间戳(Timestamp) |
同步要求 | 需同步计数器(客户端和服务端一致) | 需时间同步(允许±时间容差) |
使用场景 | 硬件令牌、无网络环境 | 软件令牌(如Google Authenticator) |
防重放攻击 | 依赖计数器递增,需服务端记录最新值 | 时间窗口过期后密码失效 |
2、算法应用
2.1、HOTP(基于计数器)的应用
HOTP 主要用于 事件触发的动态口令,适用于需要离线生成或手动触发
1)硬件令牌(OTP设备)
如 YubiKey(部分模式)、RSA SecurID(早期版本)等物理设备,用户按下按钮生成密码,计数器递增;适用于无网络环境(如企业内网)。
2)银行动态口令卡
部分银行的实体令牌(如华夏银行的动态口令牌),每次交易需生成新密码,依赖计数器同步。
2.2、TOTP(基于时间)的应用
TOTP 主要用于 时间敏感的动态口令,依赖时间同步,适合互联网服务。
1)软件认证器
Google Authenticator、Microsoft Authenticator、Authy 等App均采用TOTP,为账户生成30秒刷新的6位数密码。
2)企业VPN/云服务登录
如 Cisco VPN、阿里云、腾讯云等,通过TOTP实现双因素认证。
3)智能家居与IoT设备
部分智能设备(如NAS系统)通过TOTP实现安全配置访问。
智能门锁中还可以应用TOTP生成短时离线开锁的数字密码。