2FA через QR
Настройка двухфакторной аутентификации через сканирование QR-кода с otpauth://-URI: приложение-аутентификатор считывает секретный ключ и начинает генерировать одноразовые TOTP-коды, меняющиеся каждые 30 секунд по RFC 6238.
Как 2FA по QR работает
При подключении двухфакторной аутентификации сервис генерирует уникальный секретный ключ — случайную строку Base32 длиной 16–32 символа. Ключ кодируется в QR-код. Пользователь сканирует его аутентификатором — и приложение получает ключ без ввода с клавиатуры.
Дальше обе стороны независимо вычисляют шестизначный код: берут секретный ключ, текущее время (с точностью до 30-секундного окна) и применяют HMAC-SHA1. Результат усекается до 6 цифр. Если цифры совпали — вход разрешён. Этот механизм называется TOTP (Time-based One-Time Password) и описан в RFC 6238.
Структура otpauth URI
QR-код для 2FA содержит специальный URI. Конкретный пример:
otpauth://totp/GitHub:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub&algorithm=SHA1&digits=6&period=30
Расшифровка полей:
- totp — алгоритм. TOTP (RFC 6238) — временной, код меняется каждые N секунд. HOTP (RFC 4226) — счётчиковый, меняется при каждом использовании. Почти везде используется totp.
- GitHub:user@example.com — метка аккаунта «Сервис:логин». Отображается в списке записей аутентификатора.
- secret=JBSWY3DPEHPK3PXP — секретный ключ в Base32. Главное, что передаётся при настройке. Кто знает ключ — генерирует коды.
- issuer=GitHub — название издателя. Используется для группировки в приложениях с папками.
- algorithm=SHA1 — хэш-функция. SHA1 — стандарт де-факто. SHA256 и SHA512 указаны в RFC, но не все аутентификаторы их поддерживают.
- digits=6 — длина кода. Обычно 6, реже 8.
- period=30 — период смены в секундах. Стандарт — 30.
Приложения-аутентификаторы
- Google Authenticator (iOS / Android) — самый распространённый. С 2023 года поддерживает синхронизацию через Google-аккаунт.
- Microsoft Authenticator (iOS / Android) — хорош для корпоративных сред с Azure AD, поддерживает push-уведомления для Microsoft-аккаунтов.
- Authy (iOS / Android / Desktop) — зашифрованные облачные бэкапы, несколько устройств. Удобен при смене смартфона.
- Yandex Key (iOS / Android) — оптимален для Яндекс-аккаунтов, работает с любыми TOTP-сервисами.
- Aegis Authenticator (Android, open source) — зашифрованный локальный бэкап, экспорт в JSON, без облака.
- FreeOTP (iOS / Android, open source) — минималистичное приложение без аналитики и облака.
Частые вопросы
Чем 2FA через QR отличается от пуш-подтверждений в Сбере или T-Bank?
Принципиально разные механизмы. TOTP по QR — автономный: приложение генерирует код математически, без интернета и без участия сервера в момент входа. Банковские пуши — централизованные: сервер отправляет запрос на подтверждение напрямую на смартфон через push-канал. Пуши удобнее (одна кнопка вместо 6 цифр), но уязвимы к SIM-своппингу и перехвату push-токена. TOTP устойчив к этим атакам: без секретного ключа код не получить ни по телефону, ни через компрометацию push-канала.
Что будет, если потерять смартфон с аутентификатором?
Без резервной копии — проблема. Большинство сервисов при настройке 2FA выдают одноразовые коды восстановления (8–16 кодов по 10 символов) — их нужно сохранить в менеджере паролей или распечатать. Если коды тоже потеряны, придётся обращаться в поддержку с верификацией личности. Используйте Authy с облачным бэкапом или регулярно экспортируйте ключи через Aegis, чтобы не попасть в такую ситуацию.
Безопасно ли сканировать QR для 2FA с экрана монитора?
Да, это стандартная практика. QR генерируется на лету и нигде не сохраняется как изображение. Главная угроза — quishing-атака: поддельная страница входа с поддельным QR для 2FA. Убедитесь, что находитесь на настоящем сайте сервиса (HTTPS, корректный домен) — тогда QR достоверен. Отдельная проблема — вредоносные URL в QR-кодах с «поддержки» в мессенджерах: они могут вести не на реальный сервис, а на копию-ловушку. Для дополнительной защиты аккаунта рассмотрите QR-коды с паролем для внутренних корпоративных ресурсов.
Почему код в аутентификаторе иногда уже почти истёк, пока его вводишь?
TOTP-коды меняются строго каждые 30 секунд по UTC. Если открыли аутентификатор в 29-й секунде окна — у вас ровно секунда. Большинство сервисов принимают код текущего и предыдущего окна ±30 секунд, чтобы компенсировать расхождение часов. Если часы на смартфоне отстают или спешат более чем на 90 секунд, коды перестанут приниматься — включите автоматическую синхронизацию времени.