Passkey без Apple, Google и облаков: делаем собственный аппаратный ключ за 4 евро

Аппаратные ключи безопасности — штука удобная, но дорогая. YubiKey стоит как хороший ужин в ресторане, а Google Titan привязывает вас к облаку. Есть третий путь — собрать свой FIDO2-ключ за 4 евро. И да, это не шутка.
В основе проекта — OpenSK от Google Research и микроконтроллер ESP32. Тот самый чип за 2-3 доллара, который валяется у каждого гика в ящике стола. Он способен на настоящую криптографию. Без облаков, без подписок, без Big Tech.
Почему самодельный ключ лучше покупного?
Готовые решения вроде YubiKey или Nitrokey стоят от 25 до 60 евро. Для энтузиаста — это перебор. К тому же, вы никогда не знаете наверняка, нет ли в закрытой прошивке сюрпризов.
Собирая ключ самостоятельно, вы получаете три вещи:
- Полный контроль. Вы видите каждый байт прошивки и знаете, что внутри.
- Цену. Около 4 евро за ESP32 с USB-разъемом. Это в 10-15 раз дешевле YubiKey.
- Автономию. Ключи генерируются на устройстве и никогда его не покидают. Никакой облачной синхронизации.
Важный момент: такой ключ — не для корпоративного использования. Для личных аккаунтов, тестов и экспериментов он подходит идеально. При желании можно добавить PIN-код или даже биометрию через дополнительный датчик.
Что нужно для сборки?
Минимальный набор — это ESP32 с USB-портом (NodeMCU-32S или ESP32-DevKitC), кабель microUSB или USB-C и компьютер для прошивки. Среда разработки — Rust или готовые бинарники OpenSK. Если хотите компактный форм-фактор, добавьте кнопку (GPIO) и светодиод для индикации. Но это опционально.
Сравните характеристики:
- YubiKey 5 NFC: 50-60 €, есть FIDO2, нет облачной привязки, закрытая прошивка, сертифицированный крипточип.
- Google Titan (FIDO2): 30-40 €, есть FIDO2, есть облачная синхронизация, закрытая прошивка, Secure Element.
- DIY на ESP32 (OpenSK): ~4 €, есть FIDO2, нет облачной привязки, открытая прошивка, встроенный AES/RSA/ECC.
Разница в цене — на порядок. Разница в контроле — колоссальная.
Как это работает: пошаговая инструкция
Мы используем проект OpenSK от Google Research. Он написан на Rust. Не пугайтесь — вам не нужно писать код. Просто выполняйте команды.
Шаг 1. Установите инструменты. Понадобится Rust toolchain и утилита для ESP32.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup target add xtensa-esp32-none-eabihf
cargo install espflash
Шаг 2. Клонируйте репозиторий.
git clone https://github.com/google/OpenSK.git
cd OpenSK
Шаг 3. Настройте конфигурацию (опционально). Отредактируйте файл boards/opensk.toml для своей платы. Можно оставить по умолчанию.
Шаг 4. Соберите прошивку. Процесс компиляции займет 5-10 минут.
make build-esp32
Шаг 5. Прошейте на ESP32. Подключите плату через USB, зажмите кнопку BOOT и запустите:
make flash-esp32
После успешной прошивки ключ готов. При первом подключении он определится как HID-устройство (FIDO). Если ваша плата использует CH340, убедитесь, что драйверы установлены. На Linux всё работает сразу.
Тестирование и личный опыт
Откройте любой сайт, поддерживающий WebAuthn (например, webauthn.io). Выберите «Register» — браузер попросит прикоснуться к контакту. Ваш самодельный ключ будет работать как обычный YubiKey.
В демо-версии можно добавить PIN-код (до 64 символов) для защиты от физического доступа. PIN хранится на самом устройстве.
Личное наблюдение автора. Я собрал такой ключ год назад. Использовал для входа в GitHub, Google (через аккаунт, где отключена синхронизация) и несколько собственных сервисов. Работает стабильно. Единственная проблема — на старых браузерах (Safari до 15) иногда возникали сбои, приходилось переключаться на Chrome или Firefox. За 4 евро это идеальный гаджет для тех, кто не хочет зависеть от облачных провайдеров. Минус — размер: стандартная ESP32-плата больше YubiKey. Но если припаять кнопку и поместить в 3D-печатный корпус, получится почти заводской продукт.
Безопасность и подводные камни
Можно ли использовать DIY-ключ для критически важных аккаунтов? Для email и соцсетей — да, если вы доверяете своей сборке. Для банковских систем — лучше купить сертифицированный ключ с EAL5+.
Можно ли добавить NFC? Да, у ESP32 есть поддержка NFC (ESP32-S3), но OpenSK пока не поддерживает его в полной мере. Придется допиливать самостоятельно.
Что если ключ сломается? Все закрытые ключи хранятся только на устройстве. При поломке доступ к сервисам будет потерян. Обязательно сохраните резервные коды (backup codes), которые выдают все сайты при регистрации Passkey. Это правило действует для любых аппаратных ключей, не только самодельных.
Резюме от автора. Аппаратный ключ Passkey за 4 евро — это реально. Он требует немного времени и технической подготовки, но даёт полную автономию. Без Apple, Google и облаков. Только вы и ваш криптографический чип. Если вы умеете держать паяльник и не боитесь командной строки — это ваш вариант.












