摘要:微软、谷歌、苹果已全面支持 Passkey,各大主流平台相继宣布"支持无密码登录"。密码真的要消失了吗?本文系统介绍 FIDO2/WebAuthn 标准的技术原理,梳理当前生态支持情况,以及企业如何真正落地无密码认证。


密码的问题,从来都不是密码本身

如果让安全工程师列举最头疼的漏洞类型,弱密码密码重用稳居前三。

数据说话:

  • 80%+ 的数据泄露涉及弱密码或被盗密码(Verizon DBIR 报告);
  • 普通用户平均拥有 100 个以上的账号,记住所有密码几乎不可能;
  • 每年被钓鱼攻击窃取的密码超过 30 亿条

密码的本质问题是:它既需要被记住,又需要足够复杂,还不能被拦截,这三个需求本身就是矛盾的。

FIDO 标准的目标,是用一套基于公钥密码学的认证机制,彻底绕开这个矛盾。


一、FIDO 是什么

FIDO(Fast Identity Online,线上快速身份认证)是由 FIDO 联盟制定的一套开放标准,成员包括谷歌、微软、苹果、PayPal、VISA、万事达等 250+ 家企业。

目前的核心标准版本:

标准 全称 用途
FIDO U2F Universal 2nd Factor 双因素认证(密码 + 物理令牌)
FIDO2 第二代 FIDO 无密码认证(核心标准)
WebAuthn Web Authentication API 浏览器侧 API,W3C 标准
CTAP2 Client to Authenticator Protocol 2 设备侧协议(手机/安全密钥与平台通信)

简单说:FIDO2 = WebAuthn(浏览器API)+ CTAP2(设备协议),两者配合实现完整的无密码登录体验。


二、FIDO2 的技术原理

2.1 核心:非对称密码学

FIDO2 的核心是每个账号、每个网站,独立生成一对密钥

注册阶段:
  设备本地生成  →  私钥(永不离开设备)
              →  公钥(上传到服务器)

登录阶段:
  服务器:发送一段随机挑战(Challenge)
  设备:  用私钥对挑战签名
  服务器:用已存储的公钥验证签名

这个设计有一个关键特性:服务器上从来不存储任何可以直接用于登录的秘密。即使数据库被拖库,攻击者拿到的只是公钥,毫无用处。

2.2 完整认证流程

在这里插入图片描述

以用户在浏览器中登录为例:

1. 用户访问登录页,输入用户名(或直接点击"无密码登录")
   
2. 服务器生成随机 Challenge(如 32 字节随机数),发送给浏览器

3. 浏览器调用 WebAuthn API:
   navigator.credentials.get({
     publicKey: {
       challenge: serverChallenge,
       allowCredentials: [{ type: 'public-key', id: credentialId }],
       timeout: 60000
     }
   })

4. 系统弹出认证对话框(指纹/PIN/人脸)

5. 用户通过生物识别验证身份(本地验证)

6. 设备用该账号的私钥对 Challenge 签名,连同设备信息返回给浏览器

7. 浏览器将签名结果发送给服务器

8. 服务器用预存的公钥验证签名 → 认证成功

整个过程,用户的私钥从未离开过设备,服务器也从未看到任何"密码"。

2.3 防钓鱼:绑定域名

FIDO2 有一个关键安全特性:Credential ID 和签名绑定到特定的域名(Origin)

如果用户注册的是 bank.com,生成的密钥对只能用于向 bank.com 服务器认证。

即使黑客搭建了 bank-login.com 的钓鱼网站,也无法欺骗 FIDO2 认证器,因为它会检测到域名不匹配,根本不会发起签名

这是 FIDO2 对抗钓鱼攻击的根本原因,密码做不到这一点。


三、认证器(Authenticator)的三种形态

FIDO2 的认证器是"持有私钥并执行签名"的设备,有三种主要形态:

3.1 平台认证器(Platform Authenticator)

内置于设备中的认证器:

  • Windows Hello:人脸/指纹/PIN,私钥存储在 TPM 芯片
  • Touch ID / Face ID(苹果):私钥存储在 Secure Enclave
  • Android 指纹/人脸识别:私钥存储在 StrongBox

这是 Passkey 的主要载体。Passkey 是 FIDO2 Credential 的品牌化名称,主要由苹果、谷歌、微软在 2022 年共同推广。

3.2 漫游认证器(Roaming Authenticator)

独立的物理安全密钥:

  • YubiKey(国际主流)
  • 国产 FIDO2 安全密钥(支持国密算法)

通过 USB/NFC/蓝牙与设备连接,私钥存储在安全密钥的芯片中。

适合场景:高安全要求的企业环境,需要对设备本身进行物理控制。

3.3 混合认证器(Hybrid / Cross-Device)

用手机扫码认证 PC 登录:

  • 手机上有已注册的 Passkey
  • PC 上显示二维码
  • 手机扫码后,通过蓝牙近场通信完成认证

四、当前生态支持现状

4.1 浏览器支持

浏览器 WebAuthn 支持 Passkey 支持
Chrome 67+
Firefox 60+
Safari 14+ ✅(iCloud 同步)
Edge 18+

结论:主流浏览器已全面支持,用户端无兼容问题。

4.2 操作系统支持

平台 认证方式 Passkey 同步
Windows 11 Windows Hello 微软账号同步
macOS 13+ Touch ID / Face ID iCloud Keychain 同步
iOS 16+ Face ID / Touch ID iCloud Keychain 同步
Android 9+ 指纹/人脸 Google Password Manager 同步

4.3 主流服务支持(截至 2025 年)

已支持 Passkey 登录的主流服务:

  • Google、Microsoft、Apple(ID 登录)
  • GitHub、Shopify、PayPal
  • 1Password、Dashlane(密码管理器)
  • 国内:淘宝、飞书、钉钉等部分支持

4.4 中国市场特殊情况

国内 FIDO2 落地有两个额外要求:

  1. 国密算法支持:金融、政务场景要求认证设备支持 SM2 签名算法(ECDSA 256 是国际标准,SM2 是国密标准);
  2. 本地化部署:FIDO2 服务端(RP Server)需要私有化部署,不能依赖境外云服务。

国产 FIDO2 方案通常同时支持 ECDSA(国际)和 SM2(国密),一个设备满足两套标准。


五、企业落地 FIDO2 的实战路径

5.1 落地场景优先级

在这里插入图片描述

并非所有场景都适合无密码化,建议按以下优先级推进:

第一优先:高风险管理员账号

  • 服务器 SSH 登录
  • 数据库管理账号
  • 堡垒机/跳板机
  • 云平台控制台

这类账号一旦被入侵,危害最大。先在这里部署 FIDO2,投入产出比最高。

第二优先:面向员工的内部系统

  • OA 系统
  • VPN 远程接入
  • 邮件系统
  • 代码仓库(GitLab/GitHub)

员工是最大的攻击面。钓鱼邮件主要针对员工账号。

第三优先:面向外部用户的 C 端应用

  • 移动 App 登录(生物识别)
  • Web 应用登录
  • B2B 合作伙伴门户

5.2 技术实施步骤

步骤一:服务端集成 WebAuthn

服务端需要实现 FIDO2 的 RP(Relying Party)逻辑,主流语言均有成熟库:

// Java 后端(使用 webauthn4j 库)
WebAuthnManager webAuthnManager = WebAuthnManager.createNonStrictWebAuthnManager();

// 注册验证
RegistrationData registrationData = 
    webAuthnManager.parse(registrationRequest);
webAuthnManager.verify(registrationData, registrationParameters);

