Открыть сервис

RFC 6238

RFC 6238 — это спецификация, опубликованная в мае 2011 года Инженерным советом Интернета (IETF), которая описывает протокол TOTP (Time-based One-Time Password)алгоритм генерации одноразовых паролей, зависящих от текущего времени. Данный стандарт является развитием более раннего алгоритма HOTP (HMAC-based One-Time Password), определённого в RFC 4226, и предназначен для повышения безопасности двухфакторной аутентификации (2FA) в компьютерных системах и сетях.

История и предпосылки создания

До появления TOTP основным стандартом для генерации одноразовых паролей был HOTP (RFC 4226, 2005 год). В нём пароль вычислялся на основе счётчика событий (например, порядкового номера попытки входа). Однако такой подход имел недостатки: необходимость синхронизации счётчика между сервером и клиентом, а также уязвимость к атакам, при которых злоумышленник мог перехватить последовательность паролей.

В 2008 году компания VeriSign (впоследствии проданная Symantec) предложила модификацию HOTP, где вместо счётчика использовалось текущее время. Эта идея была формализована в черновике, который после обсуждения и доработки стал RFC 6238. Авторами спецификации выступили Дэвид М’Раихи (David M’Raihi) и другие эксперты из VeriSign и IETF. Стандарт был принят в 2011 году и быстро стал основой для большинства современных приложений-аутентификаторов (например, Google Authenticator, Microsoft Authenticator, Authy).

Принцип работы

Алгоритм TOTP

TOTP основан на алгоритме HMAC-SHA-1 (или HMAC-SHA-256, HMAC-SHA-512) и использует секретный ключ, разделённый между сервером и клиентом (например, мобильным приложением). Пароль вычисляется по формуле:

`` TOTP = HOTP(K, T) ``

Где:

  • K — секретный ключ (обычно 128-битный или 256-битный).
  • T — значение временного штампа, преобразованное в целое число (количество интервалов времени с начала эпохи Unix — 1 января 1970 года 00:00:00 UTC).

Временной интервал (time step) по умолчанию составляет 30 секунд, но может быть изменён (например, 60 секунд). Текущее время на клиенте и сервере должно быть синхронизировано с точностью до нескольких секунд (обычно допускается расхождение до ±1 интервала).

Генерация пароля

  1. Получение временного штампа: сервер и клиент независимо вычисляют количество целых интервалов времени, прошедших с эпохи Unix.
  2. Применение HMAC: к секретному ключу и значению временного штампа применяется HMAC (обычно HMAC-SHA-1).
  3. Динамическая усечение: из HMAC-дайджеста извлекается 4-байтовое значение (31 бит), которое преобразуется в десятичное число.
  4. Формирование пароля: полученное число приводится к заданной длине (обычно 6 или 8 цифр) путём взятия остатка от деления на 10^N.

Верификация

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

Классификация и варианты

По длине пароля

  • 6-значные коды — наиболее распространённый вариант (стандарт по умолчанию).
  • 8-значные коды — используются реже, но обеспечивают большую криптостойкость (увеличивают пространство возможных паролей с 10^6 до 10^8).

По используемому хешу

  • HMAC-SHA-1 — базовый вариант, определённый в RFC 6238.
  • HMAC-SHA-256 и HMAC-SHA-512 — расширенные варианты, также поддерживаемые стандартом (указаны как опциональные).

По временному шагу

  • 30 секунд — стандартное значение.
  • 60 секунд — используется в некоторых системах для снижения нагрузки на сервер или при нестабильной синхронизации времени.

Применение

Двухфакторная аутентификация (2FA)

Основное применение TOTP — обеспечение второго фактора аутентификации при входе в учётные записи. Пользователь вводит не только пароль (что знает), но и одноразовый код из приложения-аутентификатора (что имеет). Это существенно снижает риск несанкционированного доступа при компрометации основного пароля.

Примеры использования

  • Google Authenticator — одно из первых массовых приложений, реализующих TOTP.
  • Microsoft Authenticator — поддерживает TOTP наряду с другими протоколами.
  • Authy — популярное приложение с облачной синхронизацией.
  • Банковские системы — многие банки (например, Сбербанк, Тинькофф) используют TOTP для подтверждения операций.
  • Корпоративные системыVPN, почтовые сервисы, облачные платформы (AWS, Azure, Google Cloud).

Преимущества и недостатки

Преимущества:

  • Не требует сетевого соединения для генерации кода (работает офлайн).
  • Простота реализации и интеграции.
  • Высокая надёжность при правильной синхронизации времени.

Недостатки:

  • Зависимость от точности часов на устройстве пользователя.
  • Уязвимость к фишингу (злоумышленник может перехватить одноразовый код в реальном времени).
  • Невозможность отзыва кода до истечения временного интервала (30 секунд).

Критика и альтернативы

Несмотря на широкое распространение, TOTP имеет ряд недостатков, которые критикуются специалистами по безопасности:

  • Фишинговая уязвимость: одноразовый код может быть перехвачен злоумышленником через поддельный сайт и немедленно использован.
  • Отсутствие защиты от MITM-атак: если злоумышленник контролирует канал связи, он может перехватить как пароль, так и TOTP-код.
  • Синхронизация времени: при смене часового пояса или сбое часов на устройстве коды могут перестать совпадать.

В качестве альтернатив используются:

  • U2F/WebAuthn — аппаратные ключи (например, YubiKey), обеспечивающие криптографическую защиту от фишинга.
  • Push-уведомления — сервер отправляет запрос на подтверждение на мобильное устройство пользователя.
  • Биометрическая аутентификация — отпечаток пальца, распознавание лица.

Тем не менее, TOTP остаётся одним из самых распространённых и доступных методов 2FA, особенно в потребительском сегменте.

Интересные факты

  • Алгоритм TOTP лежит в основе Google Authenticator, который был выпущен в 2010 году, ещё до официального принятия RFC 6238.
  • В 2018 году компания Google объявила о поддержке TOTP в своём приложении Google Authenticator для iOS и Android, что сделало стандарт ещё более популярным.
  • В России TOTP активно используется в системах Госуслуги (через приложение «Госуслуги. Авторизация») и в ряде банковских приложений.
  • Стандарт RFC 6238 не требует обязательного использования 6-значных кодов — длина может варьироваться, но на практике 6 цифр стали де-факто стандартом.

Источники

  • RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (IETF, 2011).
  • RFC 4226 — HOTP: An HMAC-Based One-Time Password Algorithm (IETF, 2005).
  • M’Raihi, D. et al. (2011). «TOTP: Time-Based One-Time Password Algorithm». Internet Engineering Task Force.
  • Google Authenticator — официальная документация (Google).
  • Microsoft Authenticator — документация (Microsoft).
  • Стандарт двухфакторной аутентификации (FIDO Alliance).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →