
Экспериментальный аутентификатор FIDO2/WebAuthn на RP2040 с packed-аттестацией и документированной совместимостью с Windows/Entra
Экспериментальный открытый инженерный и интероперабельный проект аутентификатора FIDO2/WebAuthn на RP2040 от Karaaslan Labs.
Статус: инженерно-исследовательский проект. Не сертифицирован FIDO Alliance. Не является коммерческим высоконадёжным токеном безопасности.
Границы доказательной базы: приведённые ниже наблюдения на реальном устройстве относятся к замороженной версии v5.2. Работы по усилению безопасности в v5.3 выполнялись только вне устройства и не были установлены или проверены на физическом эталоне.
KL Security Key — это курируемая производная от polhenarejos/pico-fido. Проект исследует, насколько далеко можно продвинуть недорогую плату RP2040 в качестве физического аутентификатора WebAuthn, сохраняя при этом явными идентичность, аттестацию, доказательства валидации и границы доверия.
| Область | Замороженный физический эталон v5.2 |
|---|---|
| Аппаратное обеспечение | Отладочная плата 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 |
Сборочный скрипт исходного эталона в ветке main выбирает -DPICO_BOARD=pico в scripts/build-kl-reference.sh, ориентируясь на стандартную конфигурацию платы Raspberry Pi Pico с 2 МиБ внешней флеш-памяти. Изолированный сборщик v5.3 вне устройства также выбирает -DPICO_BOARD=pico; его валидатор выходного UF2 проверяет адресное окно флеш-памяти Pico размером 2 МиБ. Это ограничения исходного кода/сборки, а не физическая валидация каждой платы RP2040.
Другие платы RP2040 могут иметь иную ёмкость флеш-памяти или конфигурацию платы. В upstream-проекте Pico FIDO issue #278 описан сбой при первой операции WebAuthn на плате с большей флеш-памятью, когда заданный при компиляции лимит флеш-памяти прошивки не соответствовал её фактической разметке во время выполнения. Эта находка upstream не является воспроизведённым сбоем KL Security Key, но она иллюстрирует, почему одного лишь совпадения чипа RP2040 недостаточно как доказательства совместимости.
Не следует предполагать, что эталонная прошивка KL работает на произвольных платах RP2040, или прошивать устройство, основываясь лишь на успешной сборке или корректной структуре UF2. Здесь не заявляется ни совместимость с альтернативными платами, ни новые аппаратные испытания, ни распространение бинарной прошивки. Замороженный физический эталон v5.2 не изменялся.
Проект начался с практического вопроса: может ли недорогая отладочная плата стать пригодным физическим ключом безопасности для реального входа через WebAuthn, не скрывая инженерных компромиссов?
Интересной оказалась не сама задача заставить RP2040 работать с FIDO2. Более сложными частями стали идентичность аутентификатора, физическое присутствие пользователя, аттестация, поведение в Windows, воспроизводимые изменения исходного кода, интероперабельность с проверяющей стороной и точное понимание того, что доказательства действительно доказывают — а что нет.
Результаты в этом разделе получены на сохранённом устройстве v5.2 и не должны приписываться более поздним версиям исходного кода или экспериментальным сборкам прошивки. См. docs/validation-evidence.md для замороженного SHA-256 файла UF2 и границ тестирования.
MicrosoftCtapHidProvider.U2fProtocol=false.Результат Entra — это результат интероперабельности, а не сертификация Microsoft или глобальное признание аутентификатора. Точные границы см. в docs/interoperability-case-study.md.
Текущее усиление HID/APDU/OTP отслеживается в Draft PR #7. Оно включает путь интеграции SDK на основе патчей, регрессионные тесты на стороне хоста и локальные доказательства изолированной сборки ARM. Эти проверки не являются тестом на реальном устройстве, полным тестом соответствия FIDO, сертификацией или производственным релизом. GitHub Actions выполняет тесты хоста/исходного кода и проверки публикации; полные сборки ARM проверены локально, а не в GitHub Actions.
Ветка main и её эталонная сборка не включают автоматически неслитые патчи v5.3. Для актуальных экспериментальных доказательств и нерешённых блокеров используйте PR #7, а не считайте исторические хеши UF2 или отдельные пройденные тесты последним статусом оборудования. Ни один бинарный файл прошивки из этой работы не предлагается для скачивания или прошивки.
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 — это интерфейс ключа безопасности; не связанные с ним интерфейсы среды выполнения в стиле клавиатуры/CCID не входят в эталонный профиль KL.
maingit 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
Сборка main включает принудительную проверку физического присутствия пользователя, runtime-профиль только с FIDO и путь packed-attestation; это не сборка несмёрженных изменений v5.3. Действительный материал ключей/сертификатов аттестации должен быть предоставлен отдельно; закрытые ключи аттестации не публикуются и не предоставляются автоматически этим репозиторием. Сборка UF2 не даёт разрешения на прошивку устройства.
Этот репозиторий не заявляет о: