身份验证器评估请求并通过在 fidoStatus 特征上发送通知来响应

Authenticator evaluates the request and responds by sending notifications over fidoStatus characteristic

我正在制作一个支持 CTAP BLE 与 WebAuthn 通信的移动身份验证器。 我关注这个文档:https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#ble-protocol-overview

协议概述如下:

  1. 身份验证器通告 FIDO 服务。

  2. 客户端扫描广告 FIDO 服务的身份验证器。

  3. 客户端对认证器执行特征发现。

  4. 如果尚未配对,客户端和验证器应执行 BLE 配对并创建 LTK。身份验证器应仅允许来自以前绑定的客户端的连接,无需用户干预。

  5. 客户端检查 fidoServiceRevisionBitfield 特征是否存在。如果是这样,客户端通过写入一个设置了单个位的值来选择受支持的版本。

  6. 客户端读取 fidoControlPointLength 特征。

  7. 客户端在 fidoStatus 特征上注册通知。

  8. 客户端将请求(例如注册请求)写入 fidoControlPoint 特征。

  9. 可选地,客户端向 fidoControlPoint 特征写入一个 CANCEL 命令以取消挂起的请求。

  10. Authenticator 评估请求并通过通过 fidoStatus 特征发送通知来响应。

  11. 协议在以下任一情况下完成:

    • 客户端取消注册 fidoStatus 特征的通知,或者:
    • 连接超时,被认证者关闭。

在第 8 步,我收到这样的消息:0x83000700030000000000,我理解

0x83 是 MSG 命令

0x0007 为数据长度

00030000000000 是数据

当我收到这样的消息时,我不知道如何回应 WebAuthn,正如第 10 步所说 "Authenticator evaluates the request and responds by sending notifications over fidoStatus characteristic."

查了半天,终于找到答案了。原因是我正在 Android Chrome 上与支持 CTAP1/U2F 的 WebAuthn 交互。现在,当我在支持 CTAP2 的桌面上使用 Chrome(版本 75)时,它工作正常。

识别 WebAuthn 支持 CTAP2 的要点是发送到验证器的 AuthenticatorGetInfo。它是 0x83000104

0x83 是 MSG 命令

0x0001 是内容的长度

04 是 AuthenticatorGetInfo