Перейти к основному содержимому
  1. Posts/
  2. IAM и IdP решения./

TOTP vs WebAuthn vs Passwordless: в чём разница и что выбрать

··1542 слов·8 минут· loading · loading · ·
Stilicho2011
Автор
Stilicho2011
Пишу о homelab, self-hosting, автоматизации и open-source решениях
Оглавление
IAM-решения - This article is part of a series.
Part : This Article

Если вам понравилась настоящая статья, то можете поддержать автора став спонсором на бусти (ссылка в разделе контакты).

У меня на ютуб-канале и на сайте есть целая серия статей и роликов про IAM-решения: Authentik, Authelia, Keycloak и Zitadel. Во всех них так или иначе всплывают одни и те же три термина - TOTP, WebAuthn и Passwordless Login - как способы входа и второй фактор защиты. Но в ру-сегменте я ни разу не встречал внятного объяснения, чем они друг от друга отличаются на самом деле, а не на уровне “это тоже двухфакторка”. Решил закрыть этот пробел одной статьёй, чтобы потом просто на неё ссылаться из остальных.

Зачем вообще в этом разбираться
#

Пароль как единственный способ входа - штука, доказавшая свою несостоятельность многократно: пароли переиспользуют, их сливают базами при взломах, их фишат поддельными формами входа. Индустрия уже лет десять как активно двигается в сторону чего-то более надёжного, и сегодня даже далёкий от IT человек так или иначе сталкивается с этим - хотя бы через вход в Госуслуги по коду из приложения или через Face ID на телефоне.

Дальше разберу TOTP, WebAuthn и Passwordless Login по отдельности, а в конце - как между собой соотносятся WebAuthn и passwordless-подход, потому что путаница чаще всего именно тут.


1. TOTP - одноразовые коды по времени
#

TOTP (Time-based One-Time Password) - это метод двухфакторной аутентификации, при котором одноразовый код генерируется на основе текущего времени и общего секретного ключа. Это самый старый и самый привычный из трёх вариантов - тот самый шестизначный код в Google Authenticator, Authy, Bitwarden или Vaultwarden (я сам пользуюсь последним).

Как это работает на практике: при привязке сервис показывает QR-код, приложение его сканирует и получает секретный ключ. Дальше и сервис, и приложение независимо друг от друга каждые 30 секунд считают один и тот же код на основе этого ключа и текущего времени - именно поэтому важно, чтобы время на телефоне было синхронизировано. Пользователь просто вводит актуальный код в дополнение к паролю.

Сильные стороны:

  • Огромная зрелость и совместимость - TOTP поддерживает практически любой сервис с двухфакторкой, от банков до самописных self-hosted панелей.
  • Не требует подключения к интернету в момент входа - код считается локально на устройстве.
  • Ощутимо усиливает защиту обычного пароля почти без затрат на внедрение.

Слабые стороны:

  • TOTP - это дополнение к паролю, а не его замена. Пароль всё ещё должен быть надёжным: если его украли, TOTP-код - единственное, что стоит между злоумышленником и вашим аккаунтом.
  • Уязвим к фишингу в реальном времени: если жертву заманить на поддельную страницу входа и она введёт туда и пароль, и текущий TOTP-код, атакующий может тут же перепроковать оба значения на настоящем сайте. Это требует активной атаки “в моменте”, а не слитой базы - неприятный, но не самый массовый сценарий.

2. WebAuthn - аутентификация с помощью криптографии
#

WebAuthn (Web Authentication API) - открытый стандарт от W3C и FIDO Alliance, который позволяет входить в сервис с помощью криптографической пары ключей вместо пароля или кода.

Как это работает: при регистрации устройство генерирует пару ключей - приватный остаётся на устройстве (в защищённом чипе, TPM или Secure Enclave) и никогда никуда не передаётся, публичный отправляется на сервер и сохраняется в вашем профиле. При каждом входе сервер присылает случайный “челлендж”, устройство подписывает его приватным ключом, а сервер проверяет подпись публичным. Пароль в этой схеме вообще не участвует.

Практические реализации WebAuthn - это аппаратные ключи безопасности (YubiKey, SoloKey), встроенная биометрия (отпечаток пальца, Face ID, Windows Hello) и защищённые модули самого устройства.

