用密钥进行 FIDO 身份验证

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

简介

FIDO(快速 ID 实体在线)身份验证标准定义了一种快速安全的身份验证机制,供用户访问网站和应用。

FIDO Alliance一系列组织的代表制定了多种可扩展的技术规范,允许用户通过通用协议访问网站和应用。这意味着任何公司都可以使用 FIDO 标准实现密钥等技术以实现安全身份验证。

密钥是 FIDO 登录凭据,与来源(网站或应用)和实体设备绑定。借助密钥,用户可以在不输入用户名、密码或提供任何其他身份验证因素的情况下进行身份验证。此技术旨在取代密码作为主要的身份验证机制。

为什么安全身份验证很重要?

密码已经数十年用于计算身份验证。但是,基于密码的身份验证不是最安全的身份验证选项,因为数据库可能会遭到入侵,密码可能会遭到网上诱骗。

许多用户使用相同的密码登录不同的网站。这意味着,当一个网站发生数据泄露时,使用相同密码的所有其他帐号都会面临风险。因此,即使您构建了安全的密码系统,当密码是其唯一的保护机制时,用户仍然面临风险。

某些网站和应用会请求通过短信、电子邮件、应用等方式提供的第二个凭据,以此方式请求两步验证。虽然这种方式比仅使用密码更安全,但这种两步验证方法仍然容易受到钓鱼式攻击,因为用户可能会被迫在恶意网站上输入两步验证详情。

FIDO 如何增强安全性?

基于 FIDO 的身份验证可以消除许多基于密码的身份验证以及使用传统第二步的身份验证引起的许多问题。具体而言:

  • FIDO 身份验证使用公钥加密。
  • FIDO 有助于确保凭据不会与不具备该凭据的恶意方或其他方共享

公钥加密可降低潜在的数据库泄露威胁。用户注册到单个来源(网站或应用),系统会在用户的身份验证程序(实体设备)上生成公钥/私钥对。用户的公钥由来源服务器存储,但这一数据本身对攻击者毫无用处。攻击者无法从存储在服务器上的数据获得用户的私钥,这是完成身份验证所必需的。

使用 FIDO 时,用户没有责任确认网站或应用是否确实是其所说的身份。此外,用户不负责确保凭据用错了位置。FIDO 将每个凭据绑定到特定来源,这意味着设备(而不是真人)负责正确识别网站或应用。

例如,假设用户正尝试登录 example.com。如果用户在 phishing-example.com 上请求 example.com 拥有的凭据,身份验证器将拒绝该请求,从而保护用户。身份验证流程可让网上诱骗网站或应用很难获得针对其他来源的验证。

总的来说,FIDO 和匹配密钥可让您部署更强大的身份验证功能,同时仍可供大多数用户使用。

Demo

什么是匹配密钥?

密钥是遵循 FIDO 和 W3C Web Authentication (WebAuthn) 标准的数字凭据。与密码类似,网站和应用可以请求用户创建密码来访问其帐号。

密钥依赖于解锁设备来验证用户身份。这可以通过生物识别传感器(例如指纹或人脸识别)、PIN 码或图案来执行。用户必须先向源站注册才能生成其密钥(公钥-私钥对)。

当用户返回网站或应用进行登录时,用户可以执行以下步骤:

  1. 转到应用。
  2. 点击登录
  3. 选择对方的配对密钥。
  4. 解锁设备即可完成登录。

身份验证器使用私钥生成签名。此签名将利用公钥来验证来源与身份验证器之间的登录凭据,而不会泄露私钥。

无论密钥存储在何处,用户都可以在密钥的帮助下登录任意设备上的服务。例如,存储在手机上的密钥可用于在其他笔记本电脑上登录网站。

密钥的工作原理是什么?

密钥是通过操作系统创建和同步的。某些操作系统可能允许在用户的设备(例如登录同一 Google 帐号的 Android 手机和 Chrome 操作系统设备)之间自动同步密钥。

