Что такое двухфакторная аутентификация? Простое руководство
Двухфакторная аутентификация (2FA) — это вход, при котором нужно подтвердить, что вы — это вы, двумя разными способами: обычно тем, что вы знаете, например паролем, и тем, что у вас есть, например телефоном или аппаратным ключом безопасности. Если злоумышленник украл или подобрал ваш пароль, войти он всё равно не сможет без второго фактора. Это один из самых простых способов защитить важные аккаунты.
Почему это важно при создании приложений с ИИ
Когда вы просите у ИИ-конструктора «вход в систему», обычно получаете email и пароль. Это хорошее начало, но пароли повторно используют, на них попадаются при фишинге и их утекают. Если в приложении хранится что-то ценное — записи клиентов, счета, административные функции, настройки оплаты, — один украденный пароль может открыть всё.
2FA также влияет на решения, о которых вы поначалу можете не думать:
- Кто обязан её использовать. Необязательна для всех, обязательна для администраторов или обязательна для всех?
- Какие способы поддерживать. Коды из приложения, SMS, passkey, аппаратные ключи.
- Что происходит, если человек потерял доступ. Потерянный телефон — самый частый запрос в поддержку для любого приложения с 2FA.
- Где её проверяют. Проверка должна происходить на сервере. Экран 2FA, который только скрывает страницу в браузере, можно обойти.
Самому писать криптографию не нужно: её надёжно реализуют проверенные библиотеки и провайдеры аутентификации. Но знать, что просить, нужно.
Бытовая аналогия
Представьте банковскую ячейку. Чтобы её открыть, нужны ваше удостоверение личности (то, что банк проверяет: кто вы или что вы знаете) и физический ключ (то, что у вас есть). Вор, скопировавший вашу подпись, всё равно не получит ключ. Вор, вытащивший ключ из кармана, всё равно не пройдёт проверку личности.
2FA устроена так же. Пароль — это подпись; телефон или аппаратный ключ — физический ключ. Каждого из них по отдельности недостаточно.
Три вида факторов
Стандарты безопасности, например рекомендации Национального института стандартов и технологий США (NIST) по цифровой идентификации, делят факторы на три вида:
| Фактор | Примеры |
|---|---|
| То, что вы знаете | Пароль, PIN-код |
| То, что у вас есть | Телефон с приложением-аутентификатором, аппаратный ключ, устройство с passkey |
| То, что вы есть | Отпечаток пальца, лицо — обычно используется для разблокировки устройства, которое затем выполняет настоящую проверку |
Ключевое слово здесь — разные. Пароль плюс контрольный вопрос — это два факта, которые вы знаете, поэтому это не настоящая двухфакторная аутентификация. Если одна утечка раскрывает оба, это считается одним фактором.
Сравнение распространённых способов 2FA
| Способ | Как работает | Надёжность | Примечания |
|---|---|---|---|
| SMS-код | Код приходит на номер телефона | Самый слабый | Уязвим для SIM-swapping и фишинга, но всё же намного лучше отсутствия 2FA |
| Код на email | Код отправляется на почту | Слабый | Надёжен настолько, насколько надёжна почта |
| Приложение-аутентификатор (TOTP) | Приложение вроде Google Authenticator создаёт новый 6-значный код, обычно каждые 30 секунд | Хороший | Работает без интернета; всё ещё уязвим к фишингу, если поддельный сайт запрашивает код |
| Подтверждение push-уведомлением | Приложение спрашивает «Это вы?», и вы нажимаете «подтвердить» | Хороший | Следите за «усталостью от подтверждений», когда пользователи нажимают «да», лишь бы прекратить повторные запросы |
| Passkey или аппаратный ключ | Криптографический ключ на устройстве подтверждает, что вы на настоящем сайте | Самый сильный | Устойчив к фишингу, так как не отвечает на поддельный домен |
Рекомендации NIST относят способы, где нужно вводить код (SMS, email, приложения-аутентификаторы), к не устойчивым к фишингу, а отправку кодов по телефонной сети помечают как «ограниченную». Устойчивыми к фишингу считаются passkey и аппаратные ключи безопасности, основанные на стандартах WebAuthn и FIDO2.
Практический вывод: приложение-аутентификатор — сильный и простой вариант по умолчанию для большинства приложений, а passkey стоит предлагать, если пользователи готовы ими пользоваться.
Пример: 2FA для клиентского портала
Допустим, вы создали портал, через который бухгалтерская фирма передаёт клиентам налоговые документы. Вот как выглядит разумная настройка 2FA по шагам.
Включение. Клиентка Прия открывает настройки и нажимает «Включить двухфакторную аутентификацию». Приложение создаёт секрет и показывает его в виде QR-кода. Она сканирует код своим приложением-аутентификатором, и оно начинает показывать шестизначные коды. Она вводит текущий код обратно в портал, чтобы убедиться, что всё настроено. Приложение показывает десять резервных кодов и просит сохранить их в надёжном месте.
Последующие входы.
- Прия вводит email и пароль. Сервер их проверяет.
- Вместо того чтобы сразу пустить её внутрь, сервер помечает сессию как «пароль верен, второй фактор ожидается» и показывает экран ввода кода.
- Она вводит код из приложения. Сервер сверяет его с сохранённым секретом, допуская небольшое расхождение часов.
- Только теперь сервер создаёт полную сессию и позволяет ей увидеть документы.
Что видит злоумышленник. Если пароль Прии утёк с другого сайта, злоумышленник застревает на шаге 3. Каждая неверная попытка кода учитывается, и после нескольких ошибок аккаунт временно блокируется, а Прия получает письмо.
Потеря телефона. Прия входит с одним из резервных кодов, отключает 2FA и включает её заново с новым телефоном, получая новые резервные коды. Использованный код больше не сработает никогда.
Для сотрудников. Бухгалтеры фирмы видят файлы всех клиентов, поэтому портал требует 2FA для сотрудников: до подключения они не получают доступ к панели.
Основные термины
| Термин | Значение |
|---|---|
| 2FA / MFA | Двух- / многофакторная аутентификация: вход с помощью нескольких видов подтверждения. |
| Фактор | Один вид подтверждения: то, что вы знаете, имеете или есть. |
| TOTP | Одноразовый пароль на основе времени — меняющиеся коды в приложениях-аутентификаторах. |
| Общий секрет | Скрытое значение, которое задаётся через QR-код и на основе которого и приложение, и телефон создают совпадающие коды. |
| Резервные (восстановительные) коды | Одноразовые коды для входа, если вы потеряли второй фактор. |
| Passkey | Учётные данные для входа, которые хранятся на устройстве и используют криптографию с открытым ключом вместо пароля. |
| Аппаратный ключ безопасности | Небольшое физическое устройство (USB или NFC), которое выполняет ту же задачу, что и passkey. |
| SIM-swapping | Обман мобильного оператора, чтобы перенести номер человека на новую SIM-карту, и тогда SMS уходят злоумышленнику. |
| Фишинг | Поддельный сайт или сообщение, которое вынуждает людей отдать пароли или коды. |
| Step-up аутентификация | Повторный запрос второго фактора перед чувствительным действием, например сменой реквизитов для выплат. |
Частые ошибки и заблуждения
- «2FA делает аккаунт неприступным». Она делает взлом намного труднее. Фишинговые сайты всё же могут перехватить введённые коды в реальном времени, поэтому и существуют passkey.
- Проверка кода только в браузере. Если сервер выдаёт полную сессию сразу после пароля, экран с кодом — просто декорация. Сервер должен отказывать в доступе, пока второй фактор не пройден.
- Нет ограничения на попытки ввода кода. У шестизначного кода миллион возможных вариантов. Без ограничения частоты запросов и блокировок злоумышленник может просто перебирать коды.
- Забытое восстановление. Без резервных кодов каждый потерянный телефон становится обращением в поддержку или заблокированным клиентом.
- Небрежное хранение TOTP-секрета. Общий секрет должен храниться в базе в зашифрованном виде и никогда не показываться повторно после настройки.
- Возможность отключить 2FA без повторной проверки. Отключение 2FA или смена email должны требовать пароль и актуальный код.
- Пароль плюс контрольный вопрос как 2FA. Это не так — и то и другое относится к тому, что вы знаете.
Что просить у ИИ-конструктора
- «Добавь необязательную двухфакторную аутентификацию через приложение-аутентификатор (TOTP) с QR-кодом для настройки и подтверждением кодом перед включением».
- «При включении 2FA показывай десять одноразовых резервных кодов. Храни их в хешированном виде, как пароли».
- «Проверяй второй фактор на сервере: никакой полной сессии, пока он не пройден».
- «Ограничь число попыток ввода кода и блокируй вход на 15 минут после нескольких ошибок. В таких случаях отправляй пользователю письмо».
- «Требуй 2FA для аккаунтов администраторов».
- «Перед отключением 2FA или сменой email аккаунта запрашивай пароль и актуальный код».
- «Используй проверенную библиотеку или встроенную 2FA нашего провайдера аутентификации — не пиши криптографию сам».
- «Объясни, какой метод ты использовал и где хранятся секреты».
Если вы используете размещённый провайдер аутентификации, проверьте, есть ли у него 2FA или passkey: включить встроенную функцию обычно безопаснее, чем писать свой код. Пошаговая версия есть в статье как добавить двухфакторную аутентификацию, а основы входа описаны в статье что такое аутентификация.
Двухфакторная аутентификация в Mythex
Mythex не включает встроенной системы входа для пользователей вашего приложения, поэтому 2FA — часть того подхода к аутентификации, который вы выберете: собственный вход по email и паролю на базе базы данных проекта или размещённый провайдер, который поддерживает 2FA. Попросите агента добавить её в чате; ключи провайдера хранятся в секретах проекта, а не в самом чате. В рецепте документации добавление входа в приложение есть стартовый запрос, который можно адаптировать, а раздел безопасность приложений, которые вы создаёте описывает привычки работы с ключами. Перед запуском пройдите чек-лист безопасности для приложений, созданных с ИИ.
Вопросы
Что такое двухфакторная аутентификация простыми словами?
Двухфакторная аутентификация (2FA) означает, что для входа нужны два разных вида подтверждения: обычно пароль и код с телефона или аппаратный ключ безопасности. Тот, кто украл только пароль, всё равно не сможет войти.
2FA — то же самое, что MFA?
Почти. Многофакторная аутентификация (MFA) означает два и более факторов; двухфакторная — самый распространённый случай, когда их ровно два. В повседневной речи термины употребляются как взаимозаменяемые.
Безопасна ли двухфакторная аутентификация по SMS?
Она намного лучше одного пароля, но это самый слабый из распространённых вариантов. Текстовые сообщения можно перехватить или перенаправить через SIM-swapping, а поддельная страница входа может заставить людей ввести код. Приложения-аутентификаторы надёжнее, а passkey и аппаратные ключи — ещё надёжнее.
Нужна ли моему приложению двухфакторная аутентификация?
Если в аккаунтах хранятся деньги, личные данные или административные полномочия над другими пользователями, предложить 2FA стоит, а для администраторов её обычно требуют. Для простого любительского приложения её можно сделать необязательной или отложить.
Что делать, если пользователь потерял телефон?
Для этого существуют резервные коды: короткий список одноразовых кодов, которые показываются при включении 2FA. Без них восстановление обычно требует ручной проверки личности владельцем приложения, поэтому продумайте это до запуска.