TOTP 动态口令是一种基于时间的一次性密码算法,常见于两步验证场景:手机验证器每 30 秒生成 6 位数字,登录时输入即可证明身份,即使账号密码泄露也能有效阻止他人登录。

| 类型 | 一次性密码算法 / 身份验证标准 |
| 标准编号 | RFC 6238 |
| 制定组织 | IETF |
| 前身标准 | HOTP(RFC 4226) |
| 典型应用 | 两步验证、验证器 App |
| 官网 | datatracker.ietf.org |
TOTP 动态口令(Time-based One-Time Password,基于时间的一次性密码)是一种利用共享密钥和当前时间共同计算出短期有效数字口令的身份验证算法,是目前两步验证(2FA)最主流的技术方案之一。
TOTP 由 IETF 以 RFC 6238 标准发布,是 HOTP(基于计数器的一次性密码,RFC 4226)的时间化变体。它的核心思想是:服务器与用户设备在绑定时共享一个密钥(通常以二维码形式扫描录入),之后双方各自用这个密钥加上当前时间戳,通过 HMAC 运算独立算出同一个短口令。常见形态是每 30 秒刷新一次的 6 位数字。
由于口令由本地计算得出,验证器 App 无需联网、无需接收短信,天然规避了短信验证码被拦截、劫持的风险。Google Authenticator、Microsoft Authenticator、Authy、1Password 以及众多开源验证器都实现了这一标准,GitHub、Google、各大交易所和网盘等服务的「绑定验证器」功能,背后几乎都是 TOTP。
TOTP 把当前 Unix 时间戳除以时间步长(常为 30 秒)得到一个计数值,再用共享密钥对该计数值做 HMAC(常用 HMAC-SHA1)运算,从结果中按规则截取若干位并转成十进制,取末尾 6 位(或 8 位)即为动态口令。服务器验证时通常会容忍前后一两个时间窗口,以抵消设备时钟的轻微偏差。
问:换手机后 TOTP 验证码怎么办?答:密钥存在旧设备里,换机前应先迁移(如 Google Authenticator 的导出功能)或提前在新设备重新绑定;否则只能用绑定时保存的恢复代码找回账号,因此务必妥善保存恢复代码。
问:验证码总是提示错误是什么原因?答:最常见原因是手机时间不准。TOTP 依赖双方时间一致,把设备时间设为自动同步(网络校时)通常即可解决。
问:TOTP 和短信验证码哪个更安全?答:TOTP 更安全。短信可能被 SIM 卡劫持或钓鱼拦截,而 TOTP 密钥不出本地设备且口令时效极短;但两者都无法完全防住实时钓鱼,更高安全需求可考虑硬件安全密钥。

| 类型 | 一次性密码算法 / 身份验证标准 |
| 标准编号 | RFC 6238 |
| 制定组织 | IETF |
| 前身标准 | HOTP(RFC 4226) |
| 典型应用 | 两步验证、验证器 App |
| 官网 | datatracker.ietf.org |
登录 后参与讨论
暂无讨论,来发表第一条评论吧