Перейти к содержимому
Skip to content
← Все статьи

Руководство по двухфакторной аутентификации: TOTP, SMS и аппаратные ключи

Двухфакторная аутентификация: полное руководство

Двухфакторная аутентификация (2FA) добавляет критически важный уровень безопасности помимо паролей. Требуя от пользователей подтверждения личности через два различных фактора — то, что они знают, и то, что у них есть — 2FA значительно снижает риск несанкционированного доступа даже при компрометации паролей.

Типы факторов аутентификации

Факторы аутентификации подразделяются на три основные группы. Надёжная реализация 2FA комбинирует факторы из как минимум двух разных категорий.

Категории факторов

TOTP: одноразовые пароли на основе времени

TOTP — наиболее распространённый метод 2FA для веб-приложений. Он генерирует короткоживущие числовые коды на основе общего секрета и текущего времени, обычно обновляясь каждые 30 секунд.

Как работает TOTP

  1. Сервер генерирует случайный секретный ключ и передаёт его пользователю (обычно через QR-код)
  2. Приложение-аутентификатор сохраняет секрет и генерирует 6-значные коды каждые 30 секунд
  3. Код вычисляется из HMAC-SHA1 секретного ключа и текущего временного шага
  4. Сервер проверяет код, вычисляя тот же HMAC со своей копией секрета
  5. Допускается небольшое окно времени (обычно +/- 1 шаг) для компенсации расхождения часов

Особенности реализации TOTP

// Генерация TOTP-кода (псевдокод)
function generateTOTP(secret, timeStep = 30) {
    counter = floor(currentUnixTime / timeStep)
    hmac = HMAC-SHA1(secret, counter)
    offset = hmac[last byte] & 0x0F
    code = (hmac[offset..offset+3] & 0x7FFFFFFF) % 1000000
    return zeroPad(code, 6)
}

Лучшие практики TOTP

SMS-верификация

SMS-верификация отправляет одноразовый код на зарегистрированный номер телефона пользователя. Несмотря на широкое распространение благодаря простоте, SMS имеет известные уязвимости безопасности, делающие его наименее предпочтительным методом 2FA для приложений с высоким уровнем безопасности.

Уязвимости SMS

Вектор атакиУровень рискаОписание
SIM-свопингВысокийЗлоумышленник убеждает оператора перенести номер жертвы на новую SIM
Перехват SS7СреднийИспользование уязвимостей протокола SS7 для перехвата сообщений
Социальная инженерияВысокийЗлоумышленник обманом заставляет жертву раскрыть SMS-код
Вредоносное ПОСреднийМобильное вредоносное ПО считывает входящие SMS с кодами

Когда SMS допустим

Несмотря на свои слабости, SMS-верификация по-прежнему значительно лучше, чем отсутствие 2FA. Она остаётся подходящей для приложений с низким и средним уровнем риска, где основная цель — защита от credential stuffing и повторного использования паролей.

Аппаратные ключи безопасности

Аппаратные ключи безопасности, основанные на стандарте FIDO2/WebAuthn, обеспечивают наиболее надёжную форму двухфакторной аутентификации. Они устойчивы к фишингу, атакам посредника и replay-атакам по своей конструкции.

Как работают аппаратные ключи

  1. Регистрация: ключ генерирует уникальную пару открытый-закрытый ключ для каждого сервиса и передаёт открытый ключ серверу
  2. Аутентификация: сервер отправляет вызов, ключ подписывает его закрытым ключом, сервер проверяет подпись
  3. Привязка к домену: ключ криптографически привязывает ответ к запрашивающему домену, предотвращая фишинг
  4. Подтверждение присутствия: требуется физическое взаимодействие (касание или биометрия)

Процесс регистрации WebAuthn

// Сервер: генерация вызова
const options = {
    challenge: crypto.randomBytes(32),
    rp: { name: "Example App", id: "example.com" },
    user: { id: userId, name: email, displayName: name },
    pubKeyCredParams: [
        { alg: -7, type: "public-key" },   // ES256
        { alg: -257, type: "public-key" }  // RS256
    ],
    authenticatorSelection: {
        authenticatorAttachment: "cross-platform",
        userVerification: "preferred"
    },
    timeout: 60000
};

Стратегии восстановления доступа

Надёжная реализация 2FA должна включать механизмы восстановления для пользователей, потерявших доступ ко второму фактору. Без вариантов восстановления пользователи рискуют навсегда потерять доступ к аккаунту.

Методы восстановления

Лучшие практики реализации

Заключение

Внедрение двухфакторной аутентификации — одно из наиболее эффективных улучшений безопасности для любого приложения. TOTP обеспечивает оптимальный баланс безопасности и удобства для большинства приложений, аппаратные ключи — максимальную защиту для ценных аккаунтов. SMS следует рассматривать как запасной вариант. Независимо от выбранного метода, любая форма 2FA значительно лучше аутентификации только по паролю.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: Безопасность
Безопасность
Безопасность cookies: HttpOnly, Secure, SameSite
14.03.2026 · 11 просм.
Безопасность
Чек-лист безопасности веб-сервера: Nginx и Apache
16.03.2026 · 23 просм.
Безопасность
WAF: что это и как защищает сайт
14.03.2026 · 12 просм.
Безопасность
Правила WAF: написание эффективных политик веб-файрвола
16.03.2026 · 21 просм.