TL;DR

Одноразовые коды (OTP) — основа повседневной цифровой безопасности. Мы вводим их при входе в банк, при подтверждении перевода, при доступе к облаку. Но не все коды одинаково безопасны.

В статье — сжатый обзор эволюции методов подтверждения: от бумажных TAN до криптографических Passkeys.

TAN или Как всё начиналось

Если вы когда‑нибудь пользовались интернет‑банком в начале 2000-х, скорее всего, вы видели TAN‑листы — бумажные или присылаемые по SMS коды, каждый из которых использовался один раз для подтверждения транзакции.

TAN (Transaction Authentication Number) — список одноразовых чисел, который выдавался банком клиенту. Один код — одна операция.

  • Пример: 2341, 9884, 1376

  • Способ доставки: бумага или SMS

Почему устарело:

  • Коды короткие, обычно 4 цифры

  • Нет привязки ко времени или контексту транзакции

  • Уязвимо к MITM, подмене форм и утечкам

HOTP и TOTP спешат на помощь

Со временем на смену статичным спискам пришли алгоритмы, генерирующие коды на лету.

HOTP (HMAC-Based One-Time Password)

Алгоритм описан в RFC 4226. Он использует счётчик и секретный ключ:

HOTP = HMAC(secret, counter)

Этот подход применялся в аппаратных токенах вроде RSA SecurID.

TOTP (Time-Based One-Time Password)

Дальнейшее развитие идеи — алгоритм из RFC 6238. Вместо счётчика — текущее время, округлённое до 30 секунд:

T = floor((time - t0) / 30)
TOTP = HMAC(secret, T)

Коды обычно шестизначные, живут 30 секунд.

Плюсы:

  • Работает офлайн

  • Криптостойкость (HMAC‑SHA1/256)

  • Простота реализации

Минусы:

  • Требует ручного ввода

  • Потеря устройства = потеря доступа

Push и App-TAN: проще и человечнее

Чтобы упростить UX, появились пуш‑уведомления. Вместо ввода кода вы просто подтверждаете вход:

«Вы пытаетесь войти в GitHub с устройства Chrome на Ubuntu?»
[Да] [Нет]

Это решение применяют Google Prompt, Microsoft Authenticator, банковские Push‑TAN). Что получаем:

  • Привязку к устройству

  • Контекст операции (локация, браузер)

  • Возможность отзыва

И UX лучше, и защита от фишинга уже куда серьезнее.

Аппаратная безопасность: U2F и FIDO2

Следующий шаг — аппаратные токены вроде YubiKey, SoloKey или Google Titan. Как это работает:

  • Устройство хранит приватный ключ

  • Подписывает challenge от сервера

  • Ключ нельзя извлечь или клонировать

Итог — максимальная защита к фишингу и MITM, нет секретов в браузере или на сервере, но нужно физическое устройство. Хотя по факту — носится как брелок или вшито в ноутбук.

Новый стандарт: Passkeys

Passkeys — это способ входа в аккаунт без пароля и без одноразового кода. Вместо того чтобы что‑то помнить или вводить, вы просто подтверждаете вход с помощью отпечатка пальца, Face ID или PIN‑кода — на своём устройстве.

Главное — удобство и устойчивость к фишингу. Вместо формы логина с паролем вы видите стандартный системный диалог — например, от Android, iOS, Windows Hello.

Почему это безопасно

В отличие от TOTP, где вы вводите код вручную и рискуете стать жертвой фишинга, Passkeys исключают человека из уязвимой части цепочки — ключ никогда не покидает устройство, а подтверждение нельзя перехватить, сервер получает только результат подписи (challenge‑response), а биометрия или PIN используются локально и только чтобы разблокировать ключ.

Это значит, что даже если злоумышленник подделает сайт, он не сможет перехватить Passkey или подделать вход.

Как выглядит процесс входа

  1. Вы нажимаете «Войти с Passkey».

  2. Операционная система показывает системный запрос подтверждения.

  3. После подтверждения вход происходит без пароля.

Работает в современных браузерах и ОС — в том числе с возможностью синхронизации ключей через облако (Google, iCloud) или экспорта в 1Password, KeePass и др.

Если при попытке входа на webauthn.io вы увидели неожиданный запрос от Windows — это нормально: система предложила выбрать, чем подтвердить вход (например, PIN или внешний ключ). Этот процесс пока не всегда интуитивен, и UX дорабатывается, особенно для десктопных систем, но сама модель остаётся безопасной и прозрачной.

Сравнение поколений

Метод

Безопасность

Удобство

Описание

TAN

🔴

🟢

Код по SMS или бумаге

TOTP

🟢

🟡

6-значный код из приложения

Push‑based

🟢

🟢

Подтверждение в один клик

U2F/FIDO2

🟢🟢

🟢

Аппаратный ключ, криптография

Passkeys

🟢🟢🟢

🟢🟢🟢

Биометрия, нет пароля и кода

Что всё это значит

Путь от TAN к Passkeys — это не просто эволюция алгоритмов. Это движение к модели, в которой безопасность уходит в инфраструктуру, а пользователь всё меньше должен помнить, вводить и проверять.

Хотя в статье Passkeys показаны как наиболее безопасный и удобный способ входа, это не значит, что TOTP «устарел» или всегда хуже. TOTP и Passkeys работают по разным моделям.

Модель

Пример

Требует соединения

Подвержен
фишингу

Оффлайн OTP

TOTP, HOTP

Нет

Да

Онлайн Push

Push-уведомления

Да

Иногда

Криптографическая

Passkeys / WebAuthn

Да

Нет

Выбор метода зависит от контекста. Для изолированных систем и корпоративных VPN оффлайновые OTP всё ещё надёжны. Для облачных сервисов и массовых приложений Passkeys и push дают лучший баланс UX и защиты.


Готов обсудить дополнения, опечатки, и альтернативные модели — особенно если вы работаете с аутентификацией на backend или проектируете user journey.

Этот текст подготовлен совместно с AI, с бережной верификацией фактов, терминов и структуры. Все выводы и обобщения — результат анализа. Если заметите неточности — приветствую в комментариях для уточнений.