Чем двухфакторная аутентификация отличается от двухэтапной?

Двухфакторная (2FA) и двухэтапная (2SV) аутентификации — это способы дополнительной защиты аккаунта. Часто между ними ставят знак равенства даже разработчики. Но это неверно.

Что такое двухфакторная аутентификация?

Ключевое слово здесь — фактор. Всего их выделяют четыре:

  • знание чего-либо — например, логина, пароля, ключа, кодовой фразы, любой другой секретной информации, которая задаётся при создании профиля;
  • обладание чем-либо — например, аппаратным токеном или смартфоном с приложением, генерирующим коды;
  • нахождение в конкретном месте — для определения используется, например, IP-адрес пользователя или радио-метка;
  • обладание некими биологическими особенностями — например, сканирование отпечатка пальца или радужной оболочки глаза.

Двухфакторная аутентификация — это когда последовательно используются два фактора.

Например, у меня есть аккаунт на Яндексе, в настройках которого включена двухфакторная аутентификация. Чтобы зайти в него на новом устройстве, требуется соблюдение двух факторов:

  1. Я знаю логин.
  2. Я обладаю смартфоном с приложением Яндекс.Ключ, которое генерирует коды для авторизации.

Есть и другие приложения для генерирования кодов: Google Authenticator, Microsoft Authenticator, LastPass Authenticator. Но все они решают одну задачу — выступают в качестве второго фактора при авторизации пользователя.

Вместо смартфона с приложением можно использовать аппаратный токен. Он подключается через порт USB, Bluetooth или NFC. Когда вы регистрируетесь на очередном сервисе и включаете двухфакторную аутентификацию, внутри токена генерируется новая пара ключей. Открытый ключ передаётся на сервер, закрытый — хранится на аппаратном токене.

Для двухфакторной аутентификации с помощью токенов используется протокол FIDO U2F. На сайте USB-Dongle Authentication можно посмотреть список сервисов, которые его поддерживают. Среди них, например, мессенджеры WhatsApp, Viber, Slack и Telegram.

Процесс авторизации с помощью аппаратного токена выглядит следующим образом:

  1. Подключение к устройству аппаратного токена.
  2. Ввод логина и пароля на сервисе.
  3. Нажатие на физическую кнопку на токене или другое действие для подтверждения присутствия пользователя за компьютером.
  4. Сверка открытого и закрытого ключей.
  5. Успешная авторизация в случае совместимости ключей.

Протокол FIDO U2F поддерживают браузеры Google Chrome, Mozilla Firefox, Microsoft Edge, Opera. На Safari поддержки по умолчанию нет, но её можно добавить с помощью расширения, доступного для скачивания на GitHub.

Схема взаимодействия c U2F-клиентом

Со сканированием отпечатков пальцев, радужной оболочки глаза, определением местоположения похожая ситуация. Чтобы второй фактор работал, нужна поддержка со стороны сервисов и устройств, через который пользователь пытается авторизоваться.

Что такое двухэтапная аутентификация?

С двухэтапной аутентификацией дело обстоит намного проще. Допустим, вы вводите пароль и получаете код подтверждения через SMS. Это два этапа, но один фактор — знание.

Например, двухэтапная аутентификация используется в Telegram. При авторизации на новом устройстве вы получаете код подтверждения в чате (если у вас есть доступ к аккаунту на другом устройстве) или через SMS. Это первый этап. После включения в настройках безопасности двухэтапной аутентификации появится ещё один шаг — ввод пароля, который вы сами придумали. Снова два шага, но один фактор — знание.

Двухфакторную и двухэтапную аутентификации путают, потому что на практике грань очень тонкая

В теме определения типа аутентификации находится место спорам. Например, есть мнение, что подтверждение личности через код в SMS — это фактор владения SIM-картой, на которую приходит сообщение. Поэтому стоит говорить об этой технологии аутентификации как о двухфакторной, пусть и крайне слабой, потому что SIM-карту можно без проблем перевыпустить, а номер телефона — подменить.

Скорее всего, корни этих разногласий уходят во времена, когда отправку кода через SMS действительно считали вторым фактором проверки. Однако эта практика остаётся в прошлом. Американский Национальный институт стандартов и технологий ещё в 2016 году не рекомендовал использовать SMS в 2FA из-за высокого риска взлома. В качестве альтернативы предложены приложения-генераторы кодов и аппаратные токены.

Тем не менее, некоторые сервисы продолжают называть SMS вторым фактором. Например, GitHub предлагает два способа использования двухфакторной аутентификации: генерирование ключа в приложении и отправку кода в сообщении. Обратная ситуация — Google называет все способы дополнительной защиты двухэтапной аутентификацией, хотя среди них есть использование аппаратного токена и генерирование кодов в приложении.

Впрочем, эти разногласия возникают только в спорах людей, интересующихся информационной безопасностью. Разработчикам достаточно помнить, что подтверждение личности через SMS — это слабая защита, и по возможности добавлять поддержку более сильных факторов. Простым же пользователям чётко представлять разницу между двухэтапной и двухфакторной аутентификациями не обязательно.