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

Time-based One-Time Password

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

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

TOTP генерирует одноразовый пароль на основе двух входных данных: секретного ключа (shared secret), который известен только серверу и клиенту (например, приложению-аутентификатору), и значения текущего времени, дискретизированного с определённым шагом (тайм-степом). Алгоритм использует криптографическую хеш-функцию (обычно SHA-1, хотя могут применяться SHA-256 и SHA-512) для вычисления HMAC (Hash-based Message Authentication Code) от этих данных. Результат хеширования затем преобразуется в короткую последовательность цифр (обычно 6 или 8 символов), которая и является одноразовым паролем.

Формально алгоритм TOTP определяется как:

TOTP = Truncate(HMAC-SHA-1(K, T))

где:

  • Kсекретный ключ (shared secret);
  • T — значение времени, делённое на интервал (тайм-степ), округлённое вниз до целого числа;
  • Truncate — функция преобразования HMAC-значения в цифровой код заданной длины.

Временной интервал (тайм-степ) обычно составляет 30 секунд, хотя может быть и другим (например, 60 секунд). Это означает, что пароль действителен только в течение этого интервала. После его истечения генерируется новый пароль для следующего интервала. Синхронизация времени между клиентом и сервером критически важна: допустимая разница обычно составляет несколько интервалов (например, ±1 или ±2), чтобы компенсировать возможные расхождения часов.

История

Алгоритм TOTP был разработан как улучшение HOTP (алгоритм, основанный на счётчике) для устранения необходимости синхронизации счётчика между клиентом и сервером. Основной вклад в создание TOTP внесли исследователи из компании RSA Laboratories и других организаций. В 2011 году TOTP был стандартизирован в документе RFC 6238 (Request for Comments 6238) под названием «TOTP: Time-Based One-Time Password Algorithm». Стандарт был разработан Инженерным советом Интернета (IETF) и стал основой для многих реализаций двухфакторной аутентификации.

До появления TOTP широко использовались аппаратные токены (например, RSA SecurID), которые генерировали одноразовые пароли на основе времени, но они были проприетарными и не имели открытого стандарта. RFC 6238 сделал TOTP открытым и общедоступным, что привело к его массовому внедрению в программные аутентификаторы (например, Google Authenticator, Authy, Microsoft Authenticator) и веб-сервисы.

Классификация и виды

TOTP является одним из типов одноразовых паролей (OTP). В зависимости от способа генерации и применения выделяют:

  • Аппаратные TOTP-токены — физические устройства (например, брелоки или карты), которые генерируют пароль на основе встроенных часов и секретного ключа. Примеры: YubiKey (в режиме TOTP), RSA SecurID (аналогичный принцип).
  • Программные TOTP-токены — приложения на смартфонах, планшетах или компьютерах, реализующие алгоритм TOTP. Наиболее известные: Google Authenticator, Authy, Microsoft Authenticator, 1Password, Bitwarden.
  • Серверные реализации — модули и библиотеки для веб-серверов и серверов аутентификации, которые проверяют TOTP-пароли, переданные клиентом. Примеры: библиотеки для Python (pyotp), PHP (PHPGangsta/GoogleAuthenticator), Java (Google Authenticator library).

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

Устройство и характеристики

Алгоритм TOTP основан на следующих компонентах:

  1. Секретный ключ (shared secret) — случайная последовательность байт, обычно длиной 16–32 байта. Ключ генерируется сервером и передаётся клиенту при начальной настройке (например, в виде QR-кода или текстовой строки). Ключ должен храниться в тайне и быть уникальным для каждого пользователя.
  2. Тайм-степ (time step) — интервал времени, в течение которого пароль действителен. Стандартное значение — 30 секунд. Меньший интервал повышает безопасность, но увеличивает нагрузку на синхронизацию.
  3. Хеш-функция — используется для вычисления HMAC. По умолчанию — SHA-1, но RFC 6238 поддерживает SHA-256 и SHA-512.
  4. Функция Truncate — преобразует 20-байтовое HMAC-значение (для SHA-1) в цифровой код. Обычно берётся последние 4 бита HMAC для определения смещения, затем извлекаются 4 байта, которые преобразуются в 31-битное целое число, и из него берётся остаток от деления на 10^d (где d — количество цифр).

