“CTAP”和“FIDO U2F”是FIDO(Fast Identity Online)标准中的两个关键概念,它们共同定义了身份验证器(如物理安全密钥)如何与客户端(如浏览器或操作系统)通信。
FIDO U2F
FIDO U2F (Universal 2nd Factor) 是FIDO联盟发布的首批规范之一,旨在为现有基于密码的登录系统添加一个强大的第二验证因素。它的核心理念是通过一个硬件设备(如USB密钥)来验证用户身份,从而大大增强安全性,防止网络钓鱼攻击。
工作原理:
注册:用户在服务(例如Google)注册U2F设备时,设备会为该服务生成一个公钥-私钥对,并将公钥发送给服务器。私钥安全地保存在设备内部,无法导出。
登录:用户输入用户名和密码后,服务会向用户的浏览器发送一个挑战。浏览器将挑战发送给U2F设备。
验证:用户通过物理操作(如按下设备上的按钮)来授权。设备使用其内部的私钥对挑战进行签名,并将签名结果返回给服务器。服务器用之前保存的公钥来验证这个签名。
因为私钥始终留在设备上,并且签名过程需要用户的物理操作,所以这种方法可以有效抵御远程攻击和网络钓鱼。
CTAP
CTAP (Client to Authenticator Protocol) 是FIDO2标准的核心协议之一。它定义了客户端(如浏览器、操作系统)如何与外部身份验证器(authenticator)通信,从而实现WebAuthn认证。
CTAP实际上分为两个版本,并与FIDO U2F有着紧密的联系:
CTAP1 (FIDO U2F的新名称):
为了保持向后兼容性,FIDO联盟将FIDO U2F规范重新命名为CTAP1。
这意味着现有的FIDO U2F设备(例如老款的YubiKey)可以被作为CTAP1身份验证器,在支持FIDO2的浏览器和操作系统上继续使用,以提供第二因素验证。
CTAP1允许你通过USB、NFC或BLE使用现有的U2F设备。
CTAP2:
这是FIDO2标准中引入的新协议,它比CTAP1更强大、更灵活。
CTAP2支持无密码(passwordless)体验,并能与WebAuthn(W3C的Web身份验证规范)一起工作。
它允许身份验证器在不连接任何客户端的情况下,独立生成和管理密钥,并且支持PIN码、生物识别等用户验证方法。
总结:CTAP与FIDO U2F的关系
可以将它们的关系理解为:
FIDO U2F 是一个早期标准,专注于第二因素验证。
CTAP 是一个更广泛的协议,定义了客户端和身份验证器之间的通信方式。
CTAP1 实际上就是 FIDO U2F,只是换了个名字,以方便其融入新的FIDO2生态系统,并保持与旧设备的兼容性。
CTAP2 是FIDO2的新一代协议,支持更丰富的验证方式和无密码登录。
在FIDO2生态中,WebAuthn负责定义Web API,而CTAP则负责处理底层硬件设备与客户端之间的协议。