libfido2
libfido2 — это кроссплатформенная библиотека с открытым исходным кодом, предоставляющая программный интерфейс (API) для взаимодействия с устройствами аутентификации, поддерживающими протоколы FIDO2 и CTAP (Client to Authenticator Protocol). Библиотека позволяет приложениям на языке C выполнять регистрацию и аутентификацию пользователей с использованием аппаратных ключей безопасности (например, YubiKey, SoloKey, Trezor) и встроенных аутентификаторов (например, Windows Hello, Touch ID на macOS). libfido2 является эталонной реализацией спецификаций FIDO2, разработанной сообществом и поддерживаемой компанией Yubico.
История
Разработка libfido2 началась в 2017 году компанией Yubico (США) как часть усилий по продвижению открытых стандартов аутентификации. Проект был создан для замены устаревшей библиотеки libu2f, которая поддерживала только протокол U2F (Universal 2nd Factor), предшественник FIDO2. Первый стабильный релиз libfido2 (версия 1.0) состоялся в 2018 году. С тех пор библиотека активно развивается: добавляется поддержка новых функций, таких как FIDO2 Resident Keys, HMAC-Secret, Credential Management, а также улучшается совместимость с различными операционными системами. В 2020 году libfido2 была включена в состав OpenBSD, а в 2021 году — в состав FreeBSD. Код библиотеки распространяется под лицензией BSD 2-Clause, что позволяет использовать её как в открытых, так и в проприетарных проектах.
Архитектура и компоненты
libfido2 состоит из нескольких ключевых модулей, каждый из которых отвечает за определённый аспект взаимодействия с аутентификаторами:
Основные модули
- libfido2 (ядро) — реализует протоколы FIDO2 (WebAuthn) и CTAP 2.0/2.1. Обеспечивает создание и проверку учётных данных (credential), управление PIN-кодами, работу с биометрическими данными.
- libfido2-hid — модуль для связи с USB-устройствами через HID (Human Interface Device). Использует собственную реализацию протокола FIDO HID, не зависящую от операционной системы.
- libfido2-nfc — модуль для взаимодействия с NFC-аутентификаторами (например, смарт-карты или ключи с NFC-чипом). Поддерживает протокол CTAP over NFC.
- libfido2-ble — модуль для работы с Bluetooth Low Energy (BLE) аутентификаторами. Реализует CTAP over BLE.
Утилиты командной строки
В состав libfido2 входят несколько консольных утилит для тестирования и отладки:
- fido2-cred — создание учётных данных (MakeCredential).
- fido2-assert — выполнение аутентификации (GetAssertion).
- fido2-token — управление токенами (список, сброс, настройка PIN).
- fido2-info — вывод информации о подключённых аутентификаторах.
Функциональные возможности
Поддерживаемые протоколы и стандарты
- FIDO2 (WebAuthn) — полная поддержка как для удалённых (через браузер), так и для локальных приложений.
- CTAP 2.0 и 2.1 — протокол обмена между клиентом и аутентификатором.
- U2F (обратная совместимость) — поддержка старых устройств, работающих по протоколу Universal 2nd Factor.
- FIDO2 Resident Keys — хранение учётных данных на самом аутентификаторе (без необходимости синхронизации с сервером).
- HMAC-Secret — расширение для генерации криптографических ключей на основе секрета, хранящегося в аутентификаторе.
- Credential Management — управление списком зарегистрированных учётных данных на устройстве.
Криптографические алгоритмы
- ECDSA (Elliptic Curve Digital Signature Algorithm) на кривой P-256 (secp256r1) — основной алгоритм подписи.
- EdDSA (Edwards-curve Digital Signature Algorithm) на кривой Ed25519 — поддержка с версии 1.12.0.
- RSA PKCS#1 v1.5 — поддержка для совместимости с устаревшими системами.
- SHA-256 — хеширование для подписей и идентификаторов.
- AES-256 — шифрование для защищённого канала (CTAP 2.1).
Применение
В операционных системах
- Linux — libfido2 используется в PAM-модуле
pam_u2fдля двухфакторной аутентификации при входе в систему. Также поддерживается вsystemd(черезsystemd-logind). - macOS — библиотека может быть использована для интеграции с Touch ID и внешними ключами через
IOKit. - Windows — поддержка через WinUSB и HID API. Используется в некоторых сторонних менеджерах паролей (например, KeePassXC).
- BSD — встроена в OpenBSD и FreeBSD для аутентификации в консоли и SSH.
В приложениях
- SSH — libfido2 позволяет использовать аппаратные ключи для аутентификации по протоколу SSH (через
ssh-keygen -t ecdsa-skили-t ed25519-sk). - Веб-браузеры — библиотека не используется напрямую в браузерах, но её API лёг в основу многих реализаций WebAuthn на стороне сервера.
- Менеджеры паролей — KeePassXC, Bitwarden (через плагины) поддерживают FIDO2 через libfido2.
- Системы управления доступом — корпоративные решения для аутентификации сотрудников (например, в сочетании с YubiKey).
Примеры использования
Регистрация нового ключа (MakeCredential)
``bash fido2-cred -M -i cred_param -o cred_output /dev/hidraw2 ``
Аутентификация (GetAssertion)
``bash fido2-assert -G -i assert_param -o assert_output /dev/hidraw2 ``
Сброс токена
``bash fido2-token -R /dev/hidraw2 ``
Критика и ограничения
- Зависимость от аппаратного обеспечения — для полноценной работы требуется совместимое устройство (ключ или встроенный аутентификатор), что может быть недоступно на старых компьютерах.
- Сложность настройки — для использования в корпоративной среде требуется развёртывание серверной инфраструктуры (например, на базе FIDO2-серверов).
- Отсутствие поддержки некоторых протоколов — libfido2 не поддерживает FIDO2/CTAP 2.1 Pre-Flight PIN (PIN-код перед операцией) и некоторые расширения, специфичные для конкретных производителей.
- Проблемы с драйверами — на некоторых дистрибутивах Linux могут возникать конфликты с драйверами USB (например, при использовании
uhidилиhidraw).
Интересные факты
- Библиотека написана на чистом C, что обеспечивает минимальное потребление памяти и высокую производительность.
- Исходный код libfido2 используется в качестве эталонной реализации для тестирования совместимости других FIDO2-библиотек.
- В 2023 году проект был включён в репозиторий пакетов большинства дистрибутивов Linux (Debian, Ubuntu, Fedora, Arch Linux, openSUSE).
- libfido2 поддерживает работу с несколькими аутентификаторами одновременно, что позволяет использовать их в режиме «горячей замены».
Источники
- Официальная документация проекта libfido2 (GitHub, Yubico)
- Спецификации FIDO2 и CTAP (FIDO Alliance)
- Статья «FIDO2: The Future of Authentication» (Yubico Blog, 2018)
- Руководство по использованию libfido2 в OpenBSD (OpenBSD Journal, 2020)
- Код библиотеки на GitHub (Yubico/libfido2)
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →