FIDO2 认证器

概述

FIDO2 认证器子系统实现了 FIDO2 CTAP2 Specification (Client to Authenticator Protocol,客户端到认证器协议),使 Zephyr 设备可以用作无密码认证的硬件安全密钥。该子系统可以通过 CONFIG_FIDO2 选项启用。

FIDO2 安全密钥与 WebAuthn Specification Web 标准配合使用。依赖方(网站或服务)通过客户端(浏览器或操作系统平台)与认证器交互,以注册和验证用户凭据。认证器使用永不离开硬件的设备内密钥执行密码学操作。

该子系统目前支持以下 CTAP2 命令:

  • authenticatorMakeCredential

  • authenticatorGetAssertion

  • authenticatorGetInfo

  • authenticatorClientPIN

  • authenticatorGetNextAssertion

  • authenticatorSelection

架构

该子系统由可插拔的后端组件组成,每个组件都可以在构建时通过 Kconfig 选择:

传输

处理主机与认证器之间的线协议通信。传输通过 FIDO2_TRANSPORT_DEFINE 宏注册,并在启动时遍历。可用的传输:

用户在场(UP)

确认有真人实际在场。后端通过 CONFIG_FIDO2_UP_BACKEND 选择:

凭据存储

持久保存可发现(常驻)凭据。后端通过 CONFIG_FIDO2_STORAGE_BACKEND 选择:

证明

对新创建的凭据签名以证明其来源。后端通过 CONFIG_FIDO2_ATTESTATION_BACKEND 选择:

用法

要使用 FIDO2 子系统,请包含主头文件:

#include <zephyr/authentication/fido2/fido2.h>

基本初始化

认证器要能与主机通信,必须至少启用一种传输。

完整的初始化流程请参见 FIDO2 Authenticator。

运行时状态监控

该子系统提供一个运行时状态回调,应用可以用它驱动 LED 等状态指示器:

#include <zephyr/authentication/fido2/fido2.h>

static void on_state_change(enum fido2_runtime_state state, void *user_data)
{
    switch (state) {
    case FIDO2_RUNTIME_STATE_IDLE:
        /* LED off */
        break;
    case FIDO2_RUNTIME_STATE_WAITING_USER_PRESENCE:
        /* Blink LED */
        break;
    case FIDO2_RUNTIME_STATE_PROCESSING:
        /* LED on solid */
        break;
    default:
        break;
    }
}

fido2_set_state_callback(on_state_change, NULL);

扩展

CTAP2 扩展尚未实现。以下 Kconfig 选项是为将来实现保留的:

参考资料

API 参考

FIDO2