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 основан на следующих компонентах:
- Секретный ключ (shared secret) — случайная последовательность байт, обычно длиной 16–32 байта. Ключ генерируется сервером и передаётся клиенту при начальной настройке (например, в виде QR-кода или текстовой строки). Ключ должен храниться в тайне и быть уникальным для каждого пользователя.
- Тайм-степ (time step) — интервал времени, в течение которого пароль действителен. Стандартное значение — 30 секунд. Меньший интервал повышает безопасность, но увеличивает нагрузку на синхронизацию.
- Хеш-функция — используется для вычисления HMAC. По умолчанию — SHA-1, но RFC 6238 поддерживает SHA-256 и SHA-512.
- Функция 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 →