// 保存公钥到数据库
credentialRepository.save(
    userId, 
    registrationData.getAttestationObject()
                    .getAuthenticatorData()
                    .getAttestedCredentialData()
);
// 前端(浏览器 WebAuthn API)
// 注册
const credential = await navigator.credentials.create({
    publicKey: {
        challenge: serverChallenge,           // 服务端随机数
        rp: { name: "企业内部系统", id: "internal.corp.com" },
        user: { id: userId, name: userEmail, displayName: userName },
        pubKeyCredParams: [
            { type: "public-key", alg: -7 },  // ES256 (ECDSA)
            { type: "public-key", alg: -37 }, // PS256 (RSA-PSS)
        ],
        timeout: 60000,
        attestation: "direct"
    }
});

// 将 credential 发送给服务端保存
await fetch('/api/webauthn/register', {
    method: 'POST',
    body: JSON.stringify(credential)
});

步骤二:用户注册认证器

用户首次使用时,需要注册 FIDO2 认证器(绑定设备/安全密钥):

1. 用户登录现有系统(账号密码或短信验证码)
2. 进入"安全设置" → "添加安全密钥/Passkey"
3. 插入安全密钥/触发生物识别
4. 系统完成注册,该设备绑定到账号

步骤三:验证和回退策略

初期建议保留密码作为备用方案,逐步过渡:

阶段一:FIDO2 作为可选的第二因素(双因素认证)
阶段二:FIDO2 作为默认第一步,密码作为备用
阶段三:全面无密码(高安全场景强制,普通场景推荐)

5.3 企业部署注意事项

认证器丢失怎么办?

必须设置至少两个认证器或一个备用恢复方案(如管理员重置流程)。物理安全密钥建议同时注册主备两把。

跨设备同步(Passkey)的安全考虑

Passkey 通过云端同步(iCloud/Google/微软账号)实现跨设备使用。对于高安全场景,同步的 Passkey 安全等级低于绑定硬件的安全密钥——建议管理员/特权账号使用不可同步的硬件安全密钥

遗留系统的集成

对于无法直接改造的遗留系统,可以在前面加一层统一身份认证门户(如 SSO 平台),通过统一认证门户支持 FIDO2,代理后端系统的认证。


六、FIDO2 与其他认证方式对比

认证方式 防钓鱼 防密码重用 防中间人 用户体验 硬件依赖
传统密码
短信验证码 SIM卡
TOTP 动态口令 可选
FIDO U2F 安全密钥
FIDO2/Passkey 平台/安全密钥

FIDO2 在安全性和用户体验上的综合表现,是目前认证技术中最优的方案。


七、常见问题解答

Q:Passkey 和 FIDO2 什么关系?

Passkey 是 FIDO2 的品牌名称,由苹果/谷歌/微软联合推广。技术上完全一样,Passkey 加入了云同步能力,让用户体验更友好。

Q:如果设备没有指纹/人脸识别怎么办?

可以使用 PIN 码(6 位以上)作为认证因子,同样满足 FIDO2 标准。或使用外置安全密钥(支持 PIN 解锁)。

Q:FIDO2 认证器中的私钥能被提取吗?

高安全级别的认证器(如 YubiKey、TPM 芯片)私钥存储在安全硬件中,在技术上无法提取(即使物理破坏也会触发销毁机制)。

Q:企业自建 FIDO2 服务,需要连接互联网吗?

不需要。FIDO2 认证服务(RP Server)可以完全私有化部署,离线内网运行。


总结

FIDO2/WebAuthn 标准已经足够成熟:浏览器、操作系统、主流服务都已全面支持,技术生态不再是瓶颈。

密码的消失不是一夜之间的事,但方向已经很清晰:

  1. 高安全场景(管理员、特权账号):立即迁移到硬件安全密钥 + FIDO2;
  2. 内部员工系统:逐步推广 Passkey/平台认证器,降低钓鱼风险;
  3. C 端用户:提供 FIDO2 作为可选方案,让用户自主选择;
  4. 金融/政务场景:选用支持国密 SM2 的国产 FIDO2 设备,满足合规要求。

无密码认证的本质,不是"不用密码",而是用你拥有的(设备)+ 你是谁的(生物特征),替代你知道的(密码)。这个组合在安全性和便利性上,都显著优于传统密码。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