11.1 密码已死?

“密码就像是蟑螂——你灭不掉它,但你可以让它不再那么讨厌。”

现实情况是:

  • 大量数据泄露涉及凭证窃取与滥用(Verizon DBIR 多年报告持续将凭证滥用列为最主要攻击途径之一)
  • 用户平均有 100+ 个在线账户,但只使用约 5 个不同的密码
  • 即使是最强的密码策略,用户也会想方设法绕过(如 Password123!)

MFA(Multi-Factor Authentication)不是可选项,是必需品——在 IAM 安全体系中,它是防止凭证泄露导致横向移动的最后一道防线。

11.2 认证因素分类

三种基础因素:

因素类型说明示例安全性便利性
知识你知道什么密码、PIN、安全问题★★★★★★★
持有你拥有什么手机、YubiKey、Token★★★★★★★★
固有你是什么指纹、面部、虹膜★★★★★★★★★
行为你怎么做击键模式、步态★★★★★★★★

什么叫"多因素"?

关键理解:两个密码不是 MFA,密码+短信验证码才是 MFA。

MFA 要求使用至少两个不同类型的因素。密码 + 确认密码 = 单因素。密码 + TOTP = 双因素。

11.3 常用 MFA 方案深度对比

TOTP(Time-based One-Time Password)

基于时间的动态口令,每 30 秒生成一个新的 6 位数字。

工作原理

  1. 用户注册时,服务器生成一个密钥(secret)
  2. 用户将密钥导入 Authenticator App(通过扫描二维码)
  3. 登录时,App 根据密钥 + 当前时间生成验证码
  4. 服务器用相同的密钥 + 当前时间验证

优点

  • 免费,不需额外硬件
  • 离线可用(不依赖网络)
  • 算法公开,多种 App 可选

缺点

  • 时间漂移导致验证失败
  • 手机丢失可能导致无法登录(需要恢复码)
  • 仍然可以被钓鱼(攻击者诱导用户输入验证码)

推送通知

登录时向用户注册的设备发送推送通知,用户点击"批准"或"拒绝"。

优点

  • 用户体验极好(一键批准)
  • 可以看到登录的上下文(位置、设备、时间)
  • 可以检测异常并提醒用户

缺点

  • 需要网络连接
  • MFA 疲劳攻击(攻击者反复发送通知直到用户误点批准)
  • 依赖厂商 App

FIDO2 / WebAuthn

新一代无密码/二因素认证标准。

核心原理:使用公私钥对。私钥由认证器在本地生成与保护,默认不发送给服务器(服务器只存公钥)。根据认证器类型,凭据分为两类:设备绑定凭据(device-bound credential,如多数硬件安全密钥的本地凭据)的私钥不离开设备;而 Passkey(可同步凭据 / multi-device credential) 会经平台 sync fabric(Apple iCloud Keychain、Google Password Manager 等)在用户自有设备间端到端加密同步——但绝不会发送给依赖方(RP)。

注册流程

  1. 网站请求注册
  2. 用户进行本地验证(指纹/PIN/Windows Hello)
  3. 设备生成公私钥对,私钥安全存储
  4. 公钥发送给网站存储

认证流程

  1. 网站请求认证,发送 challenge
  2. 用户本地验证
  3. 设备用私钥对 challenge 签名
  4. 网站用存储的公钥验证签名

为什么 FIDO2 更强

  • 防钓鱼(Phishing-Resistant):凭据与 Relying Party ID(rpId,依赖方域名 eTLD+1)绑定,浏览器只允许在匹配 rpId 的站点调用认证器,签名数据包含 origin 与 rpId,服务器端必须严格校验二者,攻击者无法在假冒网站上完成认证
  • 无共享密钥:服务器只存公钥,数据泄露也不影响认证安全
  • 跨设备:Passkey(可同步凭据)的私钥可通过平台(Apple/Google/Microsoft)在用户自有设备间端到端加密同步

实现方式

  • Platform Authenticator:设备内置(Windows Hello、Apple Touch ID/Face ID、Android 生物识别)
  • Cross-Platform Authenticator:外部硬件(YubiKey、Feitian ePass)

硬件安全密钥

物理 USB/NFC/蓝牙设备,如 YubiKey 系列。是最安全的 MFA 方式之一。

适用场景:高价值用户(管理员、财务、高管)、高安全合规场景(如 FedRAMP High、PCI DSS 对持卡人数据环境访问的 MFA 强制要求——合规要求的是 MFA,硬件密钥是其中最强的因素之一,而非合规强制使用硬件密钥)。

短信/邮件验证码

安全性最低的 MFA 方式,应尽量避免

风险:

  • SIM 卡交换攻击(SIM Swapping)
  • SS7 协议拦截
  • 邮箱密码与账户密码相同(形成单因素)
  • 信号不好时接收不到

但在低风险应用或作为"备选"方案时仍有其价值。

11.4 自适应认证(Adaptive Authentication)

MFA 不是"全有或全无"。自适应认证根据风险动态调整认证强度:

风险评分计算:
├── 用户属性:角色、权限级别、历史行为
├── 设备信息:是否受信任设备、是否新设备
├── 地理位置:是否在常用地点、国家
├── 网络信息:IP 信誉、是否匿名网络
├── 时间因素:是否在正常工作时间
├── 行为特征:登录速度、鼠标移动模式
└── 资源敏感度:访问的资源的敏感级别

风险 = 低 → 密码即可
风险 = 中 → 密码 + TOTP
风险 = 高 → 密码 + 硬件密钥 + 管理审批
风险 = 极高 → 拒绝访问

实现架构

用户登录请求
    │
    ▼
认证服务
    │
    ├──→ 风险引擎(计算风险分数)
    │     ├── 设备指纹
    │     ├── 地理位置
    │     ├── IP 信誉
    │     ├── 行为分析
    │     └── 用户画像
    │
    ├──→ 策略引擎(根据风险分数 + 策略决定)
    │     ├── 风险 0-30:放行
    │     ├── 风险 31-60:要求 MFA
    │     ├── 风险 61-80:要求 FIDO2
    │     └── 风险 81-100:拒绝 + 告警
    │
    └──→ 认证结果

11.5 MFA 策略设计

推荐配置

用户角色登录方式MFA 方式
普通用户密码TOTP(可选但有推荐)
重要用户密码TOTP 或推送通知(必须)
管理员密码FIDO2 或硬件密钥(必须)
API 服务客户端凭证证书认证

恢复机制

MFA 失效后的恢复是常被忽视的关键设计:

  1. 恢复码(Recovery Codes):一次性使用的备用码(如 10 个 8 位数字)
  2. 管理员重置:Help Desk 通过身份验证后重置 MFA
  3. 备用 MFA 方式:注册多个 MFA 设备
  4. 信任的朋友:通过已信任的联系人验证

恢复流程的风险必须与"真正的密码重置流程"同等重视,因为攻击者经常瞄准这个"后门"。

11.6 无密码认证(Passwordless)

MFA 的终点是无密码。当前主要趋势:

Passkey(通行密钥)

FIDO2 的消费者友好名称。Apple、Google、Microsoft 联合推动,并自 2022 年起在各自平台原生支持、规模化普及。用户用指纹或面部在注册的设备上完成认证,Passkey 通过平台账户(iCloud Keychain、Google Password Manager、Microsoft 账户)端到端加密跨设备同步;FIDO 联盟也已推出跨平台凭证导出/导入标准,逐步打通不同生态间的 Passkey 迁移。

实现策略

不是一下子全部无密码,而是渐进式:

  1. 密码 + MFA → (当前状态)
  2. 密码 + FIDO2 → (增强安全性)
  3. 无密码登录选项 + 密码作为备用 → (过渡期)
  4. 完全无密码 → (最终目标)

对于希望直接从第 3 阶段起步的项目, Hanko 是一个 Passkey-first 的开源认证方案:支持直接禁用密码、用 Web Component 一行嵌入登录页。它在面向消费者的 SaaS 场景中特别实用——不需要从密码体系逐步过渡,而是直接面向 Passkey 设计。

11.7 Keycloak 中的 MFA 实现

参考现有文档:/docs/keycloak/security-features/mfa/

关键配置点:

  • Browser Flow 中 OTP 的条件配置
  • Required Action 的设置
  • 自定义 SPI 实现短信验证码
  • 基于角色的条件认证(管理员 vs 普通用户有不同的 Flow)

完整的条件认证(按角色/IP/场景分级)和 Step-Up 二次认证配置步骤,见 Keycloak 条件认证与 Step-Up 实战——涵盖三种常用模式:基于角色的条件 OTP、基于 IP 位置的条件 MFA、敏感操作 Step-Up 认证。Passkey/WebAuthn/FIDO2 从协议到 Keycloak 配置的完整指南(含 Mermaid 流程图、企业部署策略和常见错误排错),参见 Passkey / WebAuthn / FIDO2 IAM 企业落地指南

11.8 小结

MFA 是 IAM 安全的基石——在身份与访问管理体系中,它是认证安全性的最后一道防线。从 TOTP 入门到 FIDO2 高级实现,选择正确的 MFA 方案需要平衡安全性、用户体验和运维成本。自适应认证已成为 IAM 主流实践——不是对所有人都要求最强 MFA,而是根据实际风险动态调整。最终目标是无密码认证,但这条路需要每一步都走稳。

11.9 IAM 多因素认证 FAQ

Q: IAM 体系中 MFA 部署优先级怎么排? A: 先覆盖高权限账号(管理员、运维、财务),再覆盖普通员工,最后考虑 C 端用户。攻击者要的不是普通员工账号,是有权限改配置、看数据、转钱的那个。把最强的 MFA(FIDO2/硬件密钥)留给这些账号,ROI 最高。

Q: IAM 的 MFA 和应用的 MFA 有什么区别? A: 应用的 MFA 是每个应用自己实现一套(密码 + 短信),各个应用不互通。IAM 的 MFA 是在身份层统一实现一次,所有接入的应用都受益。在 IAM 中配一次 FIDO2,所有通过 OIDC/SAML 接入的应用都不需要再配一遍。

Q: 企业 IAM 部署 MFA 最大的坑是什么? A: 恢复机制没设计好。用户换手机、丢 YubiKey、出差没带硬件密钥——这些场景天天发生。如果 Help Desk 的 MFA 重置流程是「给 IT 打个电话就能绕过」,那攻击者会把 Help Desk 作为突破口。设计恢复流程时要把它当作和主认证同等安全等级来审计。