
Экспериментальный аутентификатор FIDO2/WebAuthn на RP2040 с packed-аттестацией и документированной совместимостью с Windows/Entra
Экспериментальный открытый инженерный и интероперационный проект аутентификатора FIDO2/WebAuthn на базе RP2040 от Karaaslan Labs.
Статус: инженерно-исследовательский проект. Не сертифицирован FIDO Alliance. Не является коммерческим токеном безопасности с высоким уровнем гарантий.
KL Security Key — это курируемая производная от polhenarejos/pico-fido. Проект исследует, насколько далеко можно продвинуть недорогую плату RP2040 в качестве физического аутентификатора WebAuthn, сохраняя при этом явными идентичность, аттестацию, доказательства валидации и границы доверия.
| Область | Текущий инженерный референс |
|---|---|
| Аппаратное обеспечение | Отладочная плата RP2040 с USB |
| Транспорт | USB FIDO HID |
| Версии CTAP/GetInfo | FIDO_2_0, FIDO_2_1, FIDO_2_3 |
| Присутствие / верификация пользователя | Физическая кнопка + поддержка PIN/UV |
| Аттестация | Packed ES256, x5c, сертификат, специфичный для устройства |
| AAGUID | d9359dc7-6938-5822-b951-006507247d8f |
| Интероперабельность | Windows WebAuthn + локальная для тенанта валидация Microsoft Entra |
| Распространение | Приоритет исходного кода; бинарный релиз прошивки KL отсутствует |
| Защищённый элемент | Отсутствует |
| Сертификация | Не сертифицирован FIDO Alliance |
Проект начался с практического вопроса: может ли недорогая отладочная плата стать пригодным физическим ключом безопасности для реального входа через WebAuthn, не скрывая инженерные компромиссы?
Интересной работой оказалось не просто заставить RP2040 работать с FIDO2. Более сложными частями стали идентичность аутентификатора, физическое присутствие пользователя, аттестация, поведение Windows, воспроизводимые изменения исходного кода, интероперабельность с проверяющей стороной и точное понимание того, что именно доказывают — и чего не доказывают — имеющиеся свидетельства.
MicrosoftCtapHidProvider.U2fProtocol=false.Результат с Entra — это результат интероперабельности, а не сертификация Microsoft или глобальное признание аутентификатора. Точные границы см. в docs/interoperability-case-study.md.
flowchart LR
RP["Relying party / Microsoft Entra"] --> WA["Browser + Windows WebAuthn"]
WA --> CTAP["CTAP2 over USB HID"]
CTAP --> KEY["KL Security Key<br/>RP2040"]
KEY --> AT["Packed ES256 attestation<br/>device-specific key + x5c"]
AT --> ROOT["KL Security Key Root CA"]
Проверенная среда выполнения намеренно узкая: FIDO HID — это интерфейс ключа безопасности; посторонние runtime-интерфейсы в стиле клавиатуры/CCID не входят в референсный профиль KL.
git clone --recurse-submodules https://github.com/karaaslanlabs/kl-security-key.git
cd kl-security-key
export PICO_SDK_PATH=/path/to/pico-sdk
export PICO_TOOLCHAIN_PATH=/path/to/arm-none-eabi-toolchain
./scripts/build-kl-reference.sh
Сборка включает принудительное требование физического присутствия пользователя, runtime-профиль только с FIDO и путь packed-аттестации. Действительные материалы ключа/сертификата аттестации должны быть предоставлены отдельно; приватные ключи аттестации не публикуются и не предоставляются автоматически этим репозиторием.
Этот репозиторий не заявляет:
Прочитайте THREAT-MODEL.md, прежде чем рассматривать референс как что-либо большее, чем инженерно-исследовательский аутентификатор.
| Документ | Назначение |
|---|---|
docs/architecture.md | Runtime-профиль, структура исходного кода и инженерные границы |
docs/attestation-and-pki.md | AAGUID, packed-аттестация и модель PKI |
docs/validation-evidence.md | Свидетельства валидации физического референса и курируемого исходного кода |
docs/interoperability-case-study.md | Свидетельства и ограничения интероперабельности с проверяющей стороной / Microsoft Entra |
docs/windows-webauthn-debugging.md | Рабочий процесс отладки Windows/WebAuthn на основе свидетельств |
THREAT-MODEL.md | Модель угроз и отсутствие заявлений о безопасности |
UPSTREAM.md | Происхождение вышестоящего проекта и изменения в производной |
SECURITY.md | Сообщение об уязвимостях и политика безопасности |
Подмодуль pico-keys-sdk закреплён на известном коммите вышестоящего проекта. Изменения SDK, специфичные для KL, применяются с помощью scripts/apply-sdk-overlay.py, который закреплён на точном коммите и отказывает при неожиданном состоянии исходного кода.
Этот публичный репозиторий намеренно курируется вокруг референсного пути KL Security Key. Посторонние унаследованные исследовательские артефакты и устаревшие вспомогательные средства релиза не входят в публикуемую поверхность KL; происхождение вышестоящего проекта по-прежнему задокументировано в UPSTREAM.md и в истории Git.
Бинарное распространение намеренно не является первоначальной целью публикации, пока требования к идентичности/распространению USB остаются нерешёнными. Исходный код, документация и методология валидации — это основные артефакты.
Публичный корневой сертификат аттестации доступен по адресу certs/KL-Security-Key-Root-CA-v1.cert.pem. Приватные корневые/устройственные ключи никогда не публикуются.