QRkoder

TOTP (Google Authenticator)

TOTP (RFC 6238) — алгоритм генерации одноразовых паролей на основе времени; QR-код передаёт секретный ключ приложению-аутентификатору при настройке двухфакторной защиты.

Что такое TOTP

TOTP (Time-based One-Time Password) — алгоритм из RFC 6238, опубликованного IETF в 2011 году. Он берёт секретный ключ, известный только серверу и вашему устройству, объединяет его с текущей меткой времени (Unix time ÷ 30) и прогоняет через HMAC-SHA1. Результат — 6-значный код, который меняется каждые 30 секунд. Верный код живёт ровно одно окно: использовал — сгорел.

Google Authenticator появился в 2010 году, за год до формализации стандарта, и по сей день остаётся самым узнаваемым TOTP-клиентом. Рядом стоят Microsoft Authenticator, Яндекс.Ключ, Authy, 1Password и десятки корпоративных решений — все они реализуют один и тот же RFC 6238, поэтому QR-код от любого сервиса читается любым совместимым приложением.

Как настроить TOTP через QR-код

Связка «QR-код + TOTP» работает через специальный URI-формат otpauth://. Когда сервис включает двухфакторку, он генерирует случайный секретный ключ длиной 160 бит (20 байт), кодирует его в Base32 и упаковывает ссылку вида:

otpauth://totp/Пример:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Пример&algorithm=SHA1&digits=6&period=30

Эта строка кодируется в QR-код и показывается пользователю. Пользователь сканирует — приложение извлекает секрет и начинает генерировать коды. Больше QR нигде не используется: это разовая передача секрета. Сам ключ нигде не отображается повторно, что и делает процедуру безопасной.

Параметры, зашитые в QR:

  • secret — Base32-строка секретного ключа, главная ценность всей схемы.
  • issuer — название сервиса, отображается в приложении.
  • algorithm — почти всегда SHA1; SHA256 и SHA512 в стандарте есть, но редки на практике.
  • digits — 6 (реже 8).
  • period — 30 секунд (реже 60).

TOTP против SMS-OTP

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

Обратная сторона — зависимость от сохранности устройства и точности часов. Если смартфон потерян без резервной копии секретов, восстановление займёт время. Если системные часы сбились на несколько минут, коды перестанут приниматься. Большинство серверов допускают погрешность ±1 период (±30 с) именно по этой причине.

NIST с 2017 года рекомендует не использовать SMS-OTP для государственных и корпоративных систем и считает TOTP минимальным приемлемым уровнем второго фактора. Для защиты аккаунтов с QR-кодами — генераторов динамических ссылок, аналитических кабинетов, платёжных систем — TOTP практически безальтернативен.

Частые вопросы

Можно ли использовать один QR-код TOTP на нескольких устройствах?

Да. QR-код содержит секрет — и этот секрет можно занести в несколько приложений одновременно, просто отсканировав код с разных устройств. Все они будут генерировать одинаковые коды, потому что алгоритм детерминирован: одинаковый секрет + одинаковое время = одинаковый результат. Это полезно как резервный фактор, но снижает безопасность: если одно устройство скомпрометировано, второй фактор практически аннулируется.

Что будет, если потерять телефон с Google Authenticator?

Зависит от подготовки. Большинство сервисов при настройке TOTP выдают резервные одноразовые коды (backup codes) — 8–10 штук, которые стоит распечатать или сохранить в менеджере паролей. Если их нет, придётся проходить процедуру восстановления аккаунта у каждого сервиса отдельно, часто через подтверждение личности. Authy и Google Authenticator поздних версий поддерживают зашифрованное облачное резервирование секретов.

Насколько безопасен TOTP — можно ли подобрать код?

6-значный код имеет 1 000 000 комбинаций, и живёт 30 секунд. За это время реально проверить несколько тысяч вариантов при быстром переборе, поэтому серверы ограничивают попытки ввода (rate limiting) и блокируют аккаунт после 3–5 неверных. На практике TOTP не взламывают перебором — атакуют социальной инженерией (фишинговая страница, которая в реальном времени проксирует введённый код на настоящий сайт). Защита от этого — аппаратные ключи (FIDO2/WebAuthn), которые привязаны к домену и не поддаются такой атаке.

Google Authenticator или Яндекс.Ключ — есть ли разница?

Алгоритмически — нет. Оба реализуют RFC 6238 и читают одни и те же otpauth:// QR-коды. Разница в экосистеме: Яндекс.Ключ поддерживает выгрузку секретов через сканирование QR при переходе на новый телефон (аналогично Google Authenticator с 2023 года). Microsoft Authenticator дополнительно поддерживает push-уведомления для входа в экосистему Microsoft без ввода кода. Для любых сторонних сервисов выбор приложения — вопрос удобства, не безопасности.

Почему код не принимается, хотя введён верно?

Три причины: расхождение часов на устройстве (проверьте автосинхронизацию времени), истечение 30-секундного окна в момент отправки формы (вводите новый код сразу после обновления), или сервер уже принял этот же код — повторное использование одного кода блокируется по стандарту. Реже — серверная реализация не допускает погрешность ±1 период, что нарушает RFC 6238. В этом случае проблема на стороне сервиса.

Создавайте QR-коды бесплатно

Динамические QR-коды с аналитикой, дизайном и без ограничений по сканированиям.

Начать бесплатно