Несколько лет назад я озаботился покупкой YubiKey 5 NFC в надежде, что он станет для меня своеобразным ключом от всех дверей. Ожидания оправдались, он успешно трудится каждый день в роли 2FA и снабжает меня одноразовыми кодами TOTP. Но под некоторые задачи мне хотелось иметь отдельные ключи, вот только жаба душила отдавать по 70-80 евро за штуку.

Однажды я наткнулся на проект Pico Keys, который позволяет превратить Raspberry Pi Pico или ESP32-S3 в персональный security key, некую альтернативу Yubikey. С учетом стоимости и доступности, это выглядело как неплохой вариант, а в реальности оказалось еще интереснее. Так что наливайте кофейку и приятного чтения.

Почему аппаратные ключи дорогие

Yubikey 5 series
Yubikey 5 series

Каждый раз, когда я читал описание очередного аппаратного ключа безопасности, меня удивляло то, что производители с гордостью пишут, что-то вроде «Stores up to 24 OTP accounts». Такое ощущение, что мы на заре создания чипов памяти. Сейчас, когда MicroSD-карточка размером с ноготь способна хранить 1 Тб данных — это выглядит как издевательство над здравым смыслом. 

«Голый» секрет TOTP занимает от силы 20 байт. На такой карте их поместилось бы около 50 млрд штук. Даже если щедро посыпать метаданными — счет идет на единицы миллиардов. А тут ключик с пафосом хранит 24. И дело здесь не в том, что производитель пожадничал — в таких устройствах данные находятся в особых защищенных микросхемах — Secure Element (SE). Это принципиально другой тип памяти, где играет роль не себестоимость каждого байта, а иная архитектура с жесткими требованиями к безопасности.

Площадь кристалла отдали в пользу структур безопасности — от металлических сеток, которые детектируют попытку физического вскрытия до разнообразных датчиков и защит. Сама же память создается не на современных техпроцессах, а на старых (90-350 нм вместо 3-5 нм). Плотность меньше, устойчивость больше. Делают это намеренно — так проще обеспечить предсказуемое поведение и доказать работу при сертификации.

Кроме того, любая такая память не просто выполняет свою непосредственную функцию — поверх нее всегда есть значительный объем логики: от шифрования на лету до защиты от глитчинга. Эта логика нередко обходится дороже самих ячеек. Стоит упомянуть и объемы производства: потребительскую flash-память выпускают значительно большими тиражами, и за счет эффекта масштаба каждый байт обходится на порядки дешевле.

Получается, что 90 процентов стоимости такой памяти вы платите не за хранение, а за гарантию того, что даже если ключ у вас украдут и попытаются извлечь секрет в лаборатории — сделать это не получится. Каждую ячейку памяти можно сравнить с небольшим сейфом в бункере под вооруженной охраной. Это хорошо объясняет, почему в современные ключи помещается так мало данных.

Отдельным пунктом идет сертификация. Только одна надпись соответствия Common Criteria EAL5+/EAL6+ или FIPS 140-2/140-3 может стоить для производителя миллионы долларов и годы работы профессионалов. Безопасность защищенного чипа определяется не только тем, что реализовано в кремнии — в случае аппаратного ключа сертифицируется строго определенная конфигурация из hardware, software и firmware. Любое изменение и все — придется заново проходить этот сложный и очень ресурсозатратный процесс.

Склад вместо сейфа

Ключи вроде Yubikey дорогие, но при этом надежные и устойчивые. Проблема лишь в том, что рядовому пользователю это банально не нужно. Он сталкивается с более приземленными вещами — логины, пароли, одноразовые коды. А в 2026 году так и вообще из каждого утюга вываливается форма создания passkey, который волшебным образом решит проблему с авторизацией на любом сайте или сервисе.

Идея отказа от паролей в пользу passkey (читай, аутентификатора под контролем пользователя) — здравая и имеющая право на жизнь. Вот только крупные корпорации увидели в этом отличный момент, чтобы перетащить юзера в свою экосистему, даже если он этого не хочет. В момент генерации passkey сервер получает открытый ключ, а закрытый сохраняется в защищенной области девайса.

