Аппаратный SSH-ключ из Flipper Zero: полная инструкция для Windows, macOS и Linux

Flipper Zero превращается в аппаратный SSH-токен через модуль U2F

Хранить приватные SSH-ключи открытым текстом в папке ~/.ssh (и тем более без парольной фразы) — плохая идея. Любой стилер, вредоносный npm/pip-пакет или случайно утекший бэкап мгновенно скомпрометирует доступ ко всем вашим серверам. Обычно для аппаратной защиты покупают токены вроде YubiKey, но если у вас на столе уже лежит Flipper Zero, тратиться не обязательно.

Встроенный во Flipper модуль U2F позволяет превратить его в полноценный аппаратный криптотокен для OpenSSH. При каждом подключении к серверу на экране девайса будет всплывать запрос, требующий физического нажатия кнопки. Рассказываем, как это устроено «под капотом» и как настроить связку на всех популярных ОС с учётом их подводных камней.

Как это работает (и почему ваш ключ нельзя украсть)

Начиная с версии OpenSSH 8.2, в клиенте и сервере появилась нативная поддержка стандарта FIDO/U2F через специальные типы ключей с суффиксом -sk (Security Key). Поскольку Flipper Zero реализует протокол U2F (CTAP1), он аппаратно поддерживает кривую NIST P-256 и тип ключей ecdsa-sk.

Когда вы создаёте такой ключ, происходит магия стандарта U2F:

  1. На самом компьютере в файле ~/.ssh/id_ecdsa_sk сохраняется не приватный ключ, а так называемый Key Handle (ключевой дескриптор).
  2. Сам криптографический секрет генерируется и остаётся внутри Flipper Zero (в зашифрованном аппаратным чипом анклаве на базе STM32WB55).
  3. Если злоумышленник украдёт файл id_ecdsa_sk с вашего ноутбука, он не сможет подключиться к серверу: без физического ответа от вашего конкретного экземпляра Flipper Zero этот файл представляет собой бесполезный набор байт.

Шаг 1. Подготовка окружения (Windows, macOS, Linux)

Главная причина, по которой пользователи сталкиваются с ошибкой Key enrollment failed: invalid format или device not found — особенности сборки OpenSSH в разных операционных системах. Подготовим систему перед генерацией ключа.

Linux (Ubuntu, Debian, Fedora, Arch)

В современных дистрибутивах Linux всё работает практически из коробки, но нужно убедиться, что установлена библиотека для работы с FIDO-устройствами и прописаны права доступа udev (чтобы не запускать ssh через sudo).

Установите пакеты поддержки FIDO2/U2F:

# Ubuntu / Debian
sudo apt update &&& sudo apt install openssh-client libfido2-1 libpam-u2f

# Fedora
sudo dnf install openssh-clients libfido2

# Arch Linux
sudo pacman -S openssh libfido2

Примечание: Пакет libpam-u2f (или fido2-tools) автоматически добавляет нужные правила udev, чтобы обычный пользователь имел доступ к HID-устройству Flipper Zero. Если после установки ключ не видится без sudo, переподключите кабель или выполните sudo udevadm control --reload-rules &&& sudo udevadm trigger.

macOS (Важный нюанс!)

Apple поставляет в macOS собственный билд OpenSSH (/usr/bin/ssh), в котором намеренно вырезана поддержка внешних драйверов libfido2 и аппаратных ключей. Если вы попробуете создать ключ стандартной утилитой, получите ошибку feature not supported.

Решение — установить полноценный OpenSSH через пакетный менеджер Homebrew:

  1. Установите свежий OpenSSH и библиотеку libfido2:
    brew install openssh libfido2

  2. Проверьте, какой именно ssh запускается в вашей оболочке:
    which ssh

    Путь должен вести в /opt/homebrew/bin/ssh (на чипах Apple Silicon M1/M2/M3/M4) или /usr/local/bin/ssh (на Intel). Если там по-прежнему /usr/bin/ssh, добавьте пути Homebrew в начало переменной PATH в вашем ~/.zshrc:


    echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc

Windows 10 и Windows 11

В Windows есть встроенный клиент OpenSSH, но та версия, что идёт по умолчанию в C:\Windows\System32\OpenSSH\, часто устаревшая и плохо дружит с аппаратными токенами.

  1. Откройте PowerShell или Windows Terminal и обновите официальный пакет OpenSSH от Microsoft через winget:
    winget install Microsoft.OpenSSH.Beta

  2. Закройте и заново откройте терминал, после чего проверьте версию:
    ssh -V

    Версия должна быть 8.9p1 или выше (актуальные релизы — 9.x).

  3. Особенность Windows: Операционная система перехватывает все обращения к FIDO/U2F-устройствам через системное окно Безопасность Windows (Windows Security). При генерации и использовании ключа это окно может появляться на заднем плане (под окном терминала) — обращайте внимание на мигающую иконку щита на панели задач.

Шаг 2. Переводим Flipper Zero в режим токена

Перед началом работы убедитесь, что программа qFlipper на компьютере полностью закрыта (включая иконку в системном трее), иначе она монопольно захватит USB-порт.

  1. Подключите Flipper Zero к компьютеру по кабелю USB-C. (Через Bluetooth режим U2F не работает — требуется прямое проводное подключение).
  2. На самом Flipper зайдите в главное меню → U2F (в кастомных прошивках может находиться по пути Apps → USB → U2F).
  3. На экране появится статус «Connected» и изображение ключа.

Шаг 3. Генерация аппаратного SSH-ключа

Процесс создания ключа одинаков для всех трёх операционных систем.

Важно: Выбирайте тип ключа ecdsa-sk. Более современный ed25519-sk требует протокола FIDO2 (CTAP2), а Flipper Zero работает по классическому протоколу U2F (CTAP1).

Откройте терминал (или PowerShell на Windows) и выполните команду:

ssh-keygen -t ecdsa-sk -f ~/.ssh/id_flipper_sk -C "flipper-zero-u2f"
  1. В консоли появится сообщение:
    Generating public/private ecdsa-sk key pair.
    You may need to touch your authenticator to authorize key generation.

    (На Windows в этот момент всплывёт системное окно с просьбой коснуться ключа безопасности.)

  2. Взгляните на экран Flipper Zero: он завибрирует, и появится надпись «Press OK to register». Нажмите центральную круглую кнопку OK.
  3. Далее терминал предложит ввести парольную фразу (Enter passphrase).
    • Если оставить её пустой, для входа на сервер будет достаточно только подключённого Flipper и нажатия кнопки.
    • Если задать пароль, получится полноценная двухфакторная защита: чтобы воспользоваться ключом, нужно будет и владеть вашим Flipper Zero, и знать пароль от файла-дескриптора.

В результате в папке .ssh появятся два файла:

  • id_flipper_sk.pub — стандартный публичный ключ (его мы отправляем на серверы);
  • id_flipper_sk — файл-дескриптор (Key Handle), который связывает ваш компьютер с секретом внутри Flipper.

Шаг 4. Привязка ключа к серверу и проверка

Требование к серверу всего одно: на нём должен крутиться OpenSSH версии 8.2 или новее (это дефолт для Ubuntu 20.04+, Debian 11+, AlmaLinux/Rocky 9 и всех современных систем). Никаких дополнительных пакетов или драйверов на сервер ставить не нужно!

Отправляем публичный ключ на сервер

На Linux и macOS проще всего использовать стандартную утилиту:

ssh-copy-id -i ~/.ssh/id_flipper_sk.pub user@192.168.1.100

На Windows (в PowerShell) или вручную на любой системе можно добавить содержимое файла id_flipper_sk.pub в конец файла ~/.ssh/authorized_keys на сервере:

type $env:USERPROFILE\.ssh\id_flipper_sk.pub | ssh user@192.168.1.100 "cat >> ~/.ssh/authorized_keys"

Подключаемся!

Убедитесь, что на Flipper открыто приложение U2F, и запустите подключение:

ssh -i ~/.ssh/id_flipper_sk user@192.168.1.100

Терминал замрёт со строкой:

Confirm user presence for key ECDSA-SK SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx

На экране Flipper Zero высветится «Press OK to authenticate». Нажимаем кнопку OK — и мы внутри сервера!

Шаг 5. Автоматизация через ~/.ssh/config

Чтобы каждый раз не прописывать путь к ключу через флаг -i, настроим клиентский конфиг ~/.ssh/config (на Windows он лежит в C:\Users\ИмяПользователя\.ssh\config):

# Глобальное правило или настройка для конкретного хоста
Host prod-server
    HostName 192.168.1.100
    User root
    IdentityFile ~/.ssh/id_flipper_sk
    IdentitiesOnly yes

Теперь достаточно набрать в терминале ssh prod-server, нажать центральную кнопку на Flipper Zero — и сессия открыта.

Бонус для тех, кто не любит нажимать кнопку каждые 2 минуты: если при генерации ключа (ssh-keygen -O no-touch-required ...) и в authorized_keys на сервере перед ключом указать опцию no-touch-required, сервер не будет требовать нажатия кнопки (достаточно того, что Flipper подключён к USB), но для максимальной безопасности оставлять физическое подтверждение настоятельно рекомендуется.

Эксплуатация: как работать с нескольких ПК и делать бэкап

У архитектуры U2F на Flipper Zero есть две особенности, о которых важно помнить в повседневной работе:

  1. Использование одного Flipper на разных компьютерах (дом / работа): так как протокол U2F не поддерживает «резидентные» (хранимые целиком внутри токена) ключи FIDO2, при переходе за другой ноутбук просто скопируйте туда оба файла — id_flipper_sk и id_flipper_sk.pub. Вы можете даже закинуть файл id_flipper_sk прямо на SD-карту самого Flipper, чтобы он всегда был под рукой. Без вашего устройства этот файл абсолютно безопасен.
  2. Резервное копирование секрета Flipper Zero: все данные приложения U2F хранятся на microSD-карте вашего Flipper в системной папке /ext/u2f/ (файлы key.u2f и счётчик cnt.u2f). Сам файл key.u2f зашифрован уникальным аппаратным ключом конкретного микроконтроллера вашего Flipper (на другом Flipper он не заработает), но обязательно сохраните копию папки /ext/u2f/ через qFlipper на компьютер. Если ваша microSD-карта выйдет из строя, вы сможете просто закинуть эти два файла на новую флешку и сохранить доступ ко всем серверам и сайтам.

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *