OTP代码生成器和验证器
工具功能
- TOTP 支持: 生成基于时间的 OTP 代码,30 秒后自动过期,为您的账户提供安全的双因素认证
- HOTP 支持: 创建基于计数器的 OTP 代码,每次使用后递增,非常适合离线认证和硬件令牌实现
- 多种算法: 支持 SHA-1、SHA-256 和 SHA-512 算法,可配置代码长度(6-8 位),满足灵活的安全需求
- 代码验证: 通过将生成的代码与用户输入进行比较,即时验证 OTP 代码,支持时间窗口容错和计数器同步
使用方法
- 配置参数: 选择 OTP 类型(TOTP/HOTP)、算法(SHA-1/SHA-256/SHA-512)、代码长度(6-8 位)并输入密钥。
- 生成代码: 点击"生成代码"创建 OTP。TOTP 代码每 30 秒自动刷新;HOTP 需手动递增计数器。
- 验证代码: 输入密钥和要验证的代码,点击"验证代码"检查是否与预期值匹配。
生成原理
什么是OTP代码
一次性密码(OTP)代码是临时认证令牌,为系统和服务提供安全访问。它们使用加密算法和共享密钥生成,确保每个代码都是唯一且有时间限制的。OTP代码广泛用于双因素认证(2FA)、多因素认证(MFA)和安全登录系统。两种主要类型是TOTP(基于时间的OTP)和HOTP(基于HMAC的OTP),每种都有特定的用例和安全特性。
TOTP(基于时间的OTP)实现
TOTP基于当前时间戳和共享密钥生成代码。算法使用HMAC-SHA1、HMAC-SHA256或HMAC-SHA512创建当前时间窗口(通常30秒)与密钥组合的哈希值。生成的哈希被截断并转换为数字代码。TOTP代码与服务器时钟同步,在时间窗口后自动过期,提供强大的重放攻击防护,确保代码只在短时间内有效。
HOTP(基于HMAC的OTP)实现
HOTP使用递增计数器和共享密钥生成代码。算法将HMAC-SHA1应用于计数器值和密钥,然后截断结果创建数字代码。每次使用HOTP代码时,计数器递增,确保下一个代码不同。HOTP适用于时间同步可能困难的离线场景,但需要仔细的计数器管理以防止客户端和服务器之间的不同步。
常见问题
- TOTP 和 HOTP 有什么区别?
- TOTP(基于时间的 OTP)使用当前时间生成代码,通常每 30 秒自动更改。HOTP(基于计数器的 OTP)使用计数器,每次生成代码时必须手动递增。TOTP 用于大多数 2FA 应用,而 HOTP 更适合硬件令牌或离线场景。
- 我从哪里获取密钥?
- 密钥通常在启用 2FA 时由服务提供。可能显示为 QR 码或 Base32 编码的字符串。用于开发和测试目的,您可以生成随机 Base32 字符串,但在生产环境中,应使用服务提供的密钥。
- 我应该选择哪种算法?
- SHA-1 是支持最广泛的算法,与大多数 2FA 系统兼容。SHA-256 和 SHA-512 提供更强的安全性,但某些旧系统可能不支持。除非有特定要求,建议从 SHA-1 开始。
- 为什么生成的代码与 Google Authenticator 不匹配?
- 最常见的原因是时钟同步问题。TOTP 依赖于准确的时间,因此设备和服务器时钟必须同步。还要确保密钥、算法(SHA-1)、位数(6)和周期(30秒)完全匹配。
- 这个工具在生产环境中安全吗?
- 此工具用于教育和测试目的。在生产环境中,使用经过验证的 OTP 库(如 speakeasy、otplib)并安全存储密钥(环境变量、密钥管理系统)。切勿在浏览器控制台或日志中暴露密钥。
相关文档
- RFC 6238 - TOTP 规范 - 定义基于时间的一次性密码算法的官方 RFC 标准
- RFC 4226 - HOTP 规范 - 定义基于 HMAC 的一次性密码算法的官方 RFC 标准
- Google Authenticator 协议 - Google Authenticator 兼容 OTP 系统的实现指南
- OWASP - 双因素认证 - 实施双因素认证的安全最佳实践
- HMAC 规范(RFC 2104) - OTP 生成中使用的 HMAC 算法规范