Короткий ответ: это не конкурирующие технологии, а разные уровни одной системы. FIDO2 — это общий стандарт беспарольной аутентификации, который состоит из двух частей: протокола WebAuthn, работающего в браузере и веб-приложении, и протокола CTAP, по которому браузер общается с аутентификатором — ключом, смартфоном или встроенным в устройство модулем. То есть WebAuthn — это веб-часть FIDO2, а не его альтернатива.
Путаница возникает потому, что оба названия часто используют как синонимы, а в статьях и документации их смешивают. В этом материале разберём, что именно делает каждый протокол, как они взаимодействуют, чем FIDO2 отличается от более старого стандарта FIDO U2F, и что это значит на практике — для разработчика, который внедряет аутентификацию, и для пользователя, который хочет понять, что происходит, когда он входит на сайт по отпечатку пальца или USB-ключу.
- Зачем вообще понадобились FIDO2 и WebAuthn
- Из чего состоит FIDO2: два протокола
- WebAuthn — веб-часть
- CTAP — транспортная часть
- Сравнительная таблица: кто за что отвечает
- Чем FIDO2 отличается от FIDO U2F
- Ключевые понятия WebAuthn, которые стоит знать
- Платформенные и перемещаемые аутентификаторы
- Резидентные ключи и discoverable credentials
- Проверка пользователя: user verification
- Аттестация
- Что это значит для пользователя
- Что это значит для разработчика и бизнеса
- Типичные заблуждения
- Практические рекомендации
Зачем вообще понадобились FIDO2 и WebAuthn
Классическая аутентификация по паролю имеет две фундаментальные проблемы. Первая — пароли можно украсть: через фишинг, утечки баз данных, вредоносное ПО или подбор. Вторая — люди выбирают предсказуемые пароли и повторяют их на разных сайтах, поэтому одна утечка компрометирует сразу несколько аккаунтов.
Идея FIDO (Fast IDentity Online) — убрать общий секрет из уравнения. Вместо пароля, который сервер знает и хранит, используется пара криптографических ключей: приватный ключ остаётся на устройстве пользователя и никогда его не покидает, а публичный ключ регистрируется на сервере. При входе сервер присылает запрос (challenge), устройство подписывает его приватным ключом, а сервер проверяет подпись публичным. Подделать подпись, не имея приватного ключа, вычислительно невозможно, а сам приватный ключ физически нельзя вытащить из аутентификатора.
Дополнительное преимущество — устойчивость к фишингу. Приватный ключ привязан к конкретному домену (origin), и аутентификатор просто откажется подписывать запрос, пришедший с поддельного сайта, даже если тот визуально неотличим от настоящего. Это принципиальное отличие от одноразовых кодов из SMS и push-уведомлений, которые пользователь может ввести или подтвердить на фишинговой странице.
Из чего состоит FIDO2: два протокола
FIDO2 — это зонтичное название стандарта, принятого альянсом FIDO Alliance совместно с консорциумом W3C. Внутри него два протокола, каждый со своей зоной ответственности.
WebAuthn — веб-часть
Web Authentication API (WebAuthn) — это интерфейс на уровне браузера и веб-приложения. Он определяет, как сайт запрашивает у браузера создание учётных данных при регистрации и как происходит проверка при входе. Разработчик вызывает функции вроде navigator.credentials.create() для регистрации и navigator.credentials.get() для аутентификации, а браузер берёт на себя взаимодействие с аутентификатором.
Важно понимать: WebAuthn сам не умеет «разговаривать» с USB-ключом или модулем устройства. Он формирует запрос и получает ответ, но физическую передачу данных выполняет второй протокол.
CTAP — транспортная часть
Client to Authenticator Protocol (CTAP) описывает, как браузер или операционная система обмениваются данными с самим аутентификатором — по USB, NFC или Bluetooth. Актуальная версия стандарта — CTAP2, а CTAP2.1 добавил, в частности, управление PIN-кодом и некоторые функции корпоративного управления ключами. Для совместимости многие аутентификаторы поддерживают и старый CTAP1 (он же U2F-протокол), о котором речь ниже.
Упрощённо цепочка при входе на сайт выглядит так:
- Сайт через JavaScript вызывает WebAuthn API и передаёт браузеру параметры запроса, включая домен и challenge.
- Браузер через CTAP передаёт запрос аутентификатору — USB-ключу, смартфону или платформенному модулю.
- Аутентификатор запрашивает локальное подтверждение пользователя: отпечаток пальца, PIN, распознавание лица или нажатие кнопки на ключе.
- Аутентификатор подписывает challenge приватным ключом и возвращает подпись.
- Браузер передаёт подпись сайту, сервер проверяет её сохранённым публичным ключом и пускает пользователя.
Сравнительная таблица: кто за что отвечает
| Компонент | Уровень работы | Кто с ним взаимодействует | Типичные задачи |
|---|---|---|---|
| FIDO2 | Общее название стандарта | Не самостоятельный протокол, а совокупность | Обозначение всей экосистемы беспарольного входа |
| WebAuthn | Браузер и веб-приложение | Разработчик сайта, сервер аутентификации | Регистрация учётных данных, формирование и проверка запросов |
| CTAP | Связь с аутентификатором | Браузер, ОС, сам аутентификатор | Передача запросов по USB, NFC, Bluetooth, локальная проверка пользователя |
Из этой схемы следует практический вывод: когда говорят «сайт поддерживает FIDO2», технически имеется в виду, что сайт использует WebAuthn и работает с CTAP-совместимыми аутентификаторами. Отдельного «включения FIDO2» на сервере не существует — внедряется именно WebAuthn.
Чем FIDO2 отличается от FIDO U2F
Вторая частая причина путаницы — старый стандарт U2F (Universal 2nd Factor), появившийся раньше. Это важно различать, потому что возможности и сценарии применения у них разные.
- U2F — только второй фактор. Пользователь сначала вводит пароль, затем прикладывает USB-ключ для подтверждения. Без пароля вход невозможен. Протокол работает поверх CTAP1.
- FIDO2 (WebAuthn + CTAP2) — поддерживает полноценный беспарольный вход. Аутентификатор может быть единственным фактором: пароль вообще не используется, а его роль играет локальная биометрия или PIN.
При этом U2F-ключи в большинстве случаев продолжают работать с сайтами, поддерживающими WebAuthn, — через режим обратной совместимости. Но обратное неверно: возможности беспарольного входа, резидентные ключи и проверка пользователя на старом U2F-протоколе недоступны.
Ключевые понятия WebAuthn, которые стоит знать
Чтобы осознанно выбирать настройки и аутентификаторы, полезно разобраться в нескольких терминах стандарта.
Платформенные и перемещаемые аутентификаторы
Платформенный аутентификатор встроен в устройство: Touch ID и Face ID на устройствах Apple, Windows Hello на ПК, биометрические модули Android. Такой ключ нельзя перенести на другое устройство — он привязан к железу.
Перемещаемый (roaming) аутентификатор — отдельное устройство: USB-ключ, смартфон, используемый через Bluetooth. Его можно носить с собой и применять на разных компьютерах.
Выбор между ними — это компромисс между удобством и риском потери доступа. Платформенный аутентификатор всегда под рукой, но если устройство сломано или потеряно, доступ к аккаунту теряется, если не зарегистрирован запасной способ входа. Перемещаемый ключ живёт независимо от телефона и ноутбука, но его тоже можно потерять, поэтому для критичных аккаунтов разумно регистрировать минимум два аутентификатора.
Резидентные ключи и discoverable credentials
В базовом режиме WebAuthn сервер сам решает, какой ключ использовать: при входе пользователь сначала вводит имя аккаунта, и сервер указывает аутентификатору нужный идентификатор ключа. Резидентные (резидентные в памяти аутентификатора) учётные данные, в новой терминологии — discoverable credentials, хранятся прямо в аутентификаторе. Это позволяет делать usernameless-вход: пользователь выбирает на экране входа опцию «войти по ключу», и аутентификатор сам показывает, для каких сайтов у него есть учётные данные.
Ограничение — объём памяти: количество резидентных учётных данных на одном ключе ограничено и зависит от модели устройства, поэтому точное число нужно уточнять в характеристиках конкретного аутентификатора.
Проверка пользователя: user verification
Стандарт различает два уровня подтверждения. User presence — простое доказательство, что человек физически присутствует: нажал кнопку на ключе или коснулся датчика. User verification — более строгая проверка личности: биометрия или PIN. Для входа в соцсеть достаточно первого уровня, а для подтверждения платежа или доступа к корпоративной системе обычно требуется второй. Требуемый уровень задаёт сервер в параметрах запроса.
Аттестация
При первой регистрации аутентификатор может передать серверу аттестационное свидетельство — подписанные производителем данные о модели устройства. Это позволяет, например, корпорации разрешить регистрацию только сертифицированных ключей определённых моделей. Для обычных сайтов аттестацию часто отключают, поскольку она упрощает отслеживание пользователя между сайтами, и стандарт это учитывает.
Что это значит для пользователя
Если вы не разработчик, вся описанная механика остаётся невидимой. С практической точки зрения важно следующее.
- Поддержка WebAuthn уже встроена во все актуальные браузеры и основные операционные системы, поэтому отдельная установка не требуется.
- Вход по ключу или биометрии устойчив к фишингу в отличие от SMS-кодов: браузер привязывает учётные данные к настоящему домену, и на поддельном сайте аутентификация просто не сработает.
- Перед включением входа по ключу зарегистрируйте запасной способ доступа — второй аутентификатор или резервные коды восстановления. Иначе потеря устройства означает потерю аккаунта.
- Если сайт предлагает «вход по passkey» — это тот же WebAuthn: passkey (пассключ) — это маркетинговое название синхронизируемых учётных данных FIDO2, которые хранятся в связке ключей iCloud, менеджере паролей Google или другом совместимом хранилище и переносятся между устройствами пользователя.
Что это значит для разработчика и бизнеса
Для команды, которая планирует внедрение, различие уровней имеет прямые последствия.
Реализуется именно серверная поддержка WebAuthn: endpoints регистрации и аутентификации, хранение публичных ключей и метаданных учётных данных, проверка origin и challenge. Существуют готовые серверные библиотеки для основных языков и библиотеки для клиентской части, что заметно снижает порог входа по сравнению с самостоятельной реализацией криптографии.
Ключевые проектные решения, которые придётся принять:
- Режим входа. Двухфакторная схема с паролем плюс ключ (проще внедрить и проще мигрировать пользователей) или полностью беспарольная схема (сильнее безопасность, но требует продуманного восстановления доступа).
- Требуемый уровень проверки пользователя. Определяется чувствительностью системы: для финансовых операций — user verification, для обычного входа достаточно user presence.
- Политика аутентификаторов. Разрешать ли только платформенные, только аппаратные ключи или всё; нужна ли аттестация для корпоративного контроля устройств.
- Процедура восстановления. Что происходит при потере единственного ключа: резервные коды, второй зарегистрированный аутентификатор, проверка через службу поддержки. Это самое слабое место любой беспарольной системы, и его нужно проектировать заранее, а не после первых обращений пользователей.
Отдельно стоит учитывать UX-ограничение: WebAuthn по определению работает в браузере. Для нативных мобильных приложений существуют платформенные API, построенные на тех же принципах, но это отдельные интерфейсы, а не сам WebAuthn.
Типичные заблуждения
- «WebAuthn и FIDO2 — это конкуренты, нужно выбрать одно». Выбирать нечего: WebAuthn — обязательная часть FIDO2, они работают только вместе.
- «FIDO2 — это только USB-ключи». Нет: аутентификатором может быть встроенный модуль ноутбука, смартфон, синхронизируемый пассключ в менеджере паролей.
- «Биометрия хранится на сервере». Нет: отпечаток или геометрия лица обрабатываются только локально на устройстве, сервер получает лишь криптографическую подпись.
- «Вход по ключу полностью исключает блокировку аккаунта». Нет: при потере всех зарегистрированных аутентификаторов и отсутствии резервных кодов восстановление зависит от политики конкретного сервиса и может быть долгим или невозможным.
Практические рекомендации
Если вы пользователь и хотите усилить защиту аккаунтов, порядок действий простой: проверьте в настройках безопасности нужных сервисов раздел двухфакторной аутентификации — если там есть опции «ключ безопасности», «passkey» или «вход по биометрии», значит, сервис поддерживает FIDO2. Зарегистрируйте основной и запасной аутентификатор, сохраните резервные коды и только затем отключайте менее защищённые методы вроде SMS-кодов.
Если вы планируете внедрение в продукте, начните с определения режима (второй фактор или полный отказ от паролей) и процедуры восстановления доступа. Затем выберите серверную библиотеку WebAuthn с активной поддержкой и протестируйте сценарии на реальных аутентификаторах, которые используют ваши пользователи: платформенные модули, смартфоны, аппаратные ключи. Поведение может отличаться в зависимости от браузера и операционной системы, поэтому проверка на целевых платформах — обязательный этап, а не опция.
Главный ориентир для запоминания: FIDO2 — это стандарт целиком, WebAuthn — его браузерный протокол, CTAP — канал связи с аутентификатором. Когда вы входите на сайт по отпечатку пальца или ключу, работают все три уровня одновременно.
