QRkoder

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 секунд, коды перестанут приниматься — включите автоматическую синхронизацию времени.

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

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

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