Как работает Google Authenticator (или другие типы 2-факторных аутентификаторов)?

Google authenticator обычно используется для входа в наши учетные записи, когда включена 2-факторная аутентификация. Как это гарантирует безопасность?
  
Google Authenticator — это программный аутентификатор, который реализует двухэтапную службу проверки. На приведенной ниже диаграмме представлены подробные сведения.

Здесь задействованы два этапа:

  • Этап 1 — Пользователь включает двухэтапную верификацию Google
  • Этап 2 — Пользователь использует аутентификатор для входа в систему и т.д.

Давайте посмотрим на эти этапы.
 
Этап 1
Шаги 1 и 2: Боб открывает веб-страницу, чтобы включить двухэтапную проверку. Интерфейс запрашивает секретный ключ. Служба аутентификации генерирует секретный ключ для Боба и сохраняет его в базе данных.
 
Шаг 3: Служба аутентификации возвращает URI интерфейсу. URI состоит из источника ключа, имени пользователя и секретного ключа. URI отображается в виде QR-кода на веб-странице.
 
Шаг 4: Затем Боб использует Google Authenticator для сканирования сгенерированного QR-кода. Секретный ключ хранится в аутентификаторе.
 
Этап 2
Шаги 1 и 2: Боб хочет войти на веб-сайт с помощью двухэтапной проверки Google. Для этого ему нужен пароль. Каждые 30 секунд Google Authenticator генерирует 6-значный пароль с использованием алгоритма TOTP (одноразовый пароль на основе времени). Боб использует пароль для входа на веб-сайт.
 
Шаги 3 и 4: Интерфейс отправляет пароль Боба на серверную часть для аутентификации. Служба аутентификации считывает секретный ключ из базы данных и генерирует 6-значный пароль, используя тот же алгоритм TOTP, что и клиент.
 
Шаг 5: Служба аутентификации сравнивает два пароля, сгенерированных клиентом и сервером, и возвращает результат сравнения на передний план. Боб может продолжить процесс входа в систему только в том случае, если два пароля совпадают.
 
Безопасен ли этот механизм аутентификации?

  • Могут ли другие получить секретный ключ?
    Нам нужно убедиться, что секретный ключ передается по протоколу HTTPS. Клиент аутентификатора и база данных хранят секретный ключ, и нам нужно убедиться, что секретные ключи зашифрованы.
  • Могут ли хакеры угадать 6-значный пароль?
    Нет. Пароль состоит из 6 цифр, поэтому сгенерированный пароль содержит 1 миллион потенциальных комбинаций. Кроме того, пароль меняется каждые 30 секунд. Если хакеры хотят угадать пароль за 30 секунд, им нужно вводить 30 000 комбинаций в секунду.

👉 Обращаюсь к вам: Какие другие устройства 2-факторной аутентификации вы использовали?