跳转到主要内容

FIDO/WebAuthn

本文约需 2 分钟阅读

FIDO (Fast IDentity Online) 和 WebAuthn 是为实现不依赖密码的身份验证而制定的国际标准规范。通过将 FIDO Alliance 制定的技术规范与 W3C 作为 Web 标准推荐的 WebAuthn API 相结合,可以从浏览器和应用程序中使用基于公钥密码的身份验证。它对钓鱼攻击具有结构性的抵抗力,作为解决密码泄露这一根本问题的技术,正在整个行业中推广采用。

FIDO Alliance 的成立与规范的演进

2012 年,以 PayPal 和 Lenovo 为中心成立了 FIDO Alliance。当时密码重复使用和大规模信息泄露事件接连不断,密码身份验证的局限性已经变得明显。Alliance 首先在 2014 年公开了两项规范。 UAF (Universal Authentication Framework) 实现了通过生物识别的无密码登录, U2F (Universal 2nd Factor) 实现了通过 USB 安全密钥的双因素身份验证。

2018 年迎来了重大转折点。作为 FIDO2 项目, W3C 的 WebAuthn API 和 FIDO Alliance 的 CTAP (Client to Authenticator Protocol) 得到了标准化。WebAuthn 是浏览器端的 API 规范, CTAP 是与认证器 (安全密钥或生物识别设备) 之间的通信协议。这两者的结合使得可以从 Web 浏览器直接使用硬件认证器。此后自 2022 年起,作为通行密钥将 FIDO2 认证信息进行云同步的机制得到普及,成为普通用户也能轻松使用的技术。

基于公钥密码的认证流程

FIDO/WebAuthn 的认证以质询-响应方式工作。在传统的密码认证中会将“秘密字符串”发送到服务器,但在 FIDO 中私钥绝不会离开设备。

服务器生成随机质询
浏览器调用 WebAuthn API
认证器进行本人确认 (生物识别 / PIN)
用私钥对质询进行签名
服务器用公钥验证签名

这种方式的决定性优势在于服务器端只保存用户的公钥。即使服务器遭到入侵,从公钥反推私钥在计算上也是不可行的,因此数据泄露不会直接导致认证信息被滥用。

抗钓鱼机制 - 来源验证

FIDO/WebAuthn 之所以能强力抵抗钓鱼,最大的原因在于认证时会自动进行来源 (域名) 验证。认证器会以密码学方式将发起认证请求的域名包含在签名中。即使攻击者在伪造网站 (例如 examp1e.com) 上要求用户认证,正规网站 (example.com) 的认证信息也无法在伪造网站的来源上使用。即使用户被骗访问了伪造网站,由于在认证器层面就会检测到欺诈,钓鱼攻击在结构上无法成立。这在探讨通行密钥迁移的挑战时也是一项重要优势。

与通行密钥的关系

通行密钥是 FIDO2/WebAuthn 的一种实现形态。技术上是相同的基于公钥密码的认证,但通行密钥与传统 FIDO2 不同之处在于可以通过云将认证信息同步到多台设备。传统的 FIDO2 安全密钥与物理设备绑定,因此丢失时的恢复是一个难题。通行密钥解决了这一问题,通过 iCloud 钥匙串和 Google 密码管理器实现了无缝的设备间同步。与生物识别认证相结合,用户体验也大幅提升。

支持状况与实务考量

截至 2025 年, Chrome 、 Safari 、 Firefox 、 Edge 等主要浏览器均已支持 WebAuthn API。在操作系统层面, Windows Hello 、 macOS / iOS 的 Touch ID / Face ID 、 Android 的生物识别都可作为 FIDO2 认证器使用。在企业部署中,将 YubiKey 等硬件安全密钥作为多因素认证手段采用的案例正在增加。FIDO2 安全密钥相关书籍 (Amazon)也可作为实现的参考。

作为实务上的注意事项,引入 WebAuthn 还需要服务器端的配合。需要实现生成质询、保存公钥、验证签名的逻辑,推荐利用相关库 (如 SimpleWebAuthn 、 py_webauthn 等)。此外,掌握加密的基础知识,尤其是理解公钥密码的原理,在排查问题时会很有帮助。同时了解生物识别认证的风险两步验证的基础,就能看清认证设计的整体面貌。

相关术语

这篇文章对您有帮助吗?

XHatena