Проблема в том, что ради вашего же удобства, смартфон сольет все ваши passkey в облако. Понятно, что везде E2E-шифрование, но это не главное. Если случайно утопишь телефон — не беда, заходи в аккаунт вендора с другого и туда подтянутся все пропуска. Звучит как идеальная схема, но в итоге ключами владеют две крупнейшие корпорации. Вы же теперь обязаны соблюдать правила конкретной экосистемы. Достаточно им удалить или заблокировать аккаунт, и вся ваша цифровая жизнь перестанет вам подчиняться.

Остается только использовать аппаратный ключ. Конечно, если потеряете или сломаете — сами виноваты (второй резервный ключ — маст хэв), зато контроль будет полностью за вами.

А теперь представьте, что вы контекст-маркетолог на фрилансе и ведете несколько десятков рекламных кабинетов. Моей жене этого даже представлять не надо — это ее ежедневная рутина. Мякотка в том, что некоторые, особо параноидальные, сети рассматривают привязку аппаратного ключа не просто как security-фичу для пользователя, а как один из важных признаков того, что на том конце не бот-накрутчик, а реальный человек.

Вот тут как раз самым важным становится не то, что надо защитить данные на аппаратном ключе любой ценой, а просто его привязка. Причем, если на разные рекламные кабинеты привязать один и тот же аппаратный ключ, это может закончится блокировкой. Например, в одном из кабинетов возникла проблема с оплатой или был бан. Система видит, что ваш аппаратный ключ привязан еще и к другим, и вполне может расценить это, как попытку обойти ограничения. Так что они тоже могут быть забанены — настоящая катастрофа, потеря денег и репутации. 

Вывод: лучше иметь много дешевых ключей, которые в любой момент можно перешить или заменить на другие. Yubikey в такую концепцию не попадает — там не меняется идентификатор даже после сброса. Но если взять пару десятков дешевых микроконтроллеров и превратить их в аппаратные ключи с помощью Pico Key, можно будет выделить каждому рекламному кабинету отдельный ключ и при этом не разориться. С учетом смены VID/PID для системы они будут выглядеть разными, поэтому шанс, что это станет сигналом, связывающим кабинеты друг с другом, минимален.

Шейся, контроллер, большой и маленький

Dev-board на базе чипа RP2350
Dev-board на базе чипа RP2350

Вот такие небольшие платы разработки показались мне наиболее оптимальным вариантом. Китайцы продают их пачками по 4 евро за штуку. Форм-фактор позволяет подключать их напрямую в USB-порт без дополнительных кабелей. Распаивать «гребенки», заботливо положенные в комплект, смысла нет.

Кремниевое «сердце»
Кремниевое «сердце»

Сама плата проста до безобразия:

  • микроконтроллер RP2350 (QFN-60), 

  • SPI-флеш память Winbond 25Q128JVPQ объемом 16 МБ, 

  • адресуемый цветной LED-диод, 

  • тактирующий кварц на 12 МГц, 

  • пара кнопок (BOOT и RST), 

  • разъем Qwiic,

  • обвязка питания.

Чтобы превратить плату в аппаратный ключ, нужна прошивка в формате uf2. Доступно три версии: HSM, FIDO и OpenPGP. Проще всего начать с FIDO. 

Зажимаем кнопку BOOT и в этом состоянии втыкаем в USB-порт.

Кнопки BOOT и RST
Кнопки BOOT и RST

Плата даст доступ к флешке с именем RP2350 прямо через проводник. Закидываем туда скачанный файл, после чего она сама перезагрузится и определится уже как два устройства — считыватель смарт-карт и сама смарт-карта:

Пугаться надписи Unknown Smart Card не стоит — дело в том, что по-умолчанию в прошивке заданы VID и PID, не принадлежащие никакому вендору. Это сделано специально, чтобы избежать потенциальных судебных исков. Конечный пользователь же может без проблем перекомпилировать сырцы и прописать туда все, что душе угодно. Например, можно прикинуться ветошью хоть тем же Yubikey:

Самостоятельно скомпилированная прошивка c кастомным VID&PID
Самостоятельно скомпилированная прошивка c кастомным VID&PID

