Категория: Доступ и аутентификацияОбновлено 2026-10-18

FIDO2 и WebAuthn (вход с аппаратным ключом)

FIDO2 (Fast IDentity Online 2) это открытый стандарт аутентификации FIDO Alliance, который состоит из браузерного API W3C WebAuthn (Web Authentication) и протокола CTAP (Client to Authenticator Protocol). Аппаратный ключ безопасности или passkey подписывает вход только для одного конкретного сервиса, поэтому такой вход защищён от фишинга. OpenSSH поддерживает FIDO-ключи как типы ecdsa-sk и ed25519-sk.

Что такое FIDO2, WebAuthn, CTAP и U2F

FIDO2 это название двух связанных стандартов. WebAuthn (Web Authentication) это браузерный API консорциума W3C; в аннотации он назван API для создания и использования надёжных, аттестуемых, привязанных к области и основанных на открытых ключах учётных данных. CTAP (Client to Authenticator Protocol) это протокол FIDO Alliance, по которому компьютер или телефон общается с аутентификатором, например с ключом безопасности по USB, NFC или Bluetooth Low Energy. U2F это более раннее поколение той же семьи, теперь его называют CTAP1. CTAP2 умеет работать с устройствами U2F, а в WebAuthn есть раздел об обратной совместимости с U2F.

При регистрации аутентификатор создаёт пару ключей, а сервис хранит только открытый ключ. При входе сервис присылает случайный запрос, и аутентификатор его подписывает. Учётные данные привязаны к одной проверяющей стороне, а в подписанные данные входит origin, поэтому ответ нельзя воспроизвести на другом сайте. Именно поэтому FIDO называют устойчивым к фишингу: поддельный сайт не получает ничего, что можно использовать повторно. Passkey построены на тех же стандартах и могут синхронизироваться между устройствами или быть привязаны к одному.

Как OpenSSH использует FIDO-ключи

В OpenSSH 8.2 добавили поддержку FIDO/U2F через два типа ключей, ecdsa-sk и ed25519-sk (суффикс обозначает типы ключей безопасности FIDO). В примечаниях к выпуску объясняется, что файл закрытого ключа на диске хранит только дескриптор ключа, а настоящий закрытый ключ лежит на токене и не экспортируется. Такой файл бесполезен злоумышленнику, у которого нет физического токена. SSH не использует браузерный API: он подписывает собственный запрос аутентификации тем же устройством.

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

ssh-keygen -t ed25519-sk -O verify-required -C "admin-key-1"
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519_sk myserver

Открытая часть, id_ed25519_sk.pub, добавляется в authorized_keys как любой другой ключ (см. ssh-copy-id). Аппаратная поддержка Ed25519 встречается реже, чем ECDSA, а в примечаниях сказано, что любой токен обязан реализовать ecdsa-sk, поэтому если токен отклоняет первую команду, используйте -t ecdsa-sk. Остальные параметры описаны в статье ssh-keygen.

Подводные камни и последствия для безопасности

Касание токена требуется по умолчанию, а в руководстве ssh-keygen сказано, что sshd отклоняет подписи ключа, созданного с no-touch-required, если это не переопределено параметром в authorized_keys. Не отключайте проверку. Параметр verify-required добавляет PIN при каждом использовании, но поддерживают его не все аутентификаторы. На сервере, согласно руководству sshd_config, PubkeyAuthOptions verify-required не влияет на нефидовские ключи, поэтому обычный ключ, оставшийся в authorized_keys, по-прежнему входит без всякого токена.

Резидентные ключи (-O resident) хранят дескриптор ключа тоже на токене, что удобно при работе с разных компьютеров. В руководстве предупреждается, что это повышает вероятность использования украденного устройства злоумышленником, поэтому сначала задайте PIN. Оба конца должны быть на современном OpenSSH, а клиентская сборка должна содержать FIDO-посредник (для выбора библиотеки в руководстве названы SecurityKeyProvider и SSH_SK_PROVIDER). Токены теряются, поэтому зарегистрируйте второй до того, как будете полагаться на первый.

Место в защите сервера

Файл ключа можно незаметно скопировать с ноутбука или из резервной копии, а FIDO-ключ устраняет эту слабость: одного украденного файла недостаточно. CISA пишет, что единственная широко доступная устойчивая к фишингу аутентификация это FIDO/WebAuthn, и называет такую MFA стандартом, к которому нужно стремиться (страница о MFA теперь помечена как архивная). Для небольшого сервера это означает: сначала аппаратные ключи администраторам, затем для аккаунта хостинга и почтового ящика, через которые можно сбросить всё остальное.

Полный порядок внедрения, включая настройку sshd и последовательность, при которой вы не потеряете доступ, описан в руководстве по двухфакторной аутентификации SSH, а базовый уровень защиты в руководстве по усилению защиты SSH. Если токен потерян или правка конфигурации не удалась, вернуться поможет руководство по восстановлению доступа. FIDO это один из способов обеспечить двухфакторную аутентификацию; вариант с одноразовыми кодами это TOTP.

Связанные термины: Двухфакторная аутентификация (2FA), TOTP, ssh-keygen, Аутентификация по ключу, authorized_keys.

Часто задаваемые вопросы

Как расшифровывается FIDO2?

FIDO означает Fast IDentity Online, так называется альянс FIDO Alliance. FIDO2 это пара стандартов: WebAuthn (браузерный API W3C) и CTAP (протокол между устройством и ключом безопасности).

WebAuthn и FIDO2 это одно и то же?

Не совсем. WebAuthn это веб-API, который используют браузеры и сайты, CTAP определяет общение компьютера с аутентификатором, а FIDO2 это общее название обоих. U2F это более раннее поколение, теперь его называют CTAP1.

Можно ли входить в SSH с аппаратным ключом безопасности?

Да. OpenSSH 8.2 и новее поддерживают FIDO-токены через типы ключей ecdsa-sk и ed25519-sk, которые создаются командой ssh-keygen. Токен должен быть подключён, и при каждом входе его нужно касаться, если вы не выбрали иное.

Почему FIDO называют устойчивым к фишингу?

Учётные данные привязаны к одному origin, и он входит в подписанный ответ, поэтому поддельный сайт не может собрать данные, пригодные для повторного использования. CISA называет FIDO/WebAuthn единственной широко доступной устойчивой к фишингу аутентификацией.

Что делать, если я потерял ключ безопасности?

Вы теряете вход через этот ключ, но другой человек его не получает, потому что закрытый ключ не покидает токен. Заранее зарегистрируйте запасной ключ и узнайте, как попасть в консоль провайдера.

Хотите увидеть, в каком состоянии ваш сервер?

Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.

Получить бесплатную проверку сервераОткрыть Security Lab