WebAuthn 认证原理

WebAuthn 是一个由 W3C 制定的网络标准,它的目的是让用户可以使用公钥加密的方式来验证网络应用程序和服务。WebAuthn 是 FIDO2 项目的核心组成部分,FIDO2 项目是由 FIDO 联盟和 W3C 共同指导的。

WebAuthn 的原理是,当用户注册或登录一个网站时,网站会向用户的浏览器发送一个挑战(challenge),浏览器会将这个挑战传递给用户的验证器(authenticator),验证器是一个可以执行密码学运算的抽象功能模型,它可以是软件或硬件实现。验证器会根据挑战和网站的信息,生成一对公钥和私钥,并将公钥和一些其他信息(如验证器类型、用户验证方式等)回传给网站,作为注册或登录的凭证。私钥则存储在验证器中,不会外泄。

验证器可以是内建在设备中的平台验证器(platform authenticator),也可以是通过 USB、蓝牙、NFC 等方式连接到设备的漫游验证器(roaming authenticator),也就是常见的安全金钥。平台验证器通常可以利用设备上的生物辨识或屏幕锁定功能来验证用户,例如指纹、面部辨识、PIN 码、密码或图形等。漫游验证器则需要用户按下按钮或触摸金钥来表示用户存在性(user presence)。

WebAuthn 的优点是,它不需要用户记住或输入密码,也不需要用户提供个人信息或电话号码等。它可以防止钓鱼攻击(phishing attack),因为攻击者无法伪造网站的信息来欺骗验证器。它也可以防止恶意软件(malware)攻击,因为私钥不会暴露给设备上运行的软件。

WebAuthn 的第一版和第二版标准分别于 2019 年 3 月 4 日和 2021 年 4 月 8 日发布为 W3C 建议书(Recommendation)。目前第三版标准正在草案阶段(First Public Working Draft)。

WebAuthn 的安全性原理

WebAuthn 的安全性原理是基于公钥加密的,它可以保护用户的私密信息和验证过程。

具体来说,WebAuthn 的安全性原理包括以下几个方面:

挑战/响应机制:当网站要求用户注册或登录时,它会向用户的浏览器发送一个随机生成的数字,称为挑战(challenge)。浏览器会将这个挑战传递给用户的验证器,验证器会用私钥对挑战进行签名,并将签名和公钥等信息回传给网站。网站可以用公钥来验证签名的有效性,并确认用户是否拥有对应的私钥。这个机制可以防止重放攻击(replay attack),因为每次的挑战都是不同的,而且只能用一次。

起源验证:当验证器对挑战进行签名时,它也会包含网站的起源(origin)信息,例如域名、协议和端口等。这个信息可以让网站确认用户是否在正确的网站上进行操作,而不是被钓鱼网站欺骗。起源验证可以防止钓鱼攻击(phishing attack),因为攻击者无法伪造网站的起源来欺骗验证器。

私钥保护:验证器生成的私钥是存储在验证器中的,不会外泄或传输给任何其他方。私钥只能在用户通过一定的验证方式(例如指纹、面部辨识、按钮等)后才能被使用。私钥保护可以防止恶意软件(malware)攻击,因为设备上运行的软件无法访问或窃取私钥。

隐私保护:验证器生成的公钥是与特定的网站相关联的,不会被共享或重复使用于其他网站。这意味着不同的网站无法通过公钥来追踪或辨识用户。此外,验证器也不会存储或泄露用户的个人信息,例如姓名、电话号码、电子邮件等。隐私保护可以防止身份盗用(identity theft)或个人数据泄露(data breach)。

WebAuthn 的工作流程

WebAuthn 的工作流程大致可以分为两个阶段:

  • 注册(registration)
  • 认证(authentication)。

注册阶段是在用户第一次使用验证器时进行的,目的是为用户生成一对公钥和私钥,并将公钥和其他信息发送给网站,作为用户的凭证。认证阶段是在用户之后每次登录或验证身份时进行的,目的是用私钥对网站发送的挑战进行签名,并将签名和其他信息发送给网站,让网站可以验证用户是否拥有对应的私钥。以下是 WebAuthn 的工作流程图和每一步的详细介绍:

  • 注册阶段:

      1. 用户在网站上选择注册或新增验证器的选项,并提供一些基本信息,例如用户名、电子邮件等。
      1. 网站向用户的浏览器发送一个注册请求,包含一个随机生成的数字(挑战)、网站的起源、用户的信息、验证器的选项等。
      1. 浏览器将注册请求传递给用户选择的验证器,并提示用户进行验证方式,例如指纹、面部辨识、按钮等。
      1. 验证器根据注册请求生成一对公钥和私钥,并用私钥对挑战进行签名。私钥存储在验证器中,不会外泄。公钥和其他信息(例如验证器类型、用户验证方式、凭证 ID 等)组成一个公开密钥凭证(public key credential),并回传给浏览器。
      1. 浏览器将公开密钥凭证发送给网站,作为用户的注册或新增验证器的完成信号。
      1. 网站用公钥来验证签名的有效性,并确认公开密钥凭证与注册请求相符。如果成功,网站会将公开密钥凭证存储在服务器中,与用户的账号相关联。
  • 认证阶段:

      1. 用户在网站上选择登录或验证身份的选项,并提供一些基本信息,例如用户名、电子邮件等。
      1. 网站向用户的浏览器发送一个认证请求,包含一个随机生成的数字(挑战)、网站的起源、用户的信息、验证器的选项等。

你可能感兴趣的:(基础,网络,安全,web安全)