← [ BACK_TO_NOTES ]

MFA Recovery Codes

MFA Recovery Codes 是用户预先保存的一组高熵、单次使用 backup authenticator,用于主 MFA factor 丢失时恢复访问;服务端应只保存 digest、原子消费、支持重新生成并使旧集合失效,且恢复强度不能退化成仅凭 password 绕过 MFA。

#concept #evergreen #auth #mfa

[!info] related notes

MFA Recovery Codes

一句话定义

Recovery Code 是用户预先获得并离线保存的 backup authenticator。

典型用途:

primary MFA factor unavailable → present one recovery code → regain restricted access → bind new factor

它不是“知道 password 就能关闭 MFA”的替代品。

Security Role

Recovery Codes 的价值在于:

  • 不依赖丢失的手机/认证器;
  • 可离线保存;
  • 每个 code 单次使用;
  • 用户可以准备多个备用 code。

NIST 将类似机制归入 look-up secret authenticator 的思路。

生成

Code 应由 CSPRNG 生成,并满足:

  • 足够 entropy;
  • human-readable but not guessable;
  • 多个 code 独立;
  • 不从 user/account data 派生。

不要使用 birthday、phone suffix、sequential number 或可预测 ID。

服务端存储

推荐:

raw recovery code → show once to user

H(raw code) → store digest

服务端保存:

  • account_id;
  • code_digest;
  • created_at;
  • used_at;
  • recovery_set_version。

不要长期保存 plaintext recovery codes。

Single Use

验证成功后必须原子地从 unused 变成 consumed。

并发两个请求不能重复使用同一 code。

Regeneration

用户重新生成 recovery codes 时:

new set generated → invalidate all old unused codes → increment recovery_set_version

否则旧截图/旧备份中的 code 仍可能长期有效。

用户保存

UI 应提示用户:

  • download / print;
  • password manager;
  • offline safe storage;
  • 不要把唯一副本只存在可能丢失的设备里。

Recovery Code 是高价值 credential。

Recovery Code 与 Reset Token

Recovery Code:

  • 预先发放;
  • 用户长期保存;
  • backup authenticator;
  • 通常用于 MFA recovery。

Password Reset Token:

  • 用户发起后临时签发;
  • 通过 side-channel 发送;
  • 短期有效。

两者 lifecycle 不同。

使用后的状态转换

更稳的流程:

recovery code valid → restricted recovery state → 证明 retained factor when appropriate → bind new MFA authenticator → rotate recovery codes → notify user → revoke suspicious sessions if needed

不建议:

recovery code valid → permanently disable MFA → full privileged session

Password-only MFA Reset

如果账户平时要求:

password + MFA

但丢 MFA 后只要:

password → reset MFA

那么 MFA 几乎退化成 UX friction。

Recovery 必须维持足够独立的 assurance。

Rate Limiting

Recovery code verification 仍应:

  • per-account throttling;
  • retry limit;
  • monitoring;
  • alert on repeated failures。

高熵不能替代 online attempt control。

Notification

使用 recovery code / 重置 MFA 后应通知用户:

  • factor changed;
  • recovery code used;
  • time/device;
  • security action if unexpected。

学习检查

  1. Recovery Code 为什么属于 backup authenticator,而不是普通 reset link?
  2. 服务端为什么应保存 code digest?
  3. single-use 为什么需要原子消费?
  4. regeneration 为什么应使旧 code set 全部失效?
  5. 为什么只凭 password 就允许 MFA reset 会削弱 MFA?
  6. Recovery Code 使用后为什么适合进入 restricted recovery state?
  7. Recovery Code 与 Password Reset Token 的生命周期差异是什么?
创建于 2026/9/30 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本