Веб-аутентификация ( WebAuthn ) — это веб-стандарт , опубликованный Консорциумом Всемирной паутины (W3C). [1] [2] [3] WebAuthn — это основной компонент проекта FIDO2 под руководством Альянса FIDO . [4] Цель проекта — стандартизировать интерфейс для аутентификации пользователей в веб-приложениях и службах с использованием криптографии с открытым ключом . Учетные данные WebAuthn (которые сами по себе являются учетными данными FIDO), доступные на нескольких устройствах, обычно называются ключами доступа . [5]
На стороне клиента поддержка WebAuthn может быть реализована различными способами. Базовые криптографические операции выполняются аутентификатором , который является абстрактной функциональной моделью, которая в основном независима от того, как управляется ключевой материал. Это позволяет реализовать поддержку WebAuthn исключительно в программном обеспечении, используя доверенную среду выполнения процессора или доверенный платформенный модуль (TPM). Конфиденциальные криптографические операции также могут быть выгружены на перемещаемый аппаратный аутентификатор, к которому, в свою очередь, можно получить доступ через USB , Bluetooth Low Energy или ближнюю бесконтактную связь (NFC). Перемещаемый аппаратный аутентификатор соответствует протоколу FIDO Client to Authenticator Protocol (CTAP), [6] что делает WebAuthn фактически обратно совместимым со стандартом FIDO Universal 2nd Factor (U2F). [7]
Как и устаревший U2F, веб-аутентификация устойчива к подмене верификатора; то есть она устойчива к фишинговым атакам, [8] но в отличие от U2F, WebAuthn не требует традиционного пароля. [9] Более того, перемещаемый аппаратный аутентификатор устойчив к вредоносному ПО, поскольку материал закрытого ключа никогда не доступен программному обеспечению, работающему на хост-машине.
Стандарты WebAuthn уровня 1 и 2 были опубликованы как Рекомендации W3C 4 марта 2019 года и 8 апреля 2021 года соответственно. [1] [10] [11] Спецификация уровня 3 в настоящее время является первым публичным рабочим проектом (FPWD). [12]
FIDO2 является преемником FIDO Universal 2nd Factor (U2F). В то время как U2F поддерживает только многофакторный режим, разработанный для усиления существующих потоков входа на основе имени пользователя/пароля, FIDO2 добавляет поддержку однофакторного режима. В многофакторном режиме аутентификатор активируется проверкой присутствия пользователя , которая обычно состоит из простого нажатия кнопки; пароль не требуется. В однофакторном режиме аутентификатор ( то, что у вас есть ) выполняет проверку пользователя . [13] В зависимости от возможностей аутентификатора это может быть: [14]
Независимо от режима, аутентификатор никогда не делится своими секретами или биометрическими данными с веб-сайтом. [15] Более того, секрет или биометрические данные одного пользователя работают со всеми веб-сайтами, поскольку аутентификатор выберет правильный криптографический ключевой материал для использования службой, запрашивающей аутентификацию, после успешного завершения проверки пользователя.
Секрет и биометрические данные на аутентификаторе могут использоваться вместе, подобно тому, как они используются на смартфоне . Например, отпечаток пальца используется для обеспечения удобного доступа к вашему смартфону, но иногда доступ по отпечатку пальца не удается, и в этом случае можно использовать PIN-код.
WebAuthn изначально решает многие проблемы, присущие традиционной аутентификации на основе пароля:
Как и его предшественник FIDO U2F, веб-аутентификация W3C (WebAuthn) включает в себя веб-сайт , веб-браузер и аутентификатор: [1]
WebAuthn определяет, как заявитель демонстрирует владение и контроль аутентификатора FIDO2 верификатору, называемому WebAuthn Relying Party. Процесс аутентификации опосредован сущностью, называемой WebAuthn Client, которая представляет собой нечто большее, чем соответствующий веб-браузер.
Для иллюстрации мы предполагаем, что аутентификатор — это роуминговый аппаратный аутентификатор (другие варианты см. ниже). В любом случае аутентификатор — это многофакторный криптографический аутентификатор, который использует криптографию с открытым ключом для подписи утверждения аутентификации, нацеленного на проверяющую сторону WebAuthn. Если предположить, что аутентификатор использует PIN-код для проверки пользователя, то сам аутентификатор — это то, что у вас есть , а PIN-код — это то, что вы знаете .
Для инициирования потока аутентификации WebAuthn [16] проверяющая сторона WebAuthn указывает свои намерения клиенту WebAuthn (т. е. браузеру) через JavaScript . Клиент WebAuthn взаимодействует с аутентификатором с помощью API JavaScript , реализованного в браузере. Роуминговый аутентификатор соответствует протоколу FIDO Client to Authenticator .
WebAuthn не требует строго роумингового аппаратного аутентификатора. В качестве альтернативы можно использовать программный аутентификатор (например, реализованный на смартфоне) или аутентификатор платформы (т. е. аутентификатор, реализованный непосредственно на клиентском устройстве WebAuthn). Соответствующие примеры аутентификаторов платформы включают Windows Hello [17] и операционную систему Android . [18]
Проиллюстрированный поток основан на проверке пользователя на основе PIN-кода, что с точки зрения удобства использования является лишь скромным улучшением по сравнению с обычной аутентификацией по паролю. На практике использование биометрии для проверки пользователя может улучшить удобство использования WebAuthn. [ необходима цитата ] Однако логистика, лежащая в основе биометрии, все еще плохо изучена. Среди пользователей сохраняется недопонимание того, что биометрические данные передаются по сети таким же образом, как и пароли, что не соответствует действительности. [19] [20]
Когда проверяющая сторона WebAuthn получает подписанное утверждение аутентификации от браузера, цифровая подпись утверждения проверяется с использованием доверенного открытого ключа пользователя.
Чтобы получить открытый ключ для пользователя, проверяющая сторона WebAuthn инициирует поток регистрации WebAuthn [21] , который похож на поток аутентификации, показанный выше. Основное отличие заключается в том, что аутентификатор теперь подписывает заявление об аттестации своим закрытым ключом аттестации. Подписанное заявление об аттестации содержит копию открытого ключа, который проверяющая сторона WebAuthn в конечном итоге использует для проверки подписанного утверждения аутентификации. Заявление об аттестации также содержит метаданные, описывающие сам аутентификатор. [ необходима цитата ]
Цифровая подпись на заявлении об аттестации проверяется с помощью доверенного открытого ключа аттестации для данной конкретной модели аутентификатора. Как проверяющая сторона WebAuthn получает свое хранилище доверенных открытых ключей аттестации, не указано. Одним из вариантов является использование службы метаданных FIDO. [22]
Тип подтверждения, указанный в JavaScript, определяет модель доверия. Например, может быть желателен тип подтверждения, называемый самоподтверждением, для которого модель доверия по сути является доверием при первом использовании .
Стандарт WebAuthn уровня 1 был опубликован в качестве рекомендации W3C рабочей группой по веб-аутентификации 4 марта 2019 года. [1] [10] [23] WebAuthn поддерживается Google Chrome , Mozilla Firefox , Microsoft Edge , Apple Safari [10] и Opera . [24]
Настольная версия Google Chrome поддерживает WebAuthn с версии 67. [25] Firefox, который не полностью поддерживал предыдущий стандарт FIDO U2F, включил и включил WebAuthn в Firefox версии 60, выпущенной 9 мая 2018 года. [26] Ранний выпуск Windows Insider Microsoft Edge (сборка 17682) реализовал версию WebAuthn, которая работает как с Windows Hello, так и с внешними ключами безопасности. [27]
Существующие ключи безопасности FIDO U2F в значительной степени совместимы со стандартом WebAuthn, хотя WebAuthn добавил возможность ссылаться на уникальный идентификатор «пользовательского дескриптора» для каждой учетной записи, который старые аутентификаторы не могут хранить. [1]
Одним из первых совместимых с FIDO2 аутентификаторов стал Security Key второго поколения от Yubico, анонсированный 10 апреля 2018 года. [28] Первым совместимым с FIDO2 аутентификатором с дисплеем стал Trezor Model T от SatoshiLabs, анонсированный 6 ноября 2019 года. [29] Trezor Model T также был первым аутентификатором, который позволял пользователям выбирать, какие резидентные учетные данные FIDO2 следует использовать непосредственно на устройстве.
Первый сертифицированный ключ FIDO2 уровня безопасности 2, названный «Goldengate», был анонсирован годом позже компанией eWBM 8 апреля 2019 года. [30] [31]
Dropbox объявил о поддержке входа через WebAuthn (в качестве второго фактора) 8 мая 2018 года. [32]
24 июня 2020 года Apple объявила, что Face ID или Touch ID могут использоваться в качестве аутентификатора платформы WebAuthn в Safari. [33]
WebAuthn реализует расширение более общего API управления учетными данными W3C , которое является попыткой формализовать взаимодействие между веб-сайтами и веб-браузерами при обмене учетными данными пользователей. API веб-аутентификации [34] [35] расширяет методы управления учетными данными и JavaScript , чтобы они принимали параметр. Метод используется для регистрации аутентификаторов открытого ключа в рамках их связывания с учетными записями пользователей (возможно, во время первоначального создания учетной записи, но более вероятно при добавлении нового устройства безопасности к существующей учетной записи), в то время как метод используется для аутентификации (например, при входе в систему).navigator.credentials.create()
navigator.credentials.get()
publicKey
create()
get()
Чтобы проверить, поддерживает ли браузер WebAuthn, скрипты должны проверять, window.PublicKeyCredential
определен ли интерфейс. В дополнение к PublicKeyCredential
, стандарт также определяет интерфейсы AuthenticatorResponse
, AuthenticatorAttestationResponse
, и AuthenticatorAssertionResponse
в дополнение к различным словарям и другим типам данных.
API не допускает прямого доступа к закрытым ключам или манипулирования ими, за исключением запроса на их первоначальное создание.
В августе 2018 года Paragon Initiative Enterprises провела аудит безопасности стандарта WebAuthn. Хотя они не смогли найти никаких конкретных эксплойтов , они выявили некоторые серьезные слабости в том, как используется базовая криптография и предписывается стандартом. [36]
Основные пункты критики вращаются вокруг двух потенциальных проблем, которые были проблематичными в других криптографических системах в прошлом и поэтому их следует избегать, чтобы не стать жертвой того же класса атак:
Paragon Initiative Enterprises также раскритиковала то, как изначально разрабатывался стандарт, поскольку предложение не было обнародовано заранее, а опытных криптографов не попросили дать предложения и отзывы. Следовательно, стандарт не был предметом широкого криптографического исследования со стороны академического мира.
Несмотря на эти недостатки, Paragon Initiative Enterprises по-прежнему призывает пользователей продолжать использовать WebAuthn, но разработала некоторые рекомендации для потенциальных реализаторов и разработчиков стандарта, которые, как они надеются, могут быть реализованы до того, как стандарт будет окончательно доработан. Избежание таких ошибок как можно раньше защитит отрасль от любых проблем, которые возникают из-за неисправных стандартов и необходимости обратной совместимости .
ECDAA был разработан только для использования в сочетании с аттестацией устройства. Эта конкретная функция WebAuthn не обязательно требуется для работы аутентификации. Текущие реализации позволяют пользователю решать, отправлять ли заявление об аттестации во время церемонии регистрации. Независимо друг от друга проверяющие стороны могут выбрать, требовать аттестацию или нет. ECDAA был удален из WebAuthn Level 2, поскольку он не был реализован ни браузерами, ни проверяющими сторонами. [38]