· 全部指南
双因素认证原理
双因素认证(2FA)结合「你知道的」(密码)与「你拥有的」(手机应用、硬件密钥)或「你是谁」(生物识别)。目标很明确:仅凭泄露的密码不应能登录账户。银行、云控制台与 SaaS 管理后台日益强制 2FA,因为撞库攻击会用泄露密码列表自动化数十亿次登录尝试。
基于时间的一次性密码(TOTP)是开发者最常接触的 2FA。Google Authenticator、Authy、1Password 等应用每 30 秒从共享密钥生成六位动态码。集成阶段 otp-generator 可生成 TOTP secret 与 otpauth:// URI,编码为二维码做测试——无需把生产密钥发到外部服务。
生产 secret 必须在服务端用密码学安全随机源生成、加密存储且绝不写日志。otp-generator 面向预发与本地 QA,不宜批量签发真实用户注册材料。注册流程:用户开启 2FA → 服务端生成 secret → 一次性展示二维码 → 用户扫码 → 输入首个验证码 → 服务端校验并加密存 secret → 一次性展示恢复码。
常见错误:验证码接口无限速(六位数字在大规模下可被暴力尝试);恢复码尝试次数不限;数据库明文存 secret。
TOTP 要点
TOTP 基于 HMAC-SHA1(RFC 6238)或 SHA256 变体:code = HOTP(secret, floor(unix_time / 30))。客户端与服务端须约定时间窗口(通常 30 秒)与允许时钟偏差。生产环境一般接受当前窗口 ±1 步,容忍手机慢半分钟。
恢复码仅在注册时展示一次:单次使用的恢复 token,可打印或下载。服务端只存哈希,如同密码。用户消耗一条恢复码后立即作废并提示重新生成。
预发调试:打开 otp-generator,粘贴与测试服相同的 secret,确认生成码与 API 一致,再测移动端二维码 UI。切勿在应用日志中记录 secret、种子或当前六位码——SIEM 会永久索引。
与密码策略
2FA 不能为弱密码开脱。它能在泄露后要求第二因素以限制损害,但用户仍须为每个站点使用强且唯一的密码。password-generator 生成高熵密码;password-strength 在策略培训中评估复杂度并标记字典模式。
优先 TOTP 或 WebAuthn 硬件密钥,而非短信 OTP。SIM 换卡攻击可让对手收到本应发到你手机的短信。短信在飞行模式、漫游边缘与运营商不可靠地区也会失败。WebAuthn/FIDO2 比 TOTP 更抗钓鱼,因凭据与来源绑定。
团队策略示例:最少十四位密码 + 管理员强制 WebAuthn;普通用户可选 TOTP。入职幻灯片可用 password-generator 演示,但绝不可通过 Towalles 或任何第三方表单收集员工真实密码。
开发调试
2FA 集成涉及二维码渲染、时钟同步、恢复码与找回流程——各环节独立故障。在预发用 otp-generator 做端到端验证,无需每次 CI 都等实体手机;从密钥管理器测试 fixture 注入同一 secret 做 API 自动化。
对验证接口限速:按 IP、按用户名,失败后指数退避。连续十次错误可临时锁账户。监控验证码尝试尖峰,识别撞库伴随 TOTP 猜测。
上线前安全清单:secret 用 KMS 加密、恢复码哈希存储、找回须经另一已验证渠道、管理员关闭 2FA 须留审计日志、客服不可读取 TOTP secret。Towalles 的 otp-generator 本地运行——若预发与生产密钥曾重叠,粘贴的预发 secret 应按生产凭据对待。