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

TOTP — стандарт одноразовых паролей

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

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

Алгоритм использует счётчик времени — количество прошедших интервалов фиксированной длины от эпохи (по умолчанию эпоха UNIX, 1 января 1970 года). По умолчанию длина интервала составляет 30 секунд. Формула вычисления кода:

TOTP = HOTP(K, T), где T = floor((CurrentUnixTime - T0) / X)

  • K — общий секретный ключ, известный серверу и клиенту;
  • T0 — начальная эпоха (по умолчанию 0);
  • X — длина шага времени (по умолчанию 30 секунд).

Внутри вызывается функция HOTP, основанная на HMAC-SHA1 (допускаются также HMAC-SHA256 и HMAC-SHA512). Результат HMAC преобразуется в шестизначный десятичный код методом динамического усечения. Для проверки сервер вычисляет код для текущего и нескольких соседних интервалов времени (обычно ±1), чтобы учесть рассинхронизацию часов между клиентом и сервером.

История

В 2004 году ОАСИ (Open Authentication Standards Collaborative) выпустила спецификацию HOTP. В 2005 году алгоритм был стандартизирован IETF в RFC 4226. В 2011 году IETF опубликовал RFC 6238, описывающий TOTP как профиль HOTP с временной меткой вместо счётчика. Авторы стандарта — Дэвид Отэм (David Otham) и Сатьи Дас (Sathya Das) из компании VeriSign. Стандарт быстро получил широкое распространение: его поддержали Google (Google Authenticator), Microsoft, Apple (встроенный механизм кодов в iOS и macOS), а также множество сторонних приложений и аппаратных токенов.

Применение

TOTP реализуется в виде приложений-аутентификаторов, которые пользователь устанавливает на смартфон или компьютер. Наиболее известные реализации:

  • Google Authenticator — мобильное приложение для Android и iOS;
  • Microsoft Authenticator — поддерживает TOTP и push-уведомления;
  • Authy — кроссплатформенное приложение с облачным резервным копированием;
  • FreeOTP — свободное открытые исходное приложение от Red Hat;
  • Aegis Authenticator — свободное приложение для Android с шифрованием хранилища;
  • 1Password, Bitwarden — менеджеры паролей со встроенной генерацией TOTP.

Помимо программных решений существуют аппаратные токены (например, YubiKey в режиме TOTP) и встроенные функции аппаратных ключей FIDO2.

Настройка

При активации TOTP пользователь сканирует QR-код, содержащий URI вида otpauth://totp/Пример:пользователь?secret=JBSWY3DPEHPK3PXP&issuer=Пример&algorithm=SHA1&digits=6&period=30. Сервер генерирует секретный ключ (обычно 160 бит в base32), сохраняет его в базе данных и передаёт клиенту. Далее при каждом входе пользователь вводит пароль и текущий шестизначный код из приложения-аутентификатора.

Достоинства и ограничения

К достоинствам TOTP относятся отсутствие необходимости в канале связи между клиентом и сервером при генерации кода, низкие требования к устройству (подойдёт любое устройство с часами), а также открытость стандарта. Код не отправляется по сети, поэтому перехватить его сложнее, чем SMS-код.

К ограничениям относится необходимость синхронизации времени между устройством и сервером, уязвимость к фишингу (код можно ввести на поддельном сайте), а также риск компрометации секретного ключа при физическом доступе к устройству или при краже QR-кода. В отличие от аппаратных ключей FIDO2, TOTP не обеспечивает привязку к конкретному домену, что делает его менее устойчивым к атакам типа «man-in-the-middle».

Стандарты и документы

  • RFC 4226 — HOTP: HMAC-based One-Time Password Algorithm (2005)
  • RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (2011)
  • RFC 7642, RFC 7644 — связанные стандарты протокола SCIM для управления учётными записями
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru