术语表
什么是一次性密码(OTP)— TOTP/HOTP/SMS 的区别与局限
一次性密码(OTP)是只在一次、且只在短时间内有效的一次性验证码。本文从防御视角讲解身份验证器应用的 TOTP、基于计数器的 HOTP、以及 SMS 验证码的区别,它为何对泄露的密码很强,以及它的局限——中间人钓鱼仍能将其攻破,并刻意不写攻击手法。
一次使用、用后即弃——这就是一次性密码(OTP)。下面梳理它的类型,以及人们常常忽略的一个局限:钓鱼仍能将其攻破(不写攻击手法)。
类型:TOTP / HOTP / SMS-OTP
它们都被笼统地归为「一次性验证码」,但按生成方式可分为三类。
TOTP(基于时间)
应用用共享密钥种子 + 当前时间算出。约每 30 秒切换一次。可离线工作。
HOTP(计数器)
按计数而非时间推进。每按一次给出下一个验证码。物理令牌常用。
SMS-OTP
通过短信发送验证码。方便,但易受 SIM 交换和中继攻击——最脆弱的方式。
它们都具有「一次性、短命」的特性,所以即使固定密码泄露,验证码本身也难以重用。尤其是 TOTP,它在应用内计算、不经过任何网络往返,因此没有 SMS 那样的截获路径。
强项与局限:钓鱼仍能被你「交出去」
OTP 修补了固定密码的弱点,但它不是万能药。决定性的局限在于:由人读取并输入验证码。
OTP 起作用的场景
- 挡下因密码泄露 / 重用而来的账户被盗
- 即使被看到,也会很快失效、难以重用
- 身份验证器应用的 TOTP 可离线工作,比 SMS 更能抵御截获
OTP 被攻破的场景
- 中间人(AiTM)钓鱼:假网站把 OTP 中继给真网站并登录
- SIM 交换:劫持手机号并抽走 SMS-OTP
- 根本原因 = 人能把验证码交给假网站(它没有绑定到域名)
本站的观点:OTP 是途经点,终点是通行密钥
OTP 是走出「只有密码」的一个绝佳第一步。事实上,无论 SMS 还是 TOTP,光是开启就能挡下大多数账户被盗。但本站把 OTP 视为途经点,而非终点。只要中间人钓鱼仍是现实威胁,最终形态就是签名绑定到域名、在结构上无法对假网站出示的通行密钥(FIDO2)。优先级很清楚:先在所有账户开启 OTP,再把王国之钥级别的账户(邮箱、域名、支付)提升到通行密钥。要点是不要依赖「靠小心识破假网站」。
接下来阅读
- 术语:什么是双因素认证(2FA)(OTP 作为「第二重证明」被使用的语境)· 什么是通行密钥(超越 OTP 局限的抗钓鱼能力)
- 术语:什么是钓鱼(理解中继 OTP 的中间人 AiTM 攻击)
- 入门:如何正确选择 MFA(在实务中选定方式)
FAQ
Q一次性密码和普通密码有什么区别?
普通密码在你更改之前一直不变(固定),所以一旦泄露,在你轮换它之前都会被滥用。一次性密码(OTP)是一次性的——只在一次、且只在短时间内有效——用过的那一刻就失效。这使它即使被看到也难以重用,弥补了固定密码的弱点(泄露和重用)。许多服务把它作为密码之外的第二重证明,作为双因素认证的一种方式。
QSMS 一次性密码安全吗?
它明显强于仅有密码,但属于 OTP 里最弱的一种。SMS 可能被 SIM 交换(劫持你的手机号)截获,或被假网站中继的中间人钓鱼抽走。在条件允许处,请迁移到身份验证器应用的 TOTP;对重要账户,则迁移到通行密钥。
Q为什么身份验证器应用的验证码大约每 30 秒变一次?
因为它是 TOTP(基于时间的一次性密码)。应用和服务各自用共享的密钥种子与当前时间,按固定间隔(常为 30 秒)计算出相同的验证码。间隔一过,旧验证码就失效,由新的接替。保持短命,能把被盗验证码可用的时间窗口压到极小。