Содержание статьи
Идея отказаться от паролей — чуть ли не ровесница самих паролей. Однако первые серьезные обсуждения этой темы начались примерно в 2004 году, когда Билл Гейтс на конференции по безопасности RSA заявил: «Нет никаких сомнений, что со временем люди будут полагаться на пароли все меньше и меньше. ...[пароли] просто не отвечают задаче защитить что‑либо действительно ценное». Затем был дружный хор голосов из IBM, Google и прочих компаний, проповедующих скорую кончину паролей. Но с того выступления Гейтса прошло уже двадцать лет, а воз и ныне там — пароли по‑прежнему живы.
Перед тем как мы двинемся дальше, освежим несколько базовых понятий:
- Идентификация — это процедура представления себя информационной системе уникальным образом, то есть, проще говоря, вводя логин, ты идентифицируешь себя.
- Аутентификация — это процедура проверки подлинности, то есть, вводя правильный пароль, ты подтверждаешь, что являешься обладателем аккаунта.
- Авторизация — это процесс предоставления прав пользователю, который происходит внутри информационной системы.
Нас в контексте этой статьи интересует именно аутентификация. Де‑факто стандартом для нее стала комбинация логин — пароль. Но что же не так с паролями?
- Люди часто не следуют рекомендациям безопасности: используют снова и снова один и тот же пароль или делают пароли слишком легкими для перебора. По данным исследования за 2022 год, каждый пользователь имеет в среднем четыре готовых пароля, причем у каждого третьего это вариации одного и того же пароля.
- Пароли должны безопасно храниться, как на стороне пользователя, так и на стороне сервисов. По данным LastPass, современный пользователь имеет в среднем 191 учетную запись, что намекает на потребность в менеджере паролей, но люди используют бумажки и таблицы. С компаниями не лучше — вспомнить хотя бы историю о том, как в Facebook пароли хранились в открытом виде.
- Поскольку пароли стали стандартным средством аутентификации, у злоумышленников уже накопился опыт и методы их подбора (словари, правила, утилиты), которыми может воспользоваться даже скрипт‑кидди. А добавив сюда возможности социальной инженерии, злоумышленники получают просто огромную поверхность атаки. По данным разных исследований, от 80 до 90% всех атак включают использование скомпрометированных учетных данных.
Да и вообще, что говорить, когда Фернандо Корбато, впервые реализовавший механизм паролей в 1961 году, заявлял, что он не предназначался для веба и на текущий день превратился в кошмар.
Беспарольная эволюция
С паролями все ясно, возможно, они действительно стали больше риском, чем защитой, но что предлагается взамен?
Все началось в 1980-х, когда компания Security Dynamics Technologies (сейчас RSA Security) создала первый аппаратный токен, генерирующий одноразовые пароли (OTP). В 1998 году компания AT&T получила патент на двухфакторную аутентификацию, совместив пароль с OTP-кодом. В 2000-х получила распространение система SSO. В 2011 году в Motorola выпустили первый смартфон со сканером отпечатка пальцев, а еще через два года то же сделали и в Apple, снабдив iPhone датчиком Touch ID.

Таким образом, эволюция аутентификации создала всего три фактора: факторы знания (что‑то, что ты знаешь), факторы владения (что‑то, что ты имеешь) и факторы свойства (что‑то, что характеризует тебя). Поэтому фундаментально у нас есть следующие альтернативы:
- минимизировать недостатки парольной аутентификации (SSO, OAuth, OpenID);
- комбинировать факторы знания с другими факторами (2FA, MFA);
- не использовать факторы знания (беспарольная аутентификация).
Если наша задача — отказаться от паролей, то подходит только последний вариант. Будем исходить из того, что беспарольная аутентификация (БА) — это аутентификация, которая не использует фактор знания (пароль, секретный вопрос, пасс‑фраза). То есть нам остается выбор одного из двух факторов. Тем временем многофакторная аутентификация (MFA) предполагает использование двух и более различных факторов. Так что БА и MFA — это разные вещи, которые не следует путать.
Развею самое большое заблуждение о БА. Любое использование биометрии — это локальное решение производителя аутентификатора, но даже в этом случае никто никуда твои отпечатки или их производные не посылает и ничего ими не подписывает, это касается и FIDO2, о котором пойдет речь ниже. Многие путают использование биометрии и БА, что порождает массовую истерию по поводу утечки биометрических данных.
Зоопарк FIDO
Путем логических рассуждений мы пришли к использованию факторов владения или свойства. Звучит просто, но для реализации нужны стандарты, которыми бы руководствовались разработчики сервисов и производители устройств.
С 2004 года были образованы OATH, OIDF, OASIS, IDSA, OIX и другие. Количество организаций и протоколов росло, компании пробовали создавать продукты, но ни к какому общему решению не пришли. Поэтому в июле 2012 года PayPal, Lenovo и еще четыре компании основали альянс FIDO (Fast IDentity Online), миссией которого стало «сократить всеобщую зависимость от паролей». Вопреки расхожему мнению, Google и Microsoft не были среди основателей, а присоединились только в 2013 году. Сейчас в альянс FIDO входит несколько сотен компаний.
На первых порах новоиспеченный альянс объединил два независимых проекта. Во‑первых, это Universal Authentication Framework (UAF), разработанный в PayPal и Validity Sensors, — протокол, который предполагает использование биометрических данных для аутентификации пользователя без пароля на стороне мобильных устройств. Во‑вторых, это Universal Second Factor (U2F), созданный в Google и Yubico. Этот протокол предполагает использование внешнего токена безопасности как второго фактора аутентификации, в дополнение к паролю. В результате появились две спецификации: UAF 1.0 (8 декабря 2014 года) и U2F 1.0 (9 октября 2014 года), которые можно условно назвать проектом FIDO 1.0.
Концепт выглядел отлично, но ему не хватало унификации, поэтому в сентябре 2015 года альянс FIDO объединил две спецификации и выпустил предложение FIDO 2.0, которое было отправлено в W3C. На этой основе в W3C в мае 2016 года выпустили протокол WebAuthn, а альянс FIDO после нескольких доработок в июле 2017 года зарелизил протокол U2F 1.2 (он же CTAP 1.0). Эту связку уже можно назвать полноценным проектом FIDO 2.0.
info
W3C (World Wide Web Consortium) — это международная организация по стандартизации веба. Есть и другие подобные организации, например WHATWG (поддерживает HTML) и ECMA (поддерживает JavaScript). Стандарты, выпущенные этими организациями, не обязательные, но общепризнанные.
W3C и FIDO регулярно выпускают новые итерации своих спецификаций. Так, на сегодняшний день стандартом является WebAuthn (Level 2) от 2021 года и CTAP 2.1 от 2022 года, но существует и новая версия, которая пока на этапе предложения.

