Как работает двухфакторная аутентификация в Google Authenticator?

«Как работает двухфакторная аутентификация в Google Authenticator?» — вопрос из категории Тестирование безопасности, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Google Authenticator — это мобильное приложение, реализующее двухфакторную аутентификацию (2FA) по стандарту TOTP (Time-Based One-Time Password). Оно генерирует одноразовые 6-значные коды, которые используются как второй фактор при входе в аккаунт (первый фактор — пароль).

Принцип работы:

  1. Настройка: Пользователь связывает сервис (например, GitHub) с приложением. Сервер генерирует секретный ключ (обычно в формате Base32) и отображает его в виде QR-кода. Приложение сканирует код и сохраняет ключ локально.
  2. Генерация кода: И сервер, и приложение независимо вычисляют код на основе:
    • Общего секретного ключа.
    • Текущего времени, разделённого на интервалы (обычно 30 секунд).
  3. Верификация: Пользователь вводит сгенерированный код в форму входа. Сервер вычисляет свой код за тот же временной интервал и сверяет его с введённым.

Пример генерации TOTP-кода на Python (используя библиотеку pyotp):

import pyotp
import time

# 1. Генерация секретного ключа (происходит на сервере при подключении 2FA)
secret = pyotp.random_base32()  # Например: 'JBSWY3DPEHPK3PXP'
print(f"Секретный ключ: {secret}")

# 2. Создание TOTP-объекта
totp = pyotp.TOTP(secret, interval=30)  # Код меняется каждые 30 сек.

# 3. Получение текущего кода (так делает приложение)
current_otp = totp.now()
print(f"Текущий код: {current_otp}")

# 4. Верификация кода (так делает сервер)
is_valid = totp.verify(current_otp)
print(f"Код верен? {is_valid}")

Ключевые преимущества:

  • Работает офлайн: Для генерации кода не нужен интернет, так как используется только секрет и время устройства.
  • Высокая безопасность: Код действителен очень короткое время и используется один раз.
  • Универсальность: Стандарт TOTP поддерживается множеством сервисов и приложений (не только Google Authenticator).