Основные характеристики TOTP:

  • Длина пароля: 6–8 цифр.
  • Время действия: 30 секунд (по умолчанию).
  • Криптографическая стойкость: зависит от длины секретного ключа и используемой хеш-функции. При правильной реализации TOTP устойчив к атакам перебором, так как пароль меняется каждые 30 секунд.
  • Одноразовость: каждый пароль может быть использован только один раз (в пределах своего интервала). После использования или истечения времени он становится недействительным.
  • Синхронизация времени: требуется точное время на клиенте и сервере. Допускается расхождение в пределах нескольких тайм-степов (обычно ±1 или ±2).

Применение

TOTP широко используется для двухфакторной аутентификации (2FA) в различных онлайн-сервисах и системах. Основные области применения:

  • Интернет-банкинг и финансовые сервисы: многие банки (например, Сбербанк, Тинькофф) предлагают TOTP-аутентификацию через мобильные приложения для подтверждения операций.
  • Социальные сети и мессенджеры: Facebook (принадлежит компании Meta, признанной экстремистской и запрещённой в РФ), Telegram, WhatsApp (принадлежит компании Meta, признанной экстремистской и запрещённой в РФ), VK (ВКонтакте) поддерживают TOTP для защиты аккаунтов.
  • Корпоративные системы: VPN-клиенты, почтовые серверы (например, Microsoft Exchange), облачные платформы (Google Workspace, Microsoft 365) используют TOTP для доступа сотрудников.
  • Криптовалютные биржи и кошельки: Binance, Coinbase, Kraken требуют TOTP для подтверждения транзакций и входа.
  • Игровые платформы: Steam, Epic Games Store, Battle.net используют TOTP для защиты аккаунтов.

В России TOTP активно применяется в сервисах «Госуслуги» (для входа через мобильное приложение), «Сбербанк Онлайн», «Яндекс.Ключ», а также в корпоративных системах российских компаний.

Безопасность и критика

TOTP считается достаточно безопасным методом аутентификации, но имеет ряд уязвимостей и ограничений:

  • Фишинг: злоумышленники могут создать поддельный сайт, который перехватывает TOTP-пароль и немедленно использует его для входа на настоящий сервис. Для защиты от фишинга рекомендуется использовать дополнительные методы (например, подтверждение через push-уведомления).
  • Кража секретного ключа: если злоумышленник получает доступ к секретному ключу (например, через вредоносное ПО на устройстве пользователя), он может генерировать пароли самостоятельно.
  • Синхронизация времени: расхождение часов на устройстве пользователя может привести к тому, что генерируемые пароли будут недействительны. Для решения этой проблемы серверы обычно допускают использование паролей из соседних тайм-степов.
  • Атаки «человек посередине» (MITM): при передаче пароля по незащищённому каналу он может быть перехвачен. TOTP не шифрует передаваемые данные, поэтому рекомендуется использовать HTTPS.
  • Социальная инженерия: злоумышленники могут попытаться обманом получить TOTP-код у пользователя (например, по телефону).

Критика TOTP в основном связана с тем, что он не защищает от фишинга в реальном времени и требует от пользователя внимательности. Альтернативные методы, такие как U2F (Universal 2nd Factor) на основе аппаратных ключей (например, YubiKey) или push-уведомления, считаются более устойчивыми к фишингу. Однако TOTP остаётся популярным из-за своей простоты, низкой стоимости (не требует специального оборудования) и широкой поддержки.

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

  • Алгоритм TOTP используется в приложении Google Authenticator, которое было выпущено в 2010 году и стало одним из первых массовых программных TOTP-токенов.
  • В 2016 году исследователи из Университета Карнеги — Меллон показали, что TOTP-пароли можно предсказывать с некоторой вероятностью, если известен секретный ключ, но при правильной генерации ключа это не является уязвимостью.
  • В России TOTP-аутентификация обязательна для некоторых категорий государственных информационных систем, например, для портала «Госуслуги» при входе с использованием усиленной квалифицированной электронной подписи.
  • Существуют реализации TOTP на основе криптографических алгоритмов, устойчивых к квантовым вычислениям, но они пока не получили широкого распространения.

Источники

  • RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (IETF, 2011).
  • RFC 4226 — HOTP: An HMAC-Based One-Time Password Algorithm (IETF, 2005).
  • Стандарт ГОСТ Р 57580.2-2017 «Защита информации. Одноразовые пароли. Общие требования» (Россия, 2017).
  • Документация Google Authenticator (Google, 2010–2023).
  • Учебные материалы по двухфакторной аутентификации (NIST, 2020).

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

На главную BFOmetr →