Технология passkey. Реализация passless

2026-07-04 · 5 мин. для прочтения
blog computer-science

Технология passkey. Реализация passless.

Содержание

1 Общая информация

1.1 Функционал

  • Эмулирует виртуальное FIDO2‑устройство (например, YubiKey) через интерфейс /dev/uhid.
  • Предоставляет клиентскую утилиту для управления учётными данными (создание, удаление, список).

1.2 Режимы

  • Фоновый сервис – виртуальный токен, доступный броузерам и приложениям через WebAuthn.
  • Командная строка – управление ключами и PIN-кодом.

2 Другие платформы

3 Установка

3.1 Gentoo

3.2 Arch Linux

yay -S passless

4 Настройка

4.1 Конфигурационный файл

  • Конфигурационный файл по умолчанию: /etc/passless/config.toml.

  • Локальная конфигурация для конкретного пользователя: ~/.config/passless/config.toml.

  • Пример файла конфигурации:

    # Настройки PIN-кода
    [pin]
    # enforcement = "optional" | "required" | "disabled"
    enforcement = "optional"   # "optional" – PIN запрашивается только если задан
    min_length = 4             # минимальная длина PIN
    max_retries = 8            # число попыток ввода до блокировки
    
    # Бэкенд хранения ключей
    # backend = "soft" | "tpm" | "pass"
    # "soft" – ключи хранятся в зашифрованном файле (пароль от PIN)
    # "tpm" – использует аппаратный TPM 2.0
    # "pass" - использовать pass
    backend = "pass"
    
    # Путь к хранилищу учётных данных (по умолчанию ~/.local/share/passless/credentials.db)
    # storage_path = "/home/user/.local/share/passless/credentials.db"
    
    # Настройки логирования
    # log_level = "info"   # info, debug, warn, error
    

4.2 Модуль ядра

  • Убедитесь, что модуль ядра uhid загружен (если он не в ядре):

    lsmod | grep uhid
    
  • Если нет, то загрузите модуль:

    sudo modprobe uhid
    

4.3 Права пользователя

  • Пользователь должен быть в группе fido (для доступа к /dev/uhid).
  • Добавьте себя в группу:
    sudo usermod -aG fido $USER
    

4.4 Настройка службы systemd

  • Запустите пользовательскую службу:

    systemctl --user enable passless.service
    systemctl --user start passless.service
    
  • Проверьте статус:

    systemctl --user status passless.service
    
  • Если служба не запускается, посмотрите логи:

    journalctl --user -u passless.service -f
    
  • После запуска службы и задания PIN броузеры (Chrome, Firefox, Edge) автоматически увидят виртуальное устройство при попытке зарегистрироваться или войти через WebAuthn.

4.5 Переключение между бэкендами

  • При смене бекэнда измените параметр backend в конфиге и выполните повторную инициализацию.
  • При смене бэкенда старые учётные данные не мигрируют автоматически.

4.6 Настройка pin-кода

  • Перед первым использованием нужно задать pin.

  • Сделайте это через клиентскую утилиту:

    passless client pin set <PIN>
    
  • Необходимо ввести pin-код (не менее 4 символов по умолчанию).

  • После этого pin будет использоваться для подтверждения операций (если в конфиге enforcement = "required" или "optional", но PIN задан).

  • Изменить pin-код:

    passless client pin change <OLD_PIN> <NEW_PIN>
    

4.7 Проверка работоспособности

4.7.1 Проверить, видит ли система виртуальное устройство

passless client devices
  • Должен вывести список устройств.

4.7.2 Проверить, что устройство распознаётся как FIDO2

  • Можно использовать броузер или утилиту fido2-token (из пакета sys-auth/libfido2):

    fido2-token -L
    
  • В выводе должно появиться устройство Virtual FIDO2 Authenticator.

4.8 Управление учётными данными

  • Список всех ключей:

    passless client list
    
  • Удалить ключ по ID:

    passless client delete <credential-id>
    

4.9 Работа с TPM

  • Укажите в конфигурационном файле backend = "tpm".

  • Все учётные данные будут защищены аппаратным TPM 2.0, а PIN будет использоваться только для разблокировки доступа к TPM-ключу.

  • Требования:

    • Наличие TPM 2.0 и включение его в ядре.
    • Пакет app-crypt/tpm2-tss (для Gentoo).
  • После смены бэкенда нужно пересоздать хранилище (оно несовместимо).

  • Сделайте бэкап старых ключей (если есть) и переинициализируйте:

passless

4.10 Поддержка pass

  • passless может хранить FIDO2-учётные данные (passkey) непосредственно в хранилище pass.
  • Преимущества:
    • Единое хранилище: пароли и passkey лежат в одном месте.
    • Шифрование GPG: все данные надёжно зашифрованы вашим GPG-ключом.
    • Синхронизация через Git: можно синхронизировать passkey между устройствами так же, как и обычные пароли.

4.10.1 Настройка бэкенда pass в passless

  • Сгенерируйте файл конфигурации:

    mkdir -p ~/.config/passless
    passless config print > ~/.config/passless/config.toml
    
  • Отредактируйте файл ~/.config/passless/config.toml и укажите бэкенд pass:

    # --- Выбор бэкенда хранилища ---
    # backend = "soft"       # по умолчанию — локальный файл (не рекомендуется)
    backend = "pass"         # использовать pass (рекомендуется)
    
    # --- Настройки PIN-кода (остаются без изменений) ---
    [pin]
    enforcement = "optional"
    min_length = 4
    max_retries = 8
    
  • passless будет искать хранилище pass в стандартном месте (~/.password-store).

  • Если оно расположено в другом каталоге, укажите путь через переменную окружения PASSWORD_STORE_DIR или в файле конфигурации.

  • Если ваше хранилище pass находится не в ~/.password-store, укажите путь в файле конфигурации:

    backend = "pass"
    
    [pass]
    path = "/путь/к/вашему/.password-store"
    

4.10.2 Инициализация хранилища passless

  • После смены бэкенда на pass необходимо инициализировать хранилище.
  • Если у вас уже были созданы учётные данные с другим бэкендом (soft), они не будут перенесены автоматически.
  • Рекомендуется сделать бэкап или начать с чистого состояния.
  • Инициализация хранилища passless:
    passless
    

4.10.3 Проверка работы

  • Посмотрите список учётных данных (пока пустой):
    passless client list
    

4.10.4 Синхронизация между устройствами

  • Благодаря использованию pass и Git вы можете синхронизировать свои FIDO2-ключи между компьютерами.
  • Настройте синхронизацию хранилища pass через git.
  • На втором устройстве установите passless, настройте конфиг на бэкенд pass и выполните passless init.
  • passless автоматически подхватит все существующие учётные данные из синхронизированного хранилища.
Дмитрий Сергеевич Кулябов
Authors
Профессор кафедры теории вероятностей и кибербезопасности
Работаю профессором на кафедре теории вероятностей и кибербезопасности Российского университета дружбы народов им. Патриса Лумумбы. Научные интересы относятся к области теоретической физики и математического моделирования.