FIDO 联盟自 2013 年成立以来,在身份认证与安全领域做出了杰出的贡献,公开发布了多项标准协议(如下图所示),FIDO 工作组的数量已从原先的两个扩展到了数十个。但是,相信很多人都会有同样的疑惑,FIDO 联盟制定的这些标准具体有何区别,应该如何正确认识?本文将带大家对下图中的概念作逐一分析,帮助读者更好地理解。
- FIDO:即 Fast IDentity Online(线上快速身份验证)的缩写,或称 FIDO 联盟。该联盟主要致力于构建安全、开放、防网络钓鱼的无密码身份验证标准。FIDO 系列协议是由 FIDO 联盟制定的一套协议,包括通用认证框架 UAF(Universal Authentication Framework)、通用第二因素认证标准 U2F(Universal 2nd Factor)以及 FIDO2。当说到使用“FIDO”时,通常是指使用这三种协议中的任何一种,因为从概念的角度来看,这三者基本一致,只是结构有所区别(UAF——TLV,U2F——RAW,FIDO2——CBOR)。
- CTAP:即客户端到认证器协议(Client to Authenticator Protocols),对 HID、NFC 以及 BLE 等传输协议进行一系列定义,描述了启用 CTAP 的设备如何使用这些协议与客户端通信。U2F 和 FIDO2 认证器均具备这些特性,对应的名称为 CTAP1 和 CTAP2.
- U2F:即通用认证框架,连同 UAF 一起,是互联网领域第一个预防网络钓鱼攻击的身份验证协议。U2F 标准于 2014 年首次公布,该标准以 web 为中心,支持 USB、NFC 以及 BLE 传输,并对低级传输、信息格式以及 JS API 等内容进行了具体说明。
- CTAP1:CTAP1 是 U2F 协议的正式名称,U2F 使用 RawMessage 格式。
- U2F JS API:即 2014 年在 Google Chrome 浏览器中推出的一个仅支持 U2F 的传统 API。由于该 API 只支持 U2F 且只有极少数浏览器支持,目前已被淘汰。相比之下,现在的 WebAuthn 能够支持 U2F 和 FIDO2 标准,更具现代意义。
- FIDO2:即满足现代化、简便性、安全性、防网络钓鱼、无密码身份验证的一个新协议。其核心规范包括 WebAuthn(客户端 API)以及 CTAP(认证器 API)。
- CTAP2:FIDO2 协议底层部分的正式名称。FIDO2 使用 CBOR 编码响应结构,可以理解为 JSON,但与 TLV 有些类似。CTAP2 规范定义了 FIDO2 请求如何转换为 CTAP1/U2F 请求,以及 CTAP1/U2F 响应如何转换为 CBOR/FIDO2 响应。不过,值得注意的是,U2F 并不时 FIDO2 协议的一部分。
- WebAuthn:即描述用于创建和管理公钥凭证接口的浏览器 JS API。WebAuthn 标准由 W3C 组织牵头制定,符合现代互联网要求。WebAuthn 能够与 CTAP2/FIDO2 和 CTAP1/U2F 认证器对话。此外,还会接受所需标准的编码请求,并基于协议对响应进行解码或重新编码。因此,尽管 CTAP2 规范中也定义了 CTAP1/U2F 转换,但都是在 WebAuthn 中实现。
- 认证器:FIDO 认证器是指向服务器进行用户认证的实体,可以是软件(如移动应用程序),也可以是硬件(如安全密钥)。
- 安全密钥:指支持 FIDO 的硬件认证器,例如 Yubikey、Feitian 以及 TrustKey 等硬件产品。
常见问题解答
1、U2F 是 FIDO2 的一部分吗?
-不是。U2F 是用于预防网络钓鱼第二因素认证的一个单独标准。FIDO2 能够向后兼容目前的 U2F 认证器。
2、FIDO2 就是 WebAuthn 吗?
-不是。WebAuthn 只是 FIDO2 协议的一部分。所以,正确的说法是“我的服务器支持 FIDO2 身份验证”。由于 WebAuthn 是 FIDO2 项目中最广为人知的规范,所以人们常常存在“FIDO2 就是 WebAuthn”的错误认知。
3、所有的安全密钥都可以叫作 Yubikey 吗?
不是。Yubikey 是 Yubico 的安全密钥产品,只是市面上众多密钥产品中的一种,其他安全密钥还包括 TrustKey、Feitian Bio Pass、Open Source Solokey 以及 Google Titan Key 等等。所以,只有在特指 Yubico 的产品时,你可以说 Yubikey,否则都应该称为“安全密钥”。