Новые стандарты для беспарольной аутентификации: как они работают
На прошлой неделе были опубликованы два новых стандарта для беспарольной аутентификации на сайтах, в мобильных и веб-приложениях: WebAuthn API и CTAP. Оба были одобрены Microsoft, Mozilla и Google.
Подробнее об них расскажем ниже.
WebAuthn стал результатом коллаборации консорциумов W3C и FIDO Alliance. Первый занимается внедрением технологических стандартов для интернета, а второй — разработкой и совершенствованием надежных стандартов аутентификации в сети.
Работа над стандартом WebAuthn началась еще в 2015 году, когда FIDO передали группу спецификаций FIDO2 консорциуму W3C. Последовавшие версии FIDO 2.0 Web API позволяютпользователям залогиниться в сервисах Google, Facebook, Dropbox, GitHub и другим, используя секретные токены.
WebAuthn работает по тем же принципам, что и FIDO 2.0 Web API, однако поддерживает множество других способов аутентификации. Новый стандарт дает пользователям возможность идентифицировать себя в сетевых приложениях и на сайтах по отпечатку пальца, лицу, сетчатке глаза и другим биометрическим показателям.
Также FIDO Alliance был разработан новый протокол аутентификации CTAP (Client-to-Authenticator Protocol), позволяющий идентифицировать пользователей помощью внешних ключей безопасности (например, USB-ключей) или мобильных устройств.
Стандарты уже утвердили представители Microsoft, Apple, Google, PayPal и др. Это означает, что вскоре их начнут интегрировать в ИТ-экосистему. В частности, консорциум W3C уже призвал разработчиков начать работу над реализациями WebAuthn.
/ Flickr / Christiaan Colen / CC
Принцип работы WebAuthn
Последовательность действий пользователя при аутентификации с помощью нового стандарта следующая:
- Пользователь через компьютер или ноутбук заходит на сайт example.ru и видит опцию «Войти с помощью телефона».
- Пользователь выбирает эту опцию и получает сообщение от браузера «Пожалуйста, выполните вход на своем телефоне».
- На телефон приходит уведомление «Войти на сайт example.ru».
- При нажатии на уведомление появляется список аккаунтов, из которого выбирается нужный.
- Далее, идет запрос авторизации (отсканировать палец, ввести PIN-код и т. д.), и в случае успеха сайт открывается на компьютере/ноутбуке.
Данные входа принадлежат пользователю, а управляются аутентификатором, с которым через браузер и ОС взаимодействует сервис, использующий WebAuthn. С помощью скриптов выполняются операции создания новых данных для входа или реализуется аутентификация по уже существующим. Скрипты не имеют доступа к данным пользователя, а только получают информацию о них в виде объектов.
В основе стандарта лежат два базовых метода, отвечающих за регистрацию и вход в систему: navigator.credentials.create() и navigator.credentials.get(). С их помощью WebAuthn регистрирует данные входа (credentials) на сервере, а затем используют их для проверки «подлинности» пользователя.
- Navigator.credentials.create() создает реквизиты доступа либо при регистрации аккаунта, либо для ассоциации новой асимметричной пары ключей с уже существующим аккаунтом.
- Navigator.credentials.get() использует уже известные реквизиты доступа для аутентификации на сервисе.
Оба метода требуют защищенного соединения (например, https). По сути, во время работы они получают от сервера длинное число, которое называется challenge, а затем передают его обратно, подписав закрытым ключом. Это доказывает серверу, что пользователь имеет необходимый для аутентификации закрытый ключ. Поэтому раскрывать дополнительные секреты по сети нет необходимости.
При этом данные пользователей для входа ассоциируются с уникальным ID. Этот ID затем передается клиентом аутентификатору при каждой операции, чтобы убедиться, что все проходит исключительно в рамках идентифицированного сервиса.
О протоколе CTAP
Протокол CTAP концептуально состоит из трех уровней: Authenticator API, Message Encoding и Transport-specific Binding.
На уровне абстракции Authenticator API, каждая операция определяется как API-вызов — принимает входные параметры и возвращает результат (или ошибку). Здесь используются следующие методы: authenticatorMakeCredential для генерации новых входных данных, authenticatorGetAssertion для подтверждения аутентификации и authenticatorCancel для отмены всех текущих операций.
На уровне Message Encoding осуществляется формирование и шифрование всех запросов к Authenticator API. Хост должен создать и зашифровать запрос и отправить его аутентификатору с использованием выбранного транспортного протокола.
Что касается уровня Transport-specific Binding, то здесь запросы и ответы передаются внешним аутентификаторам с использованием USB, NFC, Bluetooth и др.
Кто внедряет
В 60-м релизе Firefox и 67-м релизе Chrome (выходят в мае) будет поддержка WebAuthn. Microsoft еще в феврале анонсировали эту спецификацию в браузере Edge и Windows Hello, встроенной системе проверки подлинности учетных данных.
В компаниях убеждены, что нововведения в браузерах позволят повысить защиту от фишинга, атак посредника (MITM) и атак повторного воспроизведения.
Apple пока еще никак не комментировали поддержку стандарта в Safari, однако часть её инженероввходит в состав рабочей группы WebAuthn. Поэтому можно ожидать, что новости о внедрении новых стандартов появятся в скором времени.
Майкл Джонс (Michael Jones), директор по партнерским отношениям Microsoft и один из редакторов спецификации WebAuthn, отметил: «Внедрение WebAuthn это большой шаг к практичной, прочной и надежной в области сохранения аутентификационных данных в сети».