Обзор аутентификации на основе токенов +10



В прошлом для аутентификации в большинстве приложений и веб-сервисов пользователи должны были запоминать и при каждом логине вводить свои пароли. Кроме неудобства, это создавало ещё и угрозы безопасности, поскольку пользователи часто выбирали слабые пароли и использовали их в нескольких сервисах. Аутентификация на основе токенов устраняет подобные проблемы. Давайте разберёмся, как она реализуется.


Токены могут быть или программными компонентами (например, на основе стандарта JSON Web Tokens), или аппаратными устройствами. Они позволяют пользователям с лёгкостью выполнять вход и оставаться в системе без компрометации защиты. Токены даже могут повышать безопасность, стимулируя к использованию сильных паролей и действуя наряду с паролями для реализации многофакторной аутентификации (Multi-Factor Authentication, MFA).

Что такое аутентификация на основе токенов?


Аутентификация на основе токенов упрощает процесс аутентификации для уже известных пользователей. Для начала работы пользователь отправляет запрос к серверу, указав имя пользователя и пароль. Затем сервер подтверждает их на основании значений, зарегистрированных в его базе данных идентификационной информации. Если идентификационные данные подтверждены, сервер возвращает токен аутентификации (который тоже хранится в базе данных).

Когда тот же пользователь в дальнейшем шлёт запросы на доступ к защищённым ресурсам, эти запросы могут быть авторизованы при помощи токена аутентификации вместо имени пользователя и пароля. Сервер сверяет токен с зарегистрированным в базе данных токеном и предоставляет доступ. Аутентификацию можно реализовать на основе различных типов токенов, например, OAuth и JSON Web Tokens (JWT).

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

Как работает аутентификация на основе токенов?


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

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

Аутентификация на основе токенов обычно состоит из четырёх этапов:

  1. Первоначальный запрос — пользователь запрашивает доступ к защищённому ресурсу. Изначально пользователь должен идентифицировать себя способом, не требующим токена, например, при помощи имени пользователя или пароля.
  2. Верификация — аутентификация определяет, что идентификационные данные пользователя верны, и проверяет, какие полномочия он имеет в запрошенной системе.
  3. Токены — система выпускает токен и передаёт его пользователю. В случае аппаратного токена это подразумевает физическую передачу токенов пользователю. В случае программных токенов это происходит в фоновом режиме, пока фоновые процессы пользователя обмениваются данными с сервером.
  4. Сохранение — токен удерживается пользователем, или физически, или в браузере/мобильном телефоне. Это позволяет ему выполнять аутентификацию без указания идентификационных данных.



Основные типы токенов аутентификации


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

Аппаратные токены (USB)


Аппаратные токены — это физические устройства, обеспечивающие авторизацию пользователей для доступа к защищённым сетям. Также иногда их называют токенами аутентификации или безопасности. Задача аппаратного токена — обеспечение дополнительного слоя защиты благодаря двухфакторной или многофакторной аутентификации (2FA или MFA). Владелец токена привязывает токен к системе или сервису, доступ к которому ему необходим.

Аппаратные токены спроектированы с учётом удобства для пользователей и возможности настройки, поэтому они могут иметь различные форматы. Самыми распространёнными типами токенов являются брелки, USB и беспроводные токены. Аппаратные токены можно разделить на три категории.

  • Бесконтактные — такой токен не требует ввода кода или соединения с устройством. Этот тип токена использует для доступа к системе беспроводное подключение, которое может предоставлять или отклонять доступ на основании идентификационных данных, связанных с соединением.
  • Без подключения — токены без подключения не нужно физически вставлять в систему, к которой выполняется доступ. Устройство генерирует одноразовые коды доступа, которые используются как часть 2FA или MFA. Обычно токеном без подключения является мобильное устройство, например, смартфон.
  • С подключением — для обеспечения доступа токен с подключением должен физически подключаться к системе. Токен сканируется считывающим устройством, получающим идентификационные данные аутентификации. Это может быть USB-токен или брелок (например, Yubikey).

JSON Web Tokens (JWT)


JSON Web Token (JWT) — это открытый стандарт (RFC 7519). Он определяет простой автономный способ защищённой передачи информации между сторонами. Стандарт JWT использует объекты JavaScript Object Notation (JSON) для передачи токенов между сторонами. Эти токены могут использоваться для аутентификации, а также для передачи дополнительной информации о пользователе или аккаунте.

Благодаря своему малому размеру JWT могут передаваться как URL, параметры POST или заголовки HTTP и доставляться быстро. JWT содержит всю необходимую информацию о сущности, чтобы избежать многократных запросов к базе данных. Получателю JWT не нужно вызывать сервер, чтобы проверить токен.