虽然密钥与操作系统相关联,但用户可以在登录笔记本电脑时使用手机上的密钥。由于密钥是基于 FIDO 和 W3C 标准构建的,因此所有浏览器都可以采用它们。例如,某位用户在 Chromebook 上访问了 site.example。此用户之前在其 iOS 设备上登录了 site.example。系统将提示用户在 iOS 设备上确认其身份。通常,site.example 会为用户的 Chromebook 创建新密钥,这样以后就不再需要使用该手机。

密钥均经过端到端加密,这意味着,即使 Google 负责将其同步到不同的 Android 设备,Google 也无法读取该密钥或以其他方式知道这些数据。

身份验证流程

表示身份验证窗口可能的样子。

若要在网站或应用上实现密钥,您务必要熟悉以下内容:

  • 身份验证器是归用户所有的实体设备,持有用户的密钥并且可以识别用户。
  • 信赖方是指您的网站或应用,由前端应用和后端服务器组成。
    • 前端应用调用 API 以与身份验证器交互并启动身份验证过程。
    • 后端服务器检索身份验证器生成的加密对象并进行验证。

例如,假设一位用户想要从shoes.example(依赖方)的商店购买一双鞋。用户已在 Android 手机上使用生物识别传感器在 shoes.example 上注册帐号。用户通过解锁设备登录 Android 设备中的 shoes.example。然后,shoes.example 会根据该用户的已知公钥验证经过加密签名的登录凭据,以确认用户的身份准确无误。

身份验证器

身份验证器兼容 FIDO,用于确认用户身份。其中包括特殊用途的设备(FIDO 安全密钥)以及符合身份验证器要求的手机和其他计算机。 身份验证器会执行 FIDO 和 WebAuthn 标准中所述的加密操作。

设备有两个用于注册和身份验证的角色:

  • 当用户向依赖方注册时,设备会生成唯一的公钥私钥对。其中包括用户的手机和计算机。
  • 当用户将来登录依赖方时,设备会使用私钥生成签名。

当用户证明自己拥有身份验证者身份时,系统会执行这两项操作。此密钥对通过特定来源注册,且只能由确切来源使用。如果用户到达钓鱼式攻击网站,凭据将不可用。

符合 FIDO 要求的设备

最常见的身份验证器有:

  • 平台身份验证器:此类身份验证器内置于智能手机和计算机中。平台身份验证器会使用生物识别传感器(例如指纹传感器或具有人脸识别功能的摄像头)、PIN 码或图案。由于身份验证互动是通过解锁设备完成的,因此只需一步即可证明用户拥有设备,且可以通过其唯一生物识别信息确认其身份。
  • 安全密钥:通常是 USB 设备,带有用于指示身份验证的按钮。与密码一起使用时,安全密钥可以为双重身份验证提供占位因素。最常见的就是 Titan 安全密钥或 YubiKey。

前端

应用使用客户端 API(例如 WebAuthnAndroid 的 FIDO2)通过身份验证器创建和验证用户凭据。

应用将后端服务器生成的加密质询传递给身份验证器。应用将身份验证器的响应发送到服务器以供验证,服务器会根据该验证执行操作。

后端

服务器存储用户的公钥凭据和帐号信息。

注册和身份验证时,服务器会生成加密质询。此验证用于验证由身份验证器颁发的签名,确认用户确实是其声称的身份。

常见问题解答 (FAQ)

谁支持密钥?

由于匹配密钥是基于 FIDO 标准的,因此它们也适用于 Android 和 Chrome,以及其他许多热门平台和浏览器,例如 Microsoft Windows、Microsoft Edge、MacOS、iOS 和 Safari。

请参阅这些平台提供的文档以确认当前的可用性状态。

在 Android 设备上,我们的目标是在 2022 年底之前为开发者提供密钥支持。

如果用户丢失设备,会发生什么情况?

在 Android 设备上创建的密钥会备份并同步到登录同一 Google 帐号的 Android 设备,这与将密码备份到密码管理器的方式相同。

也就是说,用户更换设备时随身携带的匹配密钥。要在新手机上登录应用,所有用户都只需要解锁手机。

用户能否在手机上使用配对密钥登录好友的设备?

可以。用户可以在手机和其他人的设备之间建立一个“一次性链接”,以用于登录。

后续步骤

参加 Codelab:

详细了解以下内容:

获取更新: