Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
В этой статье мы с тобой проследим историю идей беспарольной аутентификации. Разберемся в том, что такое FIDO2, как работают протоколы WebAuthn и CTAP, а также обсудим их внутренние механизмы защиты и существующие атаки. Между делом раскроем заговор массовой утечки биометрических данных, посмотрим, при чем здесь Passkeys, и попытаемся понять, насколько близко беспарольное будущее.
Идея отказаться от паролей — чуть ли не ровесница самих паролей. Однако первые серьезные обсуждения этой темы начались примерно в 2004 году, когда Билл Гейтс на конференции по безопасности RSA заявил: «Нет никаких сомнений, что со временем люди будут полагаться на пароли все меньше и меньше. …[пароли] просто не отвечают задаче защитить что‑либо действительно ценное». Затем был дружный хор голосов из IBM, Google и прочих компаний, проповедующих скорую кончину паролей. Но с того выступления Гейтса прошло уже двадцать лет, а воз и ныне там — пароли по‑прежнему живы.
Перед тем как мы двинемся дальше, освежим несколько базовых понятий:
Нас в контексте этой статьи интересует именно аутентификация. Де‑факто стандартом для нее стала комбинация логин — пароль. Но что же не так с паролями?
Да и вообще, что говорить, когда Фернандо Корбато, впервые реализовавший механизм паролей в 1961 году, заявлял, что он не предназначался для веба и на текущий день превратился в кошмар.
С паролями все ясно, возможно, они действительно стали больше риском, чем защитой, но что предлагается взамен?
Все началось в 1980-х, когда компания Security Dynamics Technologies (сейчас RSA Security) создала первый аппаратный токен, генерирующий одноразовые пароли (OTP). В 1998 году компания AT&T получила патент на двухфакторную аутентификацию, совместив пароль с OTP-кодом. В 2000-х получила распространение система SSO. В 2011 году в Motorola выпустили первый смартфон со сканером отпечатка пальцев, а еще через два года то же сделали и в Apple, снабдив iPhone датчиком Touch ID.
Security Dynamics SecurID (OTP) и Motorola ATRIX 4G (сканер отпечатка)
Таким образом, эволюция аутентификации создала всего три фактора: факторы знания (что‑то, что ты знаешь), факторы владения (что‑то, что ты имеешь) и факторы свойства (что‑то, что характеризует тебя). Поэтому фундаментально у нас есть следующие альтернативы:
Если наша задача — отказаться от паролей, то подходит только последний вариант. Будем исходить из того, что беспарольная аутентификация (БА) — это аутентификация, которая не использует фактор знания (пароль, секретный вопрос, пасс‑фраза). То есть нам остается выбор одного из двух факторов. Тем временем многофакторная аутентификация (MFA) предполагает использование двух и более различных факторов. Так что БА и MFA — это разные вещи, которые не следует путать.
Развею самое большое заблуждение о БА. Любое использование биометрии — это локальное решение производителя аутентификатора, но даже в этом случае никто никуда твои отпечатки или их производные не посылает и ничего ими не подписывает, это касается и FIDO2, о котором пойдет речь ниже. Многие путают использование биометрии и БА, что порождает массовую истерию по поводу утечки биометрических данных.
Путем логических рассуждений мы пришли к использованию факторов владения или свойства. Звучит просто, но для реализации нужны стандарты, которыми бы руководствовались разработчики сервисов и производители устройств.
С 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 года, но существует и новая версия, которая пока на этапе предложения.
Эволюция проектов и протоколов альянса FIDO
На сегодняшний день FIDO2 — это наиболее распространенное решение альянса FIDO, хотя U2F также еще используется некоторыми веб‑сервисами как метод 2FA, а UAF применяется в мобильных приложениях как метод подтверждения действия, например транзакции в банковском приложении.
Итого нужно запомнить, что FIDO — это альянс, FIDO1 и FIDO2 — это проекты, а не протоколы; UAF, U2F, CTAP и WebAuthn всех версий — это протоколы, у которых есть одноименные спецификации.
FIDO2 позиционируется как безопасный метод аутентификации, построенный на криптографии публичного ключа, и состоит из двух частей — протоколов WebAuthn и CTAP. Зачем два протокола? Так FIDO было легче формализовать свое творение: W3C выпускает только стандарты для веба, а на стороне устройств ничего не решает. Поэтому и получился такой полустандартный стандарт, за который отвечают одновременно некоммерческий консорциум (W3C) и ассоциация коммерческих организаций (альянс FIDO).
Вначале скажу пару слов о том, что FIDO2 не покрывает. Вне поля зрения протоколов остается то, как мы получаем аутентификатор (покупаем, или нам его выдают на работе), как мы активируем аутентификатор (устанавливаем свой отпечаток или код) и как хранятся наши ключи (шифрованное хранилище или браузерный менеджер паролей).
Также FIDO2 не покрывает Passkeys, которые сейчас начинают предлагать на некоторых крупных сайтах. Дело в том, что в первых спецификациях FIDO2 такого понятия не существовало, а позже словом Passkeys для удобства начали называть те самые криптографические ключи. На практике Passkeys — это одна из реализаций ключа на основе криптографии, которая может использоваться в FIDO2 и обладает другими полезными функциями, например синхронизацией между устройствами. Но стоит помнить, что ни WebAuthn, ни CTAP не регламентируют Passkeys. Это в данный момент просто самое распространенное решение.
Основные участники взаимодействия — это:
Протокол WebAuthn отвечает за взаимодействие между JS-клиентом и RP, его можно условно назвать клиентским API. В большинстве случаев JS-клиент — это браузер пользователя, но он может быть и нативным приложением для Android или iOS. Для простоты будем считать понятия JS-клиент и браузер, а также веб‑сайт и RP равнозначными.
Протокол CTAP регулирует отношения между аутентификатором и устройством пользователя, его можно условно назвать API аутентификатора. Аутентификатор может быть встроенным, например Face ID, или внешним, например аппаратный токен YubiKey, но мы не будем делать между ними различий.
Данные CTAP может передавать через USB, NFC или BLE (Bluetooth Low Energy). Самые внимательные наверняка заметят, что у нас остался пробел во взаимодействии между устройством пользователя и JS-клиентом. К сожалению, каждая платформа (ОС) решает этот вопрос по‑своему, здесь четких стандартов нет.
Концептуально архитектура FIDO2 приведена на рисунке ниже, а компоненты разных цветов зависят от разных команд или даже вендоров.
Архитектура FIDO2
Нет‑нет, речь сейчас пойдет не о загсе. В FIDO2 существует две церемонии: церемония регистрации и церемония аутентификации. Давай начнем с первой. Сразу оговоримся, что для читаемости я буду использовать знакомые всем форматы данных вместо байтовых (Uint8Arrays
), которые на самом деле отправляются в полях вызовов.
Источник: xakep.ru