JWT состоит из трёх частей:

  • Заголовка, содержащего тип токена и используемый алгоритм шифрования.
  • Полезной нагрузки, предоставляющей идентификационные данные аутентификации и другую информацию о пользователей или аккаунте.
  • Подписи, содержащей криптографический ключ, который можно использовать для подтверждения истинности информации в полезной нагрузке.

Одноразовые токены One-Time Password (OTP)


Токены One-time password (OTP) — это защищённые аппаратные устройства или программы, способные генерировать одноразовые пароли. Чаще всего это personal identification numbers (PIN) — числовые коды длиной 4-12 цифр.

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

Одноразовые пароли усиливают существующие системы идентификации и паролей, добавляя в них динамически генерируемые идентификационные данные. Токены OTP генерируют PIN синхронно или асинхронно, это зависит от их поставщика:

  • Синхронные токены для создания одноразового пароля используют приватный ключ пользователя и текущее время.
  • Асинхронные токены используют Challenge Response Authentication Mechanism (CRAM) — серию протоколов, в которых сервер отправляет запрос, а токен должен сгенерировать правильный ответ.

API-токены


Если вкратце, то API-токены используются как уникальные идентификаторы приложения, запрашивающего доступ к сервису. Сервис генерирует API-токен для приложения, чтобы оно использовало его при запросе сервиса. Для аутентификации и предоставления доступа API-токен можно сопоставить с сохранённым токеном. В некоторых случаях можно реализовать Session ID, но это бывает очень нечасто.

API-токены получили популярность благодаря тому, что они заменяют небезопасную практику отправки сочетаний имени пользователя и пароля по HTTP. Одним из самых популярных сегодня способов реализации безопасности API является OAuth2 (токены доступа).

Безопасна ли аутентификация на основе токенов?


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

Аутентификация на основе токенов в сочетании с дополнительными техниками аутентификации может создать более сложный барьер, чтобы помешать умным хакерам использовать украденные пароли. Токены можно получать только с уникального устройства, которое их создало (например, смартфона или брелка), благодаря чему они становятся сегодня высокоэффективной методикой авторизации.

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

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

Плюсы и минусы программных токенов


Как и в случае с любой методологией или техникой, при выборе программных токенов нужно учитывать их достоинства и недостатки.

Плюсы использования токенов


  • Эффективность — программные токены эффективны и масштабируемы. Сервер может легко создавать и проверять любое нужное количество токенов, что упрощает увеличение количества пользователей, получающих доступ к веб-сайту или веб-приложению. Важно, что они не требуют передачи пользователям физических токенов.
  • Гибкость — программные токены можно использовать на нескольких серверах и они могут одновременно обеспечивать аутентификацию для нескольких веб-сайтов и приложений. Они обычно используются для реализации single sign on (SSO), что удобно для пользователей и повышает безопасность.
  • Безопасность — токены на основе стандартов типа JWT не хранят состояния и могут проверяться только когда приватный ключ получен серверным приложением, которое использовалось для его генерации. Поэтому они считаются надёжным и безопасным способом аутентификации.

Минусы использования токенов


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

  • Излишний объём данных — размер JWT гораздо больше, чем у обычного токена сессии, и он увеличивается с объёмом сохраняемых о клиенте данных. Добавление новых данных в токен влияет на время, необходимое для установки пользовательской сессии, и в конечном итоге увеличивает время загрузки страницы.

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




Комментарии (4):

  1. SergeKh
    /#23797827

    У описанной системы две проблемы: 1. Она не устраняет необходимость пароля. 2. Она ничем не отличается от сессионных кук, кроме устойчивости к MIM атакам, а вроде бы считается, что протокол TLS 1.3 и так устойчив к MIM. Тогда не понятно зачем огород городить.

    Ну и использование SMS в качестве OTM пароля - это отдельная песня, не имеет отношения именно к токенам, но это (обычно) не правильно.

    • ris58h
      /#23799721

      1. Зачем пароль в физических токенах? Ключи API тоже не предполагают пароль. Конечно, их необходимо получить и, скорее всего, придётся залогиниться в систему управления, но это косвенное взаимодействие.

      2. Куки всё же предполагают взаимодействие через браузер.

  2. funca
    /#23797909 / +7

    Обзор аутентификации на основе ключей. Ключ служит для отпирания замков. Гаечный ключ откручивает гайки определенного размера. Ключ к шифру позволяет расшифровать сообщение. Скрипичный ключ определяет привязку нот к высоте звуков.

  3. DaturInnoxia
    /#23802269

    серьёзным недостатком стандарта JWT является то, что он полагается на один ключ

    Вообще нет, должны быть два ключа - и об одном из них почему-то только в конце статьи...

    Скомпрометированный секретный ключ

    Если ключ будет скомпрометирован, то ближайшее обновление аутентификации с помощью refresh-токена обнулит доступ мошенника.