Временный одноразовый пароль
Временный одноразовый пароль (TOTP, Time-based One-Time Password) — это алгоритм генерации одноразовых паролей, основанный на текущем времени. Пароль действителен в течение короткого временного интервала (обычно 30 или 60 секунд) и генерируется с использованием секретного ключа, известного как серверу аутентификации, так и клиентскому устройству пользователя. TOTP является стандартом (RFC 6238) и широко применяется в двухфакторной аутентификации (2FA) для повышения безопасности учётных записей.
Принцип работы
Алгоритм TOTP основан на хешировании с использованием секретного ключа и значения текущего времени. Генерация пароля происходит в несколько этапов:
- Синхронизация времени. Сервер и клиентское устройство должны иметь синхронизированные часы (обычно с точностью до нескольких секунд). В качестве временной метки используется количество секунд, прошедших с начала эпохи Unix (1 января 1970 года, 00:00:00 UTC), разделённое на заданный интервал (например, 30 секунд). Таким образом, временная метка меняется каждые 30 секунд.
- Секретный ключ. При первоначальной настройке генерируется случайный секретный ключ (обычно 128-160 бит). Этот ключ передаётся клиенту (например, через QR-код или текстовую строку) и сохраняется на сервере.
- Генерация HMAC. К секретному ключу и временной метке применяется алгоритм HMAC-SHA1 (реже HMAC-SHA256 или HMAC-SHA512). Результатом является хеш-значение.
- Извлечение кода. Из полученного хеша извлекается часть битов (обычно 31 бит), которая преобразуется в шести- или восьмизначное десятичное число. Это число и является одноразовым паролем.
- Проверка. Пользователь вводит сгенерированный код на сайте или в приложении. Сервер, зная секретный ключ и текущее время, вычисляет ожидаемый код и сравнивает его с введённым. Если коды совпадают, аутентификация считается успешной.
История
Алгоритм 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
| Параметр | TOTP | HOTP |
|---|---|---|
| Основной параметр | Время | Счётчик |
| Действительность кода | Ограничена временем (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 →