FIDO2 认证器
概述
FIDO2 认证器子系统实现了 FIDO2 CTAP2 Specification (Client to Authenticator Protocol,客户端到认证器协议),使 Zephyr 设备可以用作无密码认证的硬件安全密钥。该子系统可以通过 CONFIG_FIDO2 选项启用。
FIDO2 安全密钥与 WebAuthn Specification Web 标准配合使用。依赖方(网站或服务)通过客户端(浏览器或操作系统平台)与认证器交互,以注册和验证用户凭据。认证器使用永不离开硬件的设备内密钥执行密码学操作。
该子系统目前支持以下 CTAP2 命令:
authenticatorMakeCredentialauthenticatorGetAssertionauthenticatorGetInfoauthenticatorClientPINauthenticatorGetNextAssertionauthenticatorSelection
架构
该子系统由可插拔的后端组件组成,每个组件都可以在构建时通过 Kconfig 选择:
- 传输
处理主机与认证器之间的线协议通信。传输通过
FIDO2_TRANSPORT_DEFINE宏注册,并在启动时遍历。可用的传输:USB HID(CTAPHID) —
CONFIG_FIDO2_TRANSPORT_USB_HIDBluetooth LE(CTAPBLE) —
CONFIG_FIDO2_TRANSPORT_BLE
- 用户在场(UP)
确认有真人实际在场。后端通过
CONFIG_FIDO2_UP_BACKEND选择:输入设备 —
CONFIG_FIDO2_UP_INPUT始终批准 —
CONFIG_FIDO2_UP_ALWAYS自定义 —
CONFIG_FIDO2_UP_CUSTOM(由应用提供)
- 凭据存储
持久保存可发现(常驻)凭据。后端通过
CONFIG_FIDO2_STORAGE_BACKEND选择:设置子系统 —
CONFIG_FIDO2_STORAGE_SETTINGS无 —
CONFIG_FIDO2_STORAGE_NONE(仅支持不可发现的凭据)
- 证明
对新创建的凭据签名以证明其来源。后端通过
CONFIG_FIDO2_ATTESTATION_BACKEND选择:自证明 —
CONFIG_FIDO2_ATTESTATION_SELF(默认)自定义 —
CONFIG_FIDO2_ATTESTATION_CUSTOM(由应用提供)
用法
要使用 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 选项是为将来实现保留的:
credProtect —
CONFIG_FIDO2_EXT_CRED_PROTECThmac-secret —
CONFIG_FIDO2_EXT_HMAC_SECRETlargeBlobKey —
CONFIG_FIDO2_EXT_LARGE_BLOB_KEYcredBlob —
CONFIG_FIDO2_EXT_CRED_BLOBthirdPartyPayment —
CONFIG_FIDO2_EXT_THIRD_PARTY_PAYMENT