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

Временный одноразовый пароль

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

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

Алгоритм TOTP основан на хешировании с использованием секретного ключа и значения текущего времени. Генерация пароля происходит в несколько этапов:

  1. Синхронизация времени. Сервер и клиентское устройство должны иметь синхронизированные часы (обычно с точностью до нескольких секунд). В качестве временной метки используется количество секунд, прошедших с начала эпохи Unix (1 января 1970 года, 00:00:00 UTC), разделённое на заданный интервал (например, 30 секунд). Таким образом, временная метка меняется каждые 30 секунд.
  1. Секретный ключ. При первоначальной настройке генерируется случайный секретный ключ (обычно 128-160 бит). Этот ключ передаётся клиенту (например, через QR-код или текстовую строку) и сохраняется на сервере.
  1. Генерация HMAC. К секретному ключу и временной метке применяется алгоритм HMAC-SHA1 (реже HMAC-SHA256 или HMAC-SHA512). Результатом является хеш-значение.
  1. Извлечение кода. Из полученного хеша извлекается часть битов (обычно 31 бит), которая преобразуется в шести- или восьмизначное десятичное число. Это число и является одноразовым паролем.
  1. Проверка. Пользователь вводит сгенерированный код на сайте или в приложении. Сервер, зная секретный ключ и текущее время, вычисляет ожидаемый код и сравнивает его с введённым. Если коды совпадают, аутентификация считается успешной.

История

Алгоритм TOTP был разработан как эволюция алгоритма HOTP (HMAC-based One-Time Password, RFC 4226), который генерировал пароли на основе счётчика (количества предыдущих попыток). HOTP имел недостаток: после каждого использования счётчик увеличивался, что требовало синхронизации между клиентом и сервером. TOTP, предложенный в 2008 году группой авторов (Дэвид М’Раихи, Сяоюн Чжэн, Хуан Мануэль Гонсалес, Йохан Йоханссон), устранил эту проблему, используя время вместо счётчика. Стандарт RFC 6238 был опубликован в мае 2011 года.

Первоначально TOTP применялся в корпоративных системах и банковских приложениях. С середины 2010-х годов он стал массово внедряться в интернет-сервисах (Google, Facebook* (организация признана экстремистской и запрещена в РФ), Microsoft, Dropbox и др.) как часть двухфакторной аутентификации.

Классификация

В зависимости от способа реализации и области применения выделяют несколько типов TOTP:

  • Программные токены — приложения-генераторы на смартфонах или компьютерах (Google Authenticator, Authy, Microsoft Authenticator).
  • Аппаратные токены — физические устройства (например, YubiKey, RSA SecurID), которые генерируют коды без подключения к сети.
  • Встроенные реализации — встроенные в операционные системы (например, iOS, Android) или браузеры (Chrome, Firefox) модули.

По длине кода TOTP обычно генерирует шестизначные пароли, но возможны варианты с 7 или 8 цифрами.

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

Алгоритм

Основой TOTP является HMAC-SHA1. В стандарте RFC 6238 также допускается использование HMAC-SHA256 и HMAC-SHA512. Параметры алгоритма:

  • T0 — начальное время (обычно 0, соответствует началу эпохи Unix).
  • X — временной интервал (по умолчанию 30 секунд, может быть 60 или 90 секунд).
  • Ключ — секретный ключ, обычно представленный в формате Base32.

Формула генерации: TOTP = Truncate(HMAC-SHA1(K, T)), где K — секретный ключ, T — количество временных интервалов от T0 до текущего времени.

Безопасность

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

  • Фишингу — злоумышленник может запросить код у пользователя, имитируя легитимный сервис.
  • Перехвату кода — если злоумышленник получает код в момент его действия, он может его использовать.
  • Синхронизации времени — рассинхронизация часов более чем на несколько секунд приводит к ошибкам аутентификации. Для решения этой проблемы серверы обычно принимают коды, сгенерированные в пределах небольшого временного окна (например, ±1-2 интервала).

Сравнение с HOTP

ПараметрTOTPHOTP
Основной параметрВремяСчётчик
Действительность кодаОграничена временем (30-60 с)До следующего использования
Необходимость синхронизацииТочное времяСчётчик (может рассинхронизироваться)
Устойчивость к переборуВысокая (код быстро устаревает)Средняя (счётчик предсказуем)

Применение

Двухфакторная аутентификация

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

Банковские системы

Многие банки (например, Сбербанк, ВТБ, Альфа-Банк) используют TOTP в мобильных приложениях для подтверждения переводов и входа в систему. Код генерируется на устройстве пользователя и действителен в течение 30-60 секунд.

Корпоративные сети

В организациях TOTP применяется для защиты доступа к VPN, корпоративной почте, CRM-системам и другим внутренним ресурсам. Часто используется в сочетании с аппаратными токенами.

Интернет-сервисы

Практически все крупные интернет-платформы (Google, Facebook* (организация признана экстремистской и запрещена в РФ), Apple, Microsoft, Telegram, Discord) поддерживают TOTP в качестве опции двухфакторной аутентификации.

Примеры реализации

Google Authenticator

Одно из самых популярных приложений, реализующих TOTP. Приложение генерирует шестизначные коды, действительные в течение 30 секунд. Ключ передаётся через QR-код или текстовую строку.

Authy

Приложение, поддерживающее TOTP, с возможностью резервного копирования ключей в облако (с шифрованием). Поддерживает несколько устройств.

YubiKey

Аппаратный токен, который генерирует TOTP-коды при нажатии кнопки. Не требует батареи и подключения к сети.

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

  • Алгоритм TOTP описан в стандарте RFC 6238, который является открытым и бесплатным для использования.
  • Временной интервал в 30 секунд выбран как компромисс между безопасностью (короткое время действия) и удобством (пользователь успевает ввести код).
  • Некоторые сервисы (например, Steam) используют модифицированную версию TOTP с более длинными кодами (5-7 символов) и интервалом в 30 секунд.
  • TOTP не требует подключения к интернету для генерации кода — все вычисления производятся локально на устройстве.

Критика

Несмотря на широкое распространение, TOTP имеет недостатки:

  • Зависимость от времени. При сильном рассинхроне часов (например, после смены часового пояса) код может не совпадать. Решается ручной синхронизацией или использованием нескольких временных окон.
  • Фишинг. Злоумышленники могут создать поддельный сайт, который запрашивает TOTP-код, и использовать его для входа на настоящий сайт.
  • Уязвимость к SIM-сваппингу. Если злоумышленник получает доступ к SIM-карте пользователя, он может перехватить SMS-коды, но TOTP к этому не уязвим (так как генерируется локально).
  • Отсутствие защиты от вредоносного ПО. Если устройство пользователя заражено, злоумышленник может перехватить секретный ключ или сгенерированные коды.

Источники

  • RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (2011).
  • RFC 4226 — HOTP: An HMAC-Based One-Time Password Algorithm (2005).
  • M’Raïhi, D., Zheng, X., González, J. M., Johansson, J. «TOTP: Time-Based One-Time Password Algorithm» (2008).
  • Документация Google Authenticator.
  • OWASP — Time-based One-Time Password (TOTP) Cheat Sheet.

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

На главную BFOmetr →