Skip to content
PПромтбук
RUEN
01Безопасность

Дизайн 2FA

TOTP / SMS / passkey: enrollment UX, recovery codes, lost-device flow, обязательность по ролям.

Спроектируй 2FA для {{product}}. Сегменты: {{user_segments}}.

Шаг 1: выбор факторов

Рекомендованный набор (в порядке приоритета)

  1. Passkey (WebAuthn) — лучший UX и безопасность, default где можно
  2. TOTP (Google Authenticator, 1Password, Authy) — отлично, кросс-платформенно
  3. Recovery codes — backup-фактор, всегда вместе с любым основным
  4. Security key (Yubikey) — для enterprise / admin
  5. SMS — только как fallback, никогда как единственный метод

Что НЕ использовать

  • Email как 2-й фактор (это уже 1-й — пароль идёт через email reset)
  • Push без подтверждения номера (MFA fatigue → юзер просто approve)
  • Только SMS (SIM-swap)

Шаг 2: обязательность по сегментам

СегментПолитика
Admin / staffMandatory, passkey или TOTP, без SMS
EnterpriseMandatory (через SSO/SAML или 2FA)
Paid customersStrongly recommended, prompt при login
FreeOptional, ненавязчиво
После suspicious activityForced enrollment до access

Шаг 3: enrollment UX

Точка входа

  • Settings → Security → «Add 2FA»
  • Post-signup nudge для paid: «Защитите аккаунт за 60 секунд»
  • Forced для admin при первом логине

Поток (TOTP пример)

  1. Введение: «Что это и зачем» (2-3 строки, не учебник)
  2. Выбор метода: карточки с tradeoffs
  3. QR-код + ручной ключ для копирования
  4. Подтверждение: ввести код из приложения
  5. Recovery codes — обязательный экран, заставь скачать/распечатать
  6. Confirmation: 2FA активна, что изменится при следующем логине

Passkey enrollment

  1. «Use this device as your key» — кнопка
  2. Native browser prompt (Touch ID / Windows Hello)
  3. Confirm + recovery codes
  4. Опция: add another device

Шаг 4: логин с 2FA

Стандартный

  1. Email + password → success
  2. Prompt: «Enter 6-digit code» / «Use passkey»
  3. Опция «Trust this device for 30 days» (cookie + binding, не просто localStorage)
  4. Success → app

Edge cases

  • Wrong code 5 раз → temporary lockout (15 мин)
  • Lost device → ссылка «Use recovery code» прямо на экране
  • Recovery code исчерпан → support contact + identity verification flow

Шаг 5: recovery flow (самое важное)

Когда recovery codes использованы

  • Принять, отметить код как used (single-use!)
  • После логина — predзагрузить генерацию новых
  • Опция перенастроить 2FA

Когда нет ни кодов, ни устройства

  • Account recovery через email + cooling-off (24-72ч)
  • Identity verification: фото документа / known device / billing info / human review
  • НЕ давать мгновенный bypass через email (это убивает 2FA)
  • Уведомить юзера во ВСЕ доступные каналы о попытке recovery

Шаг 6: уведомления

Обязательные emails

  • 2FA enabled — confirmation
  • 2FA disabled — alert (даже если сам отключил, в случае хайджека ловим)
  • New 2FA method added
  • Recovery codes regenerated
  • Login from new device
  • Account recovery initiated

Шаг 7: технические требования

TOTP

  • RFC 6238, SHA-1, 30-second window, 6-digit
  • Accept ±1 window (clock skew)
  • Хранить secret encrypted at rest
  • Никогда не показывать secret после enrollment (только при первом сетапе)

Passkey

  • WebAuthn API, prefer platform authenticator
  • Origin binding (не работает за пределами твоего домена)
  • Хранить credential ID + public key

Recovery codes

  • 8-10 кодов, формат XXXX-XXXX
  • Bcrypt/argon2 хеши в БД (одноразовые)
  • Показывать ОДИН раз при генерации

SMS (если все же)

  • Rate limit: 3 попытки на номер за час
  • Timer 60s между запросами
  • Verify number ДО включения

Шаг 8: метрики

  • Enrollment rate по сегментам (taргет: 80%+ для paid)
  • Adoption по методам (passkey vs TOTP vs SMS)
  • Login success rate с 2FA (норма >95%)
  • Lockout rate (норма <2%)
  • Recovery flow usage (норма <5% активаций)
  • Account recovery успех vs отказ
  • Time-to-second-factor (UX-метрика)

Формат вывода

  1. Policy: кто/что/когда обязан
  2. Wireframes для enrollment (TOTP + passkey), login, recovery
  3. Email templates (минимум 5)
  4. Backend spec: эндпоинты, эрроры, rate limits
  5. Список метрик и алертов

Анти-паттерны

  • ❌ SMS как единственный метод (SIM-swap)
  • ❌ Email-based код как 2FA (один фактор)
  • ❌ Recovery бессилен → юзеры теряют аккаунт навсегда
  • ❌ Recovery мгновенный через email → 2FA бесполезна
  • ❌ Force 2FA сразу для free без объяснения — массовый отвал
  • ❌ Push notifications без challenge (MFA fatigue → юзеры approve фишинговые попытки)
  • ❌ Не уведомлять о enable/disable 2FA — нет канала ловли хайджеков
  • ❌ Recovery codes показаны несколько раз — теряют ценность
  • ❌ 2FA для admin опциональна (это первая мишень)
  • ❌ Один прокси-метод TOTP без backup — потерянный телефон = потерянный аккаунт
К подразделу «Безопасность»
Похожие промты