Хеши/крипто
TOTP Generator/Verifier
Одноразовые коды по времени (TOTP, RFC 6238) — генерация текущего кода из секрета и проверка введённого кода с учётом дрейфа времени.
------
TOTP (Time-based One-Time Password, RFC 6238) — алгоритм двухфакторной аутентификации, который генерирует одноразовый код на основе секрета и текущего времени. Именно он работает под капотом в Google Authenticator, Authy и подобных приложениях.
Как пользоваться
- Генерация: вставьте секретный ключ (обычно в Base32, как в QR-коде для настройки 2FA) — инструмент покажет текущий 6-значный код и время до его смены.
- Проверка: введите секрет и код, полученный из приложения-аутентификатора, чтобы проверить, совпадают ли они.
- Проверка учитывает небольшой дрейф времени — принимает код не только текущего, но и соседних временных интервалов.
Типичные сценарии
- Отладка собственной реализации 2FA на бэкенде — проверка, правильно ли сервер генерирует и принимает коды.
- Ручная генерация кода для аккаунта, когда нет доступа к телефону с приложением-аутентификатором.
- Понимание, почему код из приложения не принимается сервером (чаще причина — рассинхронизированные часы).
Что стоит помнить
TOTP-код действителен лишь короткий промежуток времени (обычно 30 секунд) — это и есть основная защита, а не сам секрет.
Точность кода напрямую зависит от синхронизации часов устройства; заметный рассинхрон времени — самая частая причина отклонённых кодов 2FA.
Статья об этом инструменте: TOTP: как работают одноразовые коды в приложениях-аутентификаторах
Часто задаваемые вопросы
Почему сгенерированный код так быстро истекает?
Коды TOTP привязаны ко времени — по умолчанию они обновляются каждые 30 секунд, вычисляясь из текущего Unix-времени и общего секрета. Это короткое окно ограничивает, как долго утёкший код остаётся полезным.
Что произойдёт, если часы моего устройства рассинхронизированы?
TOTP полагается на то, что обе стороны примерно согласны о текущем времени. Большинство приложений-аутентификаторов и серверов допускают небольшое отклонение (обычно один временной шаг), но большее расхождение приведёт к отклонению верных кодов.
Отправляется ли мой секретный ключ куда-либо при генерации кода здесь?
Нет. Код TOTP вычисляется полностью в вашем браузере — секретный ключ никогда не покидает ваше устройство.
Защищает ли TOTP от фишинга?
Не полностью. Если жертва вводит пароль и текущий TOTP-код на поддельном сайте, злоумышленник может мгновенно использовать оба значения на настоящем сайте, пока код ещё действителен. От такой атаки в реальном времени защищают только аппаратные ключи по стандарту FIDO2/WebAuthn.
Почему сервер принимает и предыдущий временной интервал, а не только текущий?
Это компенсирует небольшую сетевую задержку между генерацией кода на телефоне и моментом, когда сервер его получает и проверяет. Без такого допуска легитимные коды иногда отклонялись бы из-за обычной задержки в несколько секунд.