摘要:微软、谷歌、苹果已全面支持 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 落地有两个额外要求:
- 国密算法支持:金融、政务场景要求认证设备支持 SM2 签名算法(ECDSA 256 是国际标准,SM2 是国密标准);
- 本地化部署: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 库)WebAuthnManagerwebAuthnManager=WebAuthnManager.createNonStrictWebAuthnManager();// 注册验证RegistrationDataregistrationData=webAuthnManager.parse(registrationRequest);webAuthnManager.verify(registrationData,registrationParameters);// 保存公钥到数据库credentialRepository.save(userId,registrationData.getAttestationObject().getAuthenticatorData().getAttestedCredentialData());// 前端(浏览器 WebAuthn API)// 注册constcredential=awaitnavigator.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 发送给服务端保存awaitfetch('/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 标准已经足够成熟:浏览器、操作系统、主流服务都已全面支持,技术生态不再是瓶颈。
密码的消失不是一夜之间的事,但方向已经很清晰:
- 高安全场景(管理员、特权账号):立即迁移到硬件安全密钥 + FIDO2;
- 内部员工系统:逐步推广 Passkey/平台认证器,降低钓鱼风险;
- C 端用户:提供 FIDO2 作为可选方案,让用户自主选择;
- 金融/政务场景:选用支持国密 SM2 的国产 FIDO2 设备,满足合规要求。
无密码认证的本质,不是"不用密码",而是用你拥有的(设备)+ 你是谁的(生物特征),替代你知道的(密码)。这个组合在安全性和便利性上,都显著优于传统密码。