Сильные стороны:

  • Устойчив к фишингу в принципе, а не “в основном”: подпись криптографически привязана к домену сайта, поэтому даже идеальная копия страницы входа не сможет получить рабочую подпись для настоящего сервера.
  • Нет пароля - нечего перехватывать и нечему утекать при взломе базы сервиса.
  • Хорошая поддержка биометрии и аппаратных токенов “из коробки” в современных браузерах и ОС.

Слабые стороны:

  • Требует поддержки со стороны и браузера, и конкретного сайта - для старых или самописных внутренних систем это может быть нетривиально прикрутить.
  • Перенос ключей между устройствами исторически был больным местом (об этом чуть ниже, в разделе про passkeys).
  • Аппаратные ключи вроде YubiKey - не самое дешёвое удовольствие, и я настоятельно рекомендую держать запасной ключ на случай утери или поломки основного - иначе рискуете остаться без доступа к собственным аккаунтам.

А что такое passkeys?
#

Отдельно стоит сказать про passkeys - это не отдельная технология, а маркетинговое имя для конкретного, “удобного” сценария использования WebAuthn, который активно продвигают Apple, Google и Microsoft последние пару лет. Ключевое отличие passkey от классического аппаратного WebAuthn-ключа - синхронизация: приватный ключ хранится не только на одном устройстве, а зашифрованно синхронизируется через облако (iCloud Keychain, Google Password Manager и подобные) между всеми устройствами пользователя. Это решает главную боль ранних версий WebAuthn - “я привязал YubiKey, а теперь у меня новый телефон и я в панике” - но сознательно немного жертвует моделью угроз в пользу удобства, так как приватный ключ теперь технически покидает конкретное железное устройство. Для большинства людей это разумный компромисс, для параноиков - повод оставаться на аппаратных ключах без синхронизации.


3. Passwordless Login - вход без пароля
#

Passwordless Login - это не конкретная технология, а общий подход: для входа вообще не используется пароль, вместо него - что-то из перечисленного:

  • по e-mail - сервис присылает одноразовую ссылку (magic link);
  • по SMS или мессенджеру - код подтверждения приходит на телефон;
  • через WebAuthn/passkey - криптографический вход без пароля (лично я использую либо Vaultwarden, либо Windows Hello, в зависимости от устройства);
  • через OAuth - вход через существующий аккаунт Google, GitHub, Microsoft и так далее.

Сильные стороны:

  • Нет пароля - нечего забывать, нечего использовать повторно на других сайтах, нечему утекать при компрометации базы.
  • Заметно упрощает сам процесс входа для пользователя - иногда буквально один клик.
  • Может выступать и как основной способ входа, и как дополнительный фактор.

Слабые стороны:

  • Если вариант завязан на почту или SMS, безопасность входа целиком зависит от безопасности этого стороннего канала - а SMS давно и заслуженно считается самым слабым звеном (перехват через SIM-swap - реальная и хорошо задокументированная угроза). Я бы рекомендовал не полагаться на SMS как единственный способ входа туда, где важна безопасность.
  • Раз пароля нет, вся защита аккаунта фактически переезжает на защиту самого канала входа (почты, номера телефона, устройства) - соответственно, эти вещи требуют не меньшего, а иногда и большего внимания к безопасности.

4. В чём разница между WebAuthn и Passwordless Login
#

Вот тут чаще всего и возникает путаница, потому что термины используются рядом и про одно и то же - но это разные уровни абстракции.

  • WebAuthn - это конкретный, современный и криптографически надёжный протокол/API, один из инструментов в наборе.
  • Passwordless Login - это цель или стратегия (“уберём пароль вообще”), которая может быть реализована через WebAuthn, а может - через куда менее надёжные magic-ссылки на почту или SMS-коды.

Иначе говоря: любой вход через WebAuthn - это passwordless по определению, но не любой passwordless-вход одинаково безопасен, потому что WebAuthn - это far cry от одноразовой ссылки на почту с точки зрения защиты от фишинга.

Сравнение WebAuthn и Passwordless Login в целом
#