На сегодняшний день FIDO2 — это наиболее распространенное решение альянса FIDO, хотя U2F также еще используется некоторыми веб‑сервисами как метод 2FA, а UAF применяется в мобильных приложениях как метод подтверждения действия, например транзакции в банковском приложении.
Итого нужно запомнить, что FIDO — это альянс, FIDO1 и FIDO2 — это проекты, а не протоколы; UAF, U2F, CTAP и WebAuthn всех версий — это протоколы, у которых есть одноименные спецификации.
Архитектура FIDO2
FIDO2 позиционируется как безопасный метод аутентификации, построенный на криптографии публичного ключа, и состоит из двух частей — протоколов WebAuthn и CTAP. Зачем два протокола? Так FIDO было легче формализовать свое творение: W3C выпускает только стандарты для веба, а на стороне устройств ничего не решает. Поэтому и получился такой полустандартный стандарт, за который отвечают одновременно некоммерческий консорциум (W3C) и ассоциация коммерческих организаций (альянс FIDO).
Вначале скажу пару слов о том, что FIDO2 не покрывает. Вне поля зрения протоколов остается то, как мы получаем аутентификатор (покупаем, или нам его выдают на работе), как мы активируем аутентификатор (устанавливаем свой отпечаток или код) и как хранятся наши ключи (шифрованное хранилище или браузерный менеджер паролей).
Также FIDO2 не покрывает Passkeys, которые сейчас начинают предлагать на некоторых крупных сайтах. Дело в том, что в первых спецификациях FIDO2 такого понятия не существовало, а позже словом Passkeys для удобства начали называть те самые криптографические ключи. На практике Passkeys — это одна из реализаций ключа на основе криптографии, которая может использоваться в FIDO2 и обладает другими полезными функциями, например синхронизацией между устройствами. Но стоит помнить, что ни WebAuthn, ни CTAP не регламентируют Passkeys. Это в данный момент просто самое распространенное решение.
Основные участники взаимодействия — это:
- пользователь;
- аутентификатор (Authenticator);
- устройство пользователя;
- JS-клиент устройства пользователя (клиент);
- ответственная сторона (Relying Party — RP).
Протокол WebAuthn отвечает за взаимодействие между JS-клиентом и RP, его можно условно назвать клиентским API. В большинстве случаев JS-клиент — это браузер пользователя, но он может быть и нативным приложением для Android или iOS. Для простоты будем считать понятия JS-клиент и браузер, а также веб‑сайт и RP равнозначными.
Протокол CTAP регулирует отношения между аутентификатором и устройством пользователя, его можно условно назвать API аутентификатора. Аутентификатор может быть встроенным, например Face ID, или внешним, например аппаратный токен YubiKey, но мы не будем делать между ними различий.
Данные CTAP может передавать через USB, NFC или BLE (Bluetooth Low Energy). Самые внимательные наверняка заметят, что у нас остался пробел во взаимодействии между устройством пользователя и JS-клиентом. К сожалению, каждая платформа (ОС) решает этот вопрос по‑своему, здесь четких стандартов нет.
Концептуально архитектура FIDO2 приведена на рисунке ниже, а компоненты разных цветов зависят от разных команд или даже вендоров.

Церемония регистрации
Нет‑нет, речь сейчас пойдет не о загсе. В FIDO2 существует две церемонии: церемония регистрации и церемония аутентификации. Давай начнем с первой. Сразу оговоримся, что для читаемости я буду использовать знакомые всем форматы данных вместо байтовых (Uint8Arrays
), которые на самом деле отправляются в полях вызовов.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее