4. 多因素认证与无密码工程
多因素认证(MFA)的本质不是“多输一次密码”,而是让攻击者即使拿到密码,也无法仅凭一个可复制的秘密完成登录。零信任强调“永不信任、持续验证”,MFA 正是把身份验证从一次性口令升级为多证据组合的关键控制点。理解 MFA,需要先区分三类证据:你知道的(密码、PIN)、你拥有的(手机、硬件密钥)、你是什么(指纹、人脸)。不同 MFA 方案的差异,本质上就是“拥有类证据如何被证明”的差异。
三类主流 MFA 方案对比
TOTP(基于时间的一次性密码)依赖共享密钥与时间同步。服务端与客户端在注册时约定一个 Base32 密钥,之后每 30 秒用 HMAC-SHA1 对“时间步长”计算一次 6 位数字。它的优点是离线可用、兼容性极好;缺点是密钥一旦泄露即可被克隆,且用户仍可能被钓鱼页面实时转发验证码。推送认证把“拥有”证据转移到已注册的手机应用上,服务端向设备发送挑战,用户在应用内点击“批准”。它体验好,但存在 MFA 疲劳攻击——攻击者反复推送,诱导用户误点。FIDO2/WebAuthn 则用非对称密钥替代共享秘密:注册时设备生成密钥对,私钥永不离开安全芯片,公钥交给服务端;登录时服务端发随机挑战,设备用私钥签名,服务端用公钥验签。由于签名绑定源站域名,钓鱼站点无法复用,因此 FIDO2 是目前抗钓鱼能力最强的方案。
条件访问策略:让认证强度随风险浮动
MFA 不应是“一刀切”。条件访问(Conditional Access)把认证决策变成“如果……那么……”的策略:如果用户从公司管理设备、可信 IP 访问低敏感应用,则允许单因素;如果从新设备、异常地理位置访问财务系统,则强制 FIDO2 硬件密钥。策略的输入通常包括用户/组、设备合规状态、位置、应用敏感级别、登录风险评分。输出则是允许、拒绝、要求 MFA、要求合规设备或限制会话。一个可落地的策略示例:
策略名称:财务系统高风险访问
条件:
用户组 = finance-team
应用 = finance-erp
设备 = 非托管 或 不合规
位置 = 非可信网络
访问控制:
要求认证强度 = 抗钓鱼 MFA(FIDO2)
要求设备合规 = 是
会话时长 = 1 小时
若失败 → 拒绝并记录风险事件
这里的关键是“认证强度”要可度量。业界常用 AAL(Authenticator Assurance Level)描述:AAL1 单因素,AAL2 多因素,AAL3 硬件密钥加抗钓鱼。条件访问策略应把应用敏感级别映射到最低 AAL,而不是笼统要求“开 MFA”。
无密码部署:从试点到规模化
无密码不是“取消所有认证”,而是用 FIDO2 等抗钓鱼凭证替代密码。落地路径通常分三步。第一步,在身份提供方(如 Entra ID、Okta、Keycloak)启用 WebAuthn,并允许用户注册安全密钥或平台认证器(Windows Hello、Touch ID)。第二步,设置过渡策略:密码仍存在但不再作为主认证,而是作为恢复通道;对高敏感应用强制 FIDO2。第三步,逐步关闭密码登录,只保留受控的账户恢复流程。部署时要特别注意:每个用户至少注册两把密钥(一把主用、一把备用),否则设备丢失会导致锁定;同时要保留管理员应急通道,但该通道必须受硬件密钥和审批双重保护。
认证强度与用户体验的平衡
安全与体验并非零和。可用“风险分层 + 无感认证”来平衡:低风险场景用平台认证器(指纹/人脸)一键完成,用户几乎无感;中风险场景要求 FIDO2 安全密钥触碰;高风险场景叠加设备合规检查与短会话。衡量指标建议关注:注册完成率、平均认证耗时、MFA 失败率、支持工单量、钓鱼模拟点击率。若认证耗时超过 15 秒或失败率高于 5%,通常说明策略过严或恢复流程不畅,应调整条件而非简单加严。最终目标是让最强认证出现在最需要的地方,让日常访问保持顺畅。