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

TOTP

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

История

Идея одноразовых паролей возникла в 1980-х годах. Первым широко распространённым стандартом стал HOTP (HMAC-based One-Time Password), описанный в RFC 4226 в 2005 году. HOTP генерировал пароли на основе счётчика, который увеличивался при каждом использовании. Однако этот подход имел недостаток: серверу и клиенту необходимо было синхронизировать состояние счётчика, что могло приводить к рассинхронизации.

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

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

TOTP основан на криптографической функции HMAC-SHA1 (или HMAC-SHA256, HMAC-SHA512) и текущем времени. Процесс генерации пароля состоит из нескольких шагов:

  1. Секретный ключ — генерируется сервером при первой настройке аутентификации. Обычно передаётся пользователю в виде QR-кода или строки символов. Ключ хранится как на сервере, так и на устройстве пользователя (например, в приложении-аутентификаторе).
  1. Временной шаг — фиксированный интервал времени, обычно 30 секунд. Стандарт допускает и другие значения (например, 60 секунд), но 30 секунд является наиболее распространённым.
  1. Вычисление временного значения — текущее время в формате Unix timestamp (количество секунд с 1 января 1970 года) делится на длительность временного шага. Результат округляется вниз до целого числа. Например, для timestamp = 1700000000 и шага 30 секунд временное значение будет равно 56666666.
  1. Генерация HMAC — на основе секретного ключа и временного значения вычисляется HMAC-хеш. Алгоритм HMAC может использовать SHA-1, SHA-256 или SHA-512.
  1. Извлечение кода — из полученного хеша извлекается динамическое двоичное значение (Dynamic Truncation). Затем это значение приводится к десятичному числу, длина которого обычно составляет 6 цифр (допускается 7 или 8 цифр). Если полученное число короче заданной длины, оно дополняется ведущими нулями.
  1. Отображение — полученный код отображается на устройстве пользователя и вводится в интерфейсе сервиса для подтверждения аутентификации.

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

Характеристики

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

Недостатки

Применение

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

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

Приложения-аутентификаторы

Для генерации TOTP-кодов используются специализированные приложения, такие как:

Эти приложения хранят секретные ключи и генерируют коды на основе текущего времени. Некоторые из них поддерживают резервное копирование ключей в облако (например, Authy) или синхронизацию между устройствами.

Интеграция в сервисы

TOTP поддерживается большинством крупных интернет-сервисов, включая:

Аппаратные токены

Некоторые аппаратные устройства, такие как YubiKey, поддерживают генерацию TOTP-кодов. Они хранят секретные ключи и отображают коды на встроенном дисплее или передают их через USB/NFC. Аппаратные токены считаются более безопасными, так как ключи физически изолированы от операционной системы.

Альтернативы и сравнение

HOTP

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

SMS-коды

Многие сервисы используют отправку одноразовых кодов по SMS. Этот метод менее безопасен, так как SMS-сообщения могут быть перехвачены (например, через атаки SIM-свопинга) или перехвачены злоумышленниками через уязвимости в сетях сотовой связи. TOTP считается более безопасным, так как не зависит от внешних каналов связи.

Push-уведомления

Некоторые сервисы (например, Microsoft Authenticator) предлагают аутентификацию через push-уведомления, где пользователь просто нажимает «Подтвердить» на экране телефона. Этот метод удобнее, но требует подключения к интернету и может быть уязвим к атакам типа «MFA fatigue» (когда злоумышленник многократно отправляет запросы, чтобы утомить пользователя и заставить его подтвердить вход).

WebAuthn / FIDO2

Стандарты WebAuthn и FIDO2 используют криптографические ключи (асимметричное шифрование) для аутентификации. Этот подход считается более безопасным, чем TOTP, так как не требует ввода кода вручную и устойчив к фишингу. Однако WebAuthn требует поддержки со стороны браузера и устройства, что не всегда доступно.

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

Критика и ограничения

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

Также отмечается, что TOTP не защищает от атак типа «человек посередине» (MITM), если злоумышленник может перехватить и ретранслировать трафик в реальном времени.

Несмотря на эти недостатки, TOTP остаётся одним из самых популярных и доступных методов двухфакторной аутентификации благодаря своей простоте, открытости и независимости от внешних сервисов.

Источники

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

На главную BFOmetr →