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. В этом случае проблема на стороне сервиса.