一次性密码 (OTP)
一次性密码 (OTP) 是什么?
一次性密码 (OTP)只在一次登录尝试或短暂时间窗口内有效的短位数字码,通常用作第二认证因素。
一次性密码(OTP)是仅能使用一次的凭据,因此被截获的验证码在使用之后对攻击者便毫无价值。现代 OTP 由认证器(App 或硬件令牌)与服务器共享的密钥计算得出。HOTP(RFC 4226)对一个单调递增的事件计数器求 HMAC-SHA-1,再截断为 6-8 位数字码;TOTP(RFC 6238)用 Unix 时间除以步长(默认 30 秒)替代计数器,这正是认证 App 每 30 秒刷新的原因。OCRA(RFC 6287)将验证码绑定到服务器质询或交易数据,而较早的 S/KEY/OTP 方案(RFC 1760/2289)通过哈希链实现一次性使用。
通过短信或邮件下发很常见,却较脆弱:SS7 拦截、SIM 交换与移动端恶意软件都会暴露验证码,NIST SP 800-63B 自 2017 年起限制将短信用作带外通道。
其核心局限在于:凡是人能读取并重新输入的 OTP,都可被实时中继。Evilginx、EvilProxy 等中间人(adversary-in-the-middle)钓鱼套件会代理登录过程,截获 OTP 并在其有效期内重放。对高价值账户,应优先选择抗钓鱼、绑定来源的因素——FIDO2/WebAuthn 通行密钥(passkey),此类中继对其无效。
flowchart TD
A[共享密钥已下发到 App 与服务器] --> B{OTP 类型}
B -->|HOTP| C[递增事件计数器]
B -->|TOTP| D[读取当前时间除以 30 秒步长]
C --> E[对计数器或时间步长求 HMAC-SHA-1]
D --> E
E --> F[截断为 6 至 8 位数字码]
F --> G[用户在登录时提交验证码]
G --> H{服务器重新计算并在时间窗口内比对}
H -->|一致| I[第二因素通过]
H -->|不一致| J[拒绝]● 示例
- 01
Google Authenticator 每 30 秒刷新的 6 位 TOTP 验证码。
- 02
用于授权银行转账的 SMS 一次性验证码。
● 常见问题
一次性密码 (OTP) 是什么?
只在一次登录尝试或短暂时间窗口内有效的短位数字码,通常用作第二认证因素。 它属于网络安全的 身份与访问 分类。
一次性密码 (OTP) 是什么意思?
只在一次登录尝试或短暂时间窗口内有效的短位数字码,通常用作第二认证因素。
如何防御 一次性密码 (OTP)?
针对 一次性密码 (OTP) 的防御通常结合技术控制与运营实践,详见上方完整定义。
一次性密码 (OTP) 还有哪些其他名称?
常见的别称包括: OTP, 一次性口令。