ХарактеристикаWebAuthnPasswordless Login (в целом)
Что этоСтандарт и API для аутентификации с помощью криптографииОбщий подход к входу без пароля, любыми средствами
Технологическая базаАсимметричная криптография (пара ключей)Может быть чем угодно: WebAuthn, email-ссылки, одноразовые коды, биометрия
ПримерыYubiKey, passkeys, Windows Hello, Face ID, TPMMagic link на email, SMS-код, push-уведомление, WebAuthn
Устойчивость к фишингуОчень высокая - приватный ключ никогда не покидает контролируемую цепочку доверияСильно зависит от метода: SMS/e-mail заметно слабее, WebAuthn/биометрия - на уровне лучших практик
УдобствоБыстро, без ввода чего-либо, но нужно поддерживаемое устройствоЧасто ещё проще (один клик по ссылке), но иногда медленнее из-за ожидания письма/SMS
Требования к инфраструктуреСервер должен реализовать FIDO2/WebAuthn APIМожет быть проще: достаточно SMTP или SMS-шлюза
Годится как 2FAДаДа, но не всегда - зависит от конкретного метода

5. Итоговая таблица по всем трём
#

ТехнологияИспользует пароль?Завязан на время?Устойчив к фишингу?Типичный пример
TOTPДа, как дополнениеДаНетGoogle Authenticator, Vaultwarden
WebAuthnНетНетДаYubiKey, passkey, Touch ID
PasswordlessНетЗависит от методаЗависит от методаMagic link, SMS-код, WebAuthn

6. Как выбрать на практике
#

Из опыта настройки Authentik, Authelia, Keycloak и Zitadel в своём homelab я бы советовал так:

  • Нужен просто второй фактор к существующему паролю, максимально совместимый и без затрат - берите TOTP, он заведётся практически везде и не потребует нового железа.
  • Важна максимальная защита от фишинга и вы готовы один раз потратиться на аппаратный ключ (или обойтись встроенной биометрией устройства) - однозначно WebAuthn, в идеале в виде passkey, чтобы не мучиться с привязкой к единственному устройству.
  • Хотите вообще избавиться от паролей как класса риска - стройте passwordless-вход на основе WebAuthn/passkey, а magic-ссылки на почту или SMS используйте как запасной, а не основной путь входа.

На практике эти три подхода прекрасно комбинируются: у меня, например, пароль + TOTP закрывают базовый уровень сервисов, а всё, что торчит наружу и особенно критично, дополнительно защищено WebAuthn-ключом через тот же Authentik.

Выводы
#

TOTP - это усиление обычного пароля одноразовым кодом, самый совместимый и самый простой в внедрении вариант, но не защищённый от фишинга в реальном времени.

WebAuthn - это криптографически надёжный протокол входа без пароля, устойчивый к фишингу по своей природе; passkeys - его современная, синхронизируемая между устройствами реализация.

Passwordless Login - это общая стратегия отказа от паролей, которая может опираться на WebAuthn (тогда это по-настоящему надёжно) или на куда более слабые magic-ссылки и SMS-коды (тогда безопасность входа определяется безопасностью этого канала).


Полезные ссылки:

IAM-решения - This article is part of a series.
Part : This Article

Related

Authentik: обзор, архитектура, возможности и сравнение с Keycloak

··1013 слов·5 минут· loading · loading
Подробный обзор Authentik - open source системы для централизованной аутентификации и авторизации (IdP/SSO). Рассмотрим зачем нужны IAM-решения, архитектуру, ключевые функции и сравнение с альтернативами.

Установка Authelia в Docker | Полный гайд

··827 слов·4 минут· loading · loading
Пошаговая инструкция по установке и настройке Authelia в Docker - развёртывание, конфигурация 2FA, интеграция с Traefik через forwardAuth и разбор основных параметров конфига.

ZITADEL: современное IAM-решение с открытым исходным кодом

··460 слов·3 минут· loading · loading
Пошаговая инструкция по установке и настройке Zitadel для организации двухфакторной аутентификации с обратным прокси. Рассмотрены конфигурация пользователей, интеграция с Docker и рекомендации по повышению безопасности веб-сервисов.