RFC 6238
RFC 6238 — это спецификация, опубликованная в мае 2011 года Инженерным советом Интернета (IETF), которая описывает протокол TOTP (Time-based One-Time Password) — алгоритм генерации одноразовых паролей, зависящих от текущего времени. Данный стандарт является развитием более раннего алгоритма HOTP (HMAC-based One-Time Password), определённого в RFC 4226, и предназначен для повышения безопасности двухфакторной аутентификации (2FA) в компьютерных системах и сетях.
История и предпосылки создания
До появления TOTP основным стандартом для генерации одноразовых паролей был HOTP (RFC 4226, 2005 год). В нём пароль вычислялся на основе счётчика событий (например, порядкового номера попытки входа). Однако такой подход имел недостатки: необходимость синхронизации счётчика между сервером и клиентом, а также уязвимость к атакам, при которых злоумышленник мог перехватить последовательность паролей.
В 2008 году компания VeriSign (впоследствии проданная Symantec) предложила модификацию HOTP, где вместо счётчика использовалось текущее время. Эта идея была формализована в черновике, который после обсуждения и доработки стал RFC 6238. Авторами спецификации выступили Дэвид М’Раихи (David M’Raihi) и другие эксперты из VeriSign и IETF. Стандарт был принят в 2011 году и быстро стал основой для большинства современных приложений-аутентификаторов (например, Google Authenticator, Microsoft Authenticator, Authy).
Принцип работы
Алгоритм TOTP
TOTP основан на алгоритме HMAC-SHA-1 (или HMAC-SHA-256, HMAC-SHA-512) и использует секретный ключ, разделённый между сервером и клиентом (например, мобильным приложением). Пароль вычисляется по формуле:
`` TOTP = HOTP(K, T) ``
Где:
- K — секретный ключ (обычно 128-битный или 256-битный).
- T — значение временного штампа, преобразованное в целое число (количество интервалов времени с начала эпохи Unix — 1 января 1970 года 00:00:00 UTC).
Временной интервал (time step) по умолчанию составляет 30 секунд, но может быть изменён (например, 60 секунд). Текущее время на клиенте и сервере должно быть синхронизировано с точностью до нескольких секунд (обычно допускается расхождение до ±1 интервала).
Генерация пароля
- Получение временного штампа: сервер и клиент независимо вычисляют количество целых интервалов времени, прошедших с эпохи Unix.
- Применение HMAC: к секретному ключу и значению временного штампа применяется HMAC (обычно HMAC-SHA-1).
- Динамическая усечение: из HMAC-дайджеста извлекается 4-байтовое значение (31 бит), которое преобразуется в десятичное число.
- Формирование пароля: полученное число приводится к заданной длине (обычно 6 или 8 цифр) путём взятия остатка от деления на 10^N.
Верификация
Сервер, получив от пользователя пароль, вычисляет TOTP для текущего временного интервала, а также для соседних (обычно ±1 интервал) — чтобы компенсировать возможное расхождение часов. Если хотя бы одно из вычисленных значений совпадает с введённым паролем, аутентификация считается успешной.
Классификация и варианты
По длине пароля
- 6-значные коды — наиболее распространённый вариант (стандарт по умолчанию).
- 8-значные коды — используются реже, но обеспечивают большую криптостойкость (увеличивают пространство возможных паролей с 10^6 до 10^8).
По используемому хешу
- HMAC-SHA-1 — базовый вариант, определённый в RFC 6238.
- HMAC-SHA-256 и HMAC-SHA-512 — расширенные варианты, также поддерживаемые стандартом (указаны как опциональные).
По временному шагу
- 30 секунд — стандартное значение.
- 60 секунд — используется в некоторых системах для снижения нагрузки на сервер или при нестабильной синхронизации времени.
Применение
Двухфакторная аутентификация (2FA)
Основное применение TOTP — обеспечение второго фактора аутентификации при входе в учётные записи. Пользователь вводит не только пароль (что знает), но и одноразовый код из приложения-аутентификатора (что имеет). Это существенно снижает риск несанкционированного доступа при компрометации основного пароля.
Примеры использования
- Google Authenticator — одно из первых массовых приложений, реализующих TOTP.
- Microsoft Authenticator — поддерживает TOTP наряду с другими протоколами.
- Authy — популярное приложение с облачной синхронизацией.
- Банковские системы — многие банки (например, Сбербанк, Тинькофф) используют TOTP для подтверждения операций.
- Корпоративные системы — VPN, почтовые сервисы, облачные платформы (AWS, Azure, Google Cloud).
Преимущества и недостатки
Преимущества:
- Не требует сетевого соединения для генерации кода (работает офлайн).
- Простота реализации и интеграции.
- Высокая надёжность при правильной синхронизации времени.
Недостатки:
- Зависимость от точности часов на устройстве пользователя.
- Уязвимость к фишингу (злоумышленник может перехватить одноразовый код в реальном времени).
- Невозможность отзыва кода до истечения временного интервала (30 секунд).
Критика и альтернативы
Несмотря на широкое распространение, TOTP имеет ряд недостатков, которые критикуются специалистами по безопасности:
- Фишинговая уязвимость: одноразовый код может быть перехвачен злоумышленником через поддельный сайт и немедленно использован.
- Отсутствие защиты от MITM-атак: если злоумышленник контролирует канал связи, он может перехватить как пароль, так и TOTP-код.
- Синхронизация времени: при смене часового пояса или сбое часов на устройстве коды могут перестать совпадать.
В качестве альтернатив используются:
- U2F/WebAuthn — аппаратные ключи (например, YubiKey), обеспечивающие криптографическую защиту от фишинга.
- Push-уведомления — сервер отправляет запрос на подтверждение на мобильное устройство пользователя.
- Биометрическая аутентификация — отпечаток пальца, распознавание лица.
Тем не менее, TOTP остаётся одним из самых распространённых и доступных методов 2FA, особенно в потребительском сегменте.
Интересные факты
- Алгоритм TOTP лежит в основе Google Authenticator, который был выпущен в 2010 году, ещё до официального принятия RFC 6238.
- В 2018 году компания Google объявила о поддержке TOTP в своём приложении Google Authenticator для iOS и Android, что сделало стандарт ещё более популярным.
- В России TOTP активно используется в системах Госуслуги (через приложение «Госуслуги. Авторизация») и в ряде банковских приложений.
- Стандарт RFC 6238 не требует обязательного использования 6-значных кодов — длина может варьироваться, но на практике 6 цифр стали де-факто стандартом.
Источники
- RFC 6238 — TOTP: Time-Based One-Time Password Algorithm (IETF, 2011).
- RFC 4226 — HOTP: An HMAC-Based One-Time Password Algorithm (IETF, 2005).
- M’Raihi, D. et al. (2011). «TOTP: Time-Based One-Time Password Algorithm». Internet Engineering Task Force.
- Google Authenticator — официальная документация (Google).
- Microsoft Authenticator — документация (Microsoft).
- Стандарт двухфакторной аутентификации (FIDO Alliance).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →