Behind the 6-digit code: Building HOTP and TOTP from scratch
a year ago
- #cryptography
- #OTP
- #authentication
- 一次性密码(OTP)是动态验证码,仅限单次使用或短期有效,可降低重放攻击风险。
- 基于HMAC的OTP(HOTP)采用请求递增计数器机制,而基于时间的OTP(TOTP)则采用时间间隔计数器(如30秒)。
- TOTP由HOTP演变而来,用时间计数器替代普通计数器,通过NTP等技术更易实现时间同步。
- HOTP生成需三个要素:密钥、哈希函数(如SHA-1)和位数,采用HMAC算法保障加密安全。
- HOTP中的DT函数能将20字节HMAC输出动态压缩为4字节,确保均匀分布特性。
- TOTP计数器计算公式为\( c(t) = \left\lfloor \frac{t - t_0}{X} \right\rfloor \),其中\( t_0 \)表示纪元起始时间,\( X \)为周期(如30秒)。
- 作者开发了演示应用(https://otp.dogac.dev/)并开源Kotlin实现代码(github.com/Dogacel/otp-server),帮助开发者理解OTP生成原理。