直接回答

双因素认证(2FA)要求用户提供两种不同类型的凭据:所知(密码)、所持(手机、硬件密钥)、所是(指纹、人脸)中的任意两类。即使密码泄露,攻击者缺少第二因素也无法登录。Web 应用中最常见的实现是密码 + TOTP 动态验证码(认证器 App),也可选短信验证码、推送确认或 WebAuthn 硬件密钥。

展开解析

以 TOTP 为例:开启 2FA 时服务端生成随机密钥,以 otpauth:// URI 生成二维码让用户用认证器扫码绑定;登录变为两阶段——密码通过后进入"待二验"状态,再收 6 位动态码,服务端用同一密钥按 30 秒时间窗(容忍前后一个窗口)计算 HMAC 比对。工程要点:密钥加密存储、不落入日志;绑定环节先验证一次动态码再启用,防止扫错码锁死;提供一次性备用恢复码(哈希存储)应对手机丢失;二验接口限流防爆破(6 位码空间小);WebAuthn/通行密钥(passkey)抗钓鱼更强,是新系统更推荐的方案。追问:短信验证码为何较弱(SIM 劫持)、2FA 会话状态如何在分布式下传递。