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 演算法規範