Вопрос или проблема
При использовании MS Authenticator с учетной записью Microsoft пользователь вводит адрес электронной почты или имя пользователя. После этого пользователь нажимает на одно из трех чисел в приложении MS Authenticator и входит в систему. Все хорошо.
Мой вопрос: как это работает?
Я нашел много информации о хешах, двухфакторной аутентификации, TOTP приложениях. Но ничего о теории, стоящей за MS Authenticator. У приложения есть закрытый ключ или что-то подобное и оно подписывает сертификат только в том случае, если было нажато правильное число? Или число на экране хешируется и с солью отправляется на сервер для аутентификации? Это две возможности, которые я предположил.
MS Authenticator предоставляет 2 режима аутентификации:
1. На основе уведомлений
Приложение, использующее MFA (например, MS Office 365), сначала запрашивает у пользователя пароль. Если он правильный, на следующем этапе приложение отправляет уведомление на смартфон, и пользователя просят подтвердить запрос на вход.
2. Сопоставление числа
Когда экземпляр MS Authenticator необходимо связать с какой-либо учетной записью, система аутентификации генерирует секретный код инициализации. Пользователь вводит этот код в MS Authenticator с помощью клавиатуры или через QR-код. Когда нужна аутентификация, MS Authenticator берет код инициализации и текущее время и генерирует случайное число, TOTP. Пользователь вводит это число в диалоговое окно подтверждения входа. Служба аутентификации генерирует TOTP, используя тот же код инициализации. Если введенное пользователем значение совпадает с полученным TOTP, аутентификация проходит успешно.
TOTP выглядит случайным. Но алгоритм детерминированный, основан на SHA. Если использовать один и тот же код инициализации на нескольких устройствах, все они генерируют одно и то же TOTP одновременно.
Алгоритм разработан так, чтобы даже зная несколько сгенерированных TOTPs, нельзя было восстановить код инициализации и сгенерировать правильный TOTP.
Для TOTP не требуется связь с сервером. MS Authenticator вычисляет счетчик на основе текущего времени. В течение 30-секундного интервала счетчик остается прежним. Таким образом, фактически счетчик используется для генерации TOTP. Время на сервере и на смартфоне должно быть близким друг к другу. Небольшие отклонения допустимы. Сервер вычисляет счетчик для текущего момента времени и нескольких прошлых и будущих значений. Например, разница в 5 секунд даст либо то же самое значение счетчика, либо счетчик-1, либо счетчик+1. Если отклонение находится в допустимом диапазоне, оно будет принято.
Если вы имеете в виду это: https://learn.microsoft.com/en-us/azure/active-directory/authentication/how-to-mfa-number-match
То, что вы видите, это просто обычный процесс TOTP. Приложение сводит весь процесс к одной цифре. Путем предоставления веб-сайтом цифры для подтверждения, оно выполняет две полезные вещи:
- оно упрощает задачу пользователя, позволяя ввести одно число, а не 6
- у вас есть некий уровень уверенности в том, что веб-сайт, к которому вы получаете доступ, — это тот сайт, который знает ваш секрет TOTP
Этот процесс помогает, в некотором роде, обеспечить то, что вы не стали жертвой MITM-атаки, обеспечивая при этом такое же удобство Push-MFA и избегая атак “усталости от MFA”.
Это немного грубо в реализации, но это помогает бороться с проблемами, с которыми MFA сталкивается в последнее время.
Ответ или решение
Microsoft Authenticator работает в двух основных режимах аутентификации: уведомления и сопоставление чисел. Оба метода предназначены для повышения безопасности доступа к учетным записям, добавляя второй фактор аутентификации (2FA).
### 1. Режим уведомления
Когда пользователь пытается войти в приложение, использующее многофакторную аутентификацию (например, Microsoft Office 365), он сначала вводит свой пароль. Если пароль правильный, приложение отправляет уведомление на зарегистрированный смартфон с Microsoft Authenticator. Пользователь должен подтвердить запрос на вход, что значительно повышает уровень безопасности, поскольку доступ к учетной записи требует подтверждения с устройства, которое находится у пользователя.
### 2. Режим сопоставления чисел
Этот метод подразумевает использование протокола TOTP (Time-based One-Time Password). При связывании Microsoft Authenticator с учетной записью, система аутентификации генерирует секретный код и предоставляет его пользователю. Пользователь вводит этот код в приложении Microsoft Authenticator, используя клавиатуру или сканируя QR-код.
Когда требуется аутентификация, Microsoft Authenticator генерирует одноразовый пароль (TOTP) на основе секретного кода и текущего времени. Пользователь вводит этот одноразовый пароль в окно подтверждения входа. Сервер, в свою очередь, повторно вычисляет TOTP, используя тот же секретный код и текущее время. Если введенный пользователем код совпадает с вычисленным на сервере, аутентификация проходит успешно.
### Механизм работы TOTP
TOTP работает на основе алгоритма, зависящего от времени, который использует хеш-функции SHA. Подобный подход делает алгоритм детерминированным – для одного и того же секретного ключа и текущего времени результат будет всегда одинаковым. Важно отметить, что даже зная несколько сгенерированных одноразовых паролей, невозможно восстановить секретный код, что добавляет уровень безопасности.
### Взаимодействие с сервером
Для генерации TOTP не требуется постоянная связь с сервером. MS Authenticator вычисляет одноразовый пароль на основе текущего времени и секретного ключа. Обычно одноразовые пароли обновляются каждые 30 секунд. Чтобы учесть небольшие расхождения во времени между устройством пользователя и сервером, сервер может проверить коды за несколько предыдущих и следующих временных промежутков.
### Борьба с атаками
Использование метода сопоставления чисел также значительно упрощает задачу для пользователя, который вводит только одну цифру вместо целого числа, и обеспечивает дополнительный уровень уверенности в том, что аутентификация происходит с подлинным сайтом. Это помогает защититься от атак “человек посередине” (MITM) и минимизирует проблемы с усталостью от многофакторной аутентификации (MFA fatigue), когда пользователи подвержены множественным запросам на аутентификацию.
Таким образом, Microsoft Authenticator сочетает удобство использования, безопасность и эффективность, применяя современные методы аутентификации для защиты учетных записей пользователей.