Важно понимать, что изменение того, как девайс представляется системе, не позволяет работать через штатные утилиты производителей. Но ради маскировки на разные ключи можно повесить разные идентификаторы моделей.

Управление

Автор Pico Keys нашел прекрасный способ монетизации своего проекта open source: сам код прошивки открыт, управлять ключом можно через OpenSC CLI. Для гиков это удобно, а вот для простых пользователей не особо, и как раз это лазейка для монетизации. Хотите приложение с GUI — платите за лицензию. Стоимость копии PicoKey App для одного ключа обойдется в 29.49€, а если нужна пара ключей (основной и резервный), то 49.49€. 

Главное окно приложения PicoKey App
Главное окно приложения PicoKey App

В итоге разработчик может зарабатывать и развивать свое детище. А те, кто не боится командной строки, легко справятся и так. 

Установка для Windows:

C:\> winget install opensc

Набор утилит установится в C:\Program Files\OpenSC Project\OpenSC\tools\ при желании можно добавить в PATH.

Полезные команды OpenSC для Pico HSM / PKCS#11:

  • opensc-tool --list-readers — показать подключенные ридеры/токены и проверить, что устройство видится системой.

  • opensc-tool --atr — вывести ATR-карты (полезно для идентификации устройства).

  • pkcs11-tool --list-slots — список слотов PKCS#11 с состоянием (есть ли токен в слоте).

  • pkcs11-tool --list-objects — перечислить объекты на токене (ключи, сертификаты, data-объекты).

  • pkcs11-tool --change-pin --login (или --init-pin) — сменить/инициализировать пользовательский PIN.

У Pico FIDO все проще: в обычной жизни passkey создается через браузер или приложение. OpenSC здесь почти не нужен. Для диагностики FIDO2 используют отдельные утилиты libfido2, которых нет в стандартной установке OpenSC. 

Теперь пару слов о PIN-кодах. На момент написания этой статьи коды следующие:

  • Pico HSM (User PIN / Management PIN) — 648219 / 57621880. При вводе в терминале Management PIN необходимо HEX-представление: 3537363231383830.

  • Pico FIDO (User PIN / Admin PIN) — 123456 / 12345678.

Ну а поскольку мы живем в мире ИИ, я попросил Claude создать кастомный кроссплатформенный TUI для управления всеми возможностями Pico Key:

Дашборд
Дашборд

Все части прошивки имеют открытый исходный код, так что проблем не возникло. Весь проект обошелся в 60к токенов Opus 4.8 с учетом тестов на реальном железе. Получилась удобная и функциональная утилита с TUI в стиле Claude Code (выкладывать пока не буду, ибо еще в статусе PoC):

Управление Passkeys
Управление Passkeys

Удобства ради добавил туда возможность указать путь к файлу или скриншоту с QR-кодом для OTP, а утилита сама его распознает (pyzbar / OpenCV) и добавит как otpauth:// 

Управление OATH
Управление OATH

Заключение

Вот так, накупив несколько десятков микроконтроллеров, я превратил их в дешевые аппаратные ключи. Да, они вовсе не такие крутые и защищенные, как Yubikey, но со всей задачей справляются отлично. Чтобы не прибить их статикой, а также удобно различать — нашел и напечатал разноцветные корпусы на 3D-принтере привет, Doom . Те же SSH-ключи в сервисах можно сохранять с именами по цвету.

Корпус перед сборкой
Корпус перед сборкой

3D модель взял тут. Печатал PETG-пластиком с высотой слоя 0.2мм, получилось отлично. Крышка плотно защелкивается в боковых пазах и фиксирует плату внутри. Кнопки также нажимаются, так что для перепрошивки не придется ничего разбирать.

Как вам такие аппаратные ключики? Купили бы себе? Делитесь своим мнением в комментариях и подписывайтесь на блог МТС, чтобы не пропустить новые статьи.

Комментарии (2)


  1. nukler
    30.06.2026 14:01

    Ни стыда ни совести ни ссылки на git где можно следить за ходом разработки.


    1. daggert
      30.06.2026 14:01

      В тексте ссылка - https://github.com/polhenarejos/pico-fido