Стандарты · otpauth-migration

Безопасно ли сканировать QR-код экспорта Google Authenticator?

Только если вы сами его сгенерировали на своём старом телефоне и немедленно переносите данные на новый. Если кто-то другой показывает вам этот QR-код — не сканируйте его.

Проверить пакет → Все стандарты →

Что это такое

Google Authenticator и ряд совместимых приложений (Aegis, Raivo OTP, 2FAS) позволяют «экспортировать» сохранённые аккаунты 2FA для переноса на новое устройство. Экспорт представляет собой QR-код с URI, начинающимся на otpauth-migration://. Внутри этого URI находится единый пакет в формате protocol buffer (схема Google MigrationPayload), содержащий все аккаунты сразу: издателя, имя аккаунта, секретный ключ, алгоритм, количество цифр, тип (HOTP / TOTP) и счётчик.

Формат изначально не был задокументирован, но был реверс-инжинирован и реализован несколькими совместимыми приложениями. Google впоследствии опубликовал спецификацию protobuf.

Один QR-код может содержать десятки аккаунтов. Визуально он неотличим от любого другого QR-кода.

Почему один QR-код пакета уникально опасен

Обычный QR-код otpauth:// для настройки опасно сканировать без запроса, но радиус поражения — один аккаунт. Радиус поражения миграционного QR-кода — каждый аккаунт в вашем аутентификаторе. Если злоумышленник сфотографирует экран с этим QR-кодом — у вас за спиной в кофейне, через камеру видеонаблюдения, которую вы не заметили, через прозрачное стеклянное окно — он уйдёт с возможностью обойти 2FA во всех затронутых аккаунтах. Навсегда. До тех пор, пока вы вручную не смените каждый секрет, что большинство сервисов делать не упрощают.

Секреты в пакете не имеют срока действия. В отличие от токена сессии (который истекает), секреты 2FA постоянны — до тех пор пока вы сами их не смените. Кто получил пакет, может генерировать корректные коды годами.

Именно поэтому наш сканер показывает результат «подозрительный» для каждого otpauth-migration:// QR-кода — не потому что формат сломан, а потому что обладание таким QR — это обладание вашими 2FA-учётными данными.

Что находится внутри (анатомия)

URI выглядит так:

otpauth-migration://offline?data=<urlsafe-base64-encoded-protobuf>

Тело в формате base64, после декодирования, представляет собой protobuf-сообщение MigrationPayload. Поля верхнего уровня:

Каждая запись otp_parameters содержит:

Что показывает наш сканер, а что намеренно скрывает

✓ Отображается

Для каждой записи в пакете результат проверки показывает issuer (ACME, GitHub, AWS), account name (alice@example.com) и тип (TOTP/HOTP). Это идентифицирует учётные записи, не раскрывая их секретов.

Версия схемы, индекс пакета, размер пакета и идентификатор пакета также отображаются — полезно для проверки того, что все QR-коды многочастного экспорта захвачены корректно.

✗ Никогда не декодируется

Необработанные байты secret никогда не попадают в вывод результата проверки. Наш анализатор проверяет наличие и длину зерна, но не возвращает его значение.

Это гарантируется набором тестов: мы передаём анализатору вручную созданные protobuf-нагрузки, содержащие контрольные строки (SECRET_SEED_1, SECRET_SEED_2), и проверяем, что эти строки не появляются в сериализованном выводе вердикта. Регрессия в этом месте приводит к сбою CI.

Когда (и как) им пользоваться

Законный сценарий: вы переходите с одного телефона на другой. Старый телефон генерирует QR-код в Google Authenticator или совместимом приложении. Новый телефон сканирует его немедленно, в контролируемой среде, только вами.

Опасные сценарии использования:

Если вы подозреваете, что QR-код миграции был скомпрометирован

Считайте это утечкой учётных данных для каждого аккаунта в пакете. Шаги по восстановлению:

  1. Войдите в каждый затронутый сервис и смените секрет 2FA. Большинство сервисов позволяют это сделать в разделе Аккаунт → Безопасность → Двухфакторная аутентификация → Отключить, затем заново подключить.
  2. Для сервисов, не поддерживающих смену секрета (редкость), удалите 2FA и добавьте заново через новый QR-код настройки.
  3. Проверьте историю входов в каждый затронутый аккаунт.
  4. Удалите оригинальный QR-код экспорта со всех устройств и из облачно синхронизируемых фотобиблиотек, где он мог сохраниться.

Злоумышленник с пакетом может генерировать корректные 2FA-коды годами — пока вы не смените секреты.

По теме

Проверьте ваш пакет

Загрузите изображение QR-кода или вставьте URI otpauth-migration://. Результат проверки покажет каждый аккаунт в пакете (без секретов) и подтвердит, что кодирование корректно.

Открыть сканер →