Все статьи

TOTP: как работают одноразовые коды в приложениях-аутентификаторах

Банк России годами продвигает переход от одноразовых кодов по SMS к TOTP-приложениям именно из-за роста атак с подменой SIM-карты (SIM swap): злоумышленник, перевыпустивший SIM-карту жертвы у оператора, перехватывает SMS-коды напрямую, тогда как секрет TOTP-приложения физически привязан к конкретному устройству и никогда не передаётся по мобильной сети.

Общий секрет плюс время

Во время настройки сервер и приложение-аутентификатор обмениваются одним общим секретным ключом (именно он закодирован в QR-коде). Далее обе стороны независимо вычисляют HMAC от этого секрета и текущего unix-времени, округлённого до 30-секундного интервала — и получают одинаковый код, не общаясь друг с другом.

Почему это работает без интернета

Поскольку код вычисляется локально из секрета и системного времени устройства, приложению-аутентификатору не нужно сетевое соединение для генерации кода. Единственное требование — чтобы часы сервера и телефона были синхронизированы в пределах небольшого допустимого отклонения (обычно ±30–60 секунд). Именно поэтому TOTP устойчивее к перехвату SIM-swap, чем SMS: секрет никогда не покидает устройство и не зависит от оператора связи.

Почему код меняется каждые 30 секунд

Короткий временной интервал ограничивает окно, в течение которого перехваченный код остаётся действительным, снижая риск его повторного использования злоумышленником. Сервер обычно принимает текущий и один предыдущий интервал, чтобы компенсировать небольшую задержку сети при вводе кода.

Зачем это нужно

  • Понимать механику двухфакторной аутентификации при настройке или диагностике проблем с приложениями-аутентификаторами.
  • Тестировать собственную реализацию TOTP при разработке системы аутентификации.
  • Генерировать коды для автоматизированного тестирования без ручного ввода с телефона.

От чего TOTP не защищает

TOTP надёжно защищает от кражи пароля отдельно от кода, но не от фишинга в реальном времени: если жертва вводит и пароль, и текущий TOTP-код на поддельном сайте, злоумышленник может мгновенно использовать оба значения на настоящем сайте, пока код ещё действителен. От такой атаки защищают только аппаратные ключи по стандарту FIDO2/WebAuthn, криптографически привязанные к конкретному домену.

Попробовать инструмент