Генератор OTP

Генератор OTP вычисляет одноразовые пароли из общего секрета Base32 — тот же механизм, который используют Google Authenticator, Authy и 1Password. TOTP обновляется каждые 30 секунд; HOTP продвигается по запросу из счётчика, которым управляешь ты.

Built by Bob Article by Lace QA by Ben Shipped

Как использовать

  1. 1

    Выбери TOTP (на основе времени, по умолчанию) или HOTP (на основе счётчика).

  2. 2

    Вставь свой секрет Base32. Если тестируешь, нажми 'Сгенерировать случайный'.

  3. 3

    TOTP: код обновляется каждые 30 секунд. HOTP: увеличивай счётчик вручную.

  4. 4

    Нажми Копировать код.

Часто задаваемые вопросы

Ratings & Reviews

Rate this tool

Sign in to leave a written review.
Loading reviews…

TOTP-генератор онлайн нужен, когда шестизначный код двухфакторной аутентификации надо получить не в телефоне, а прямо в браузере. Ты разработчик и проверяешь вход с 2FA, тестировщик без доступа к общему телефону или просто сохранил ключ настройки и хочешь убедиться, что он рабочий. Вставь секрет в формате Base32 — и увидишь тот же код, что показали бы Google Authenticator или Яндекс Ключ. Одно честное ограничение: SMS-коды от банка или маркетплейса так не получить. Их придумывает сервер и присылает тебе, и секрета для расчёта у тебя нет.

Что такое генератор OTP?

Генератор OTP превращает общий секрет в одноразовый пароль — тот самый шестизначный код, который показывает приложение-аутентификатор при входе с двухфакторной аутентификацией. Вставь секрет Base32 в генератор OTP, и он покажет тот же код, что твоё приложение-аутентификатор показало бы для этого секрета прямо сейчас. Всё работает в браузере. Ничего из того, что ты вставляешь, никуда не отправляется.

Одноразовые пароли бывают двух видов, и инструмент умеет оба:

  • TOTP (на основе времени, RFC 6238). Код меняется каждые 30 секунд. Именно его используют Google Authenticator, Microsoft Authenticator, Authy и 1Password почти для всех аккаунтов.
  • HOTP (на основе счётчика, RFC 4226). Код меняется, когда счётчик увеличивается на единицу, — обычно когда нажимаешь кнопку на аппаратном токене.

Математика у обоих одна. Разница только в том, что подаётся как меняющаяся часть: часы или счётчик. Коды здесь считаются по HMAC-SHA1 и состоят из 6 цифр — такие настройки почти все сервисы используют по умолчанию.

Как пользоваться генератором OTP

  1. Выбери режим. При открытии страницы выбран TOTP. Переключись на HOTP, если тестируешь токен со счётчиком.
  2. Введи секрет. В поле уже стоит случайный секрет, так что код на экране появляется ещё до того, как ты что-то напечатаешь. Вставь поверх свой секрет Base32 или нажми Сгенерировать случайный, чтобы получить новый. Случайные секреты длиной 32 символа — это 160 бит.
  3. Прочитай код. В режиме TOTP полоска отсчитывает время до следующей 30-секундной границы, и код обновляется сам, когда она доходит до нуля. В режиме HOTP введи значение счётчика или нажми + Далее, чтобы увеличить его на единицу.
  4. Скопируй его. Кнопка Скопировать код кладёт 6 цифр в буфер обмена. Значок копирования рядом с секретом копирует сам секрет.

Поле секрета прощает неаккуратную вставку. Оно переводит строчные буквы в заглавные и убирает пробелы прямо при вводе, так что gezd gnbv ..., скопированный с экрана настройки, работает так же, как чистая версия. Значок глаза скрывает секрет, если кто-то заглядывает через плечо.

Вот и весь процесс. Ни аккаунта, ни установки, ни шага «подключите свой аутентификатор». Большинство инструментов для тестирования 2FA живут внутри платформ для разработчиков с оплатой за каждое рабочее место. Здесь — одно поле и одно число.

Как считаются коды TOTP и HOTP

Любой код получается за одни и те же четыре шага:

  1. Секрет Base32 декодируется в сырые байты.
  2. По 8-байтовому счётчику считается HMAC-SHA1 с секретом в роли ключа. Получается 20 байт.
  3. Последние 4 бита результата задают стартовую позицию, и оттуда как число читаются 4 байта. В RFC 4226 это называется динамическим усечением.
  4. Берутся последние 6 цифр этого числа. Это и есть код.

Для HOTP счётчик — это любое число, которое ты задашь. Для TOTP счётчик — текущее Unix-время, делённое на 30 и округлённое вниз. То есть код TOTP — это просто код HOTP, где счётчик выбирают часы. В момент Unix-времени 59 счётчик TOTP равен 1, и код TOTP совпадает с кодом HOTP для счётчика 1.

Пример: официальные тестовые векторы

Оба RFC публикуют тестовые значения для секрета 12345678901234567890 (20 байт ASCII). В Base32 это GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ. Вставь его, переключись на HOTP и меняй счётчик:

Счётчик HOTPКод в этом инструментеRFC 4226, приложение D
0755224755224
1287082287082
2359152359152
3969429969429
9520489520489

Режим TOTP всегда берёт текущее время, так что прошлую метку времени туда не ввести. Но значения из RFC 6238 всё равно можно проверить: раздели метку времени на 30, округли вниз и введи результат как счётчик HOTP. В RFC 6238 приведены 8-значные коды. Инструмент показывает 6 цифр — это последние 6 цифр того же числа.

Unix-времяСчётчик (время ÷ 30)RFC 6238 (8 цифр, SHA-1)Этот инструмент (6 цифр)
59194287082287082
11111111093703703607081804081804
12345678904115226389005924005924
20000000006666666669279037279037

Если у тебя на экране всё совпало, математика верна. Любое расхождение с настоящим сервисом идёт от входных данных: секрета, часов или настроек.

Какие секреты принимает инструмент и почему коды не совпадают

Этот раздел стоит прочитать, если код не проходит проверку. Вот что проверить в первую очередь.

Секрет должен быть не короче 128 бит

Инструмент отклоняет секреты короче 16 байт — это 26 символов Base32. Это правило библиотеки otplib, на которой он работает, да и сам RFC 4226 требует не меньше 128 бит. Знаменитый 16-символьный демо-секрет JBSWY3DPEHPK3PXP — всего 10 байт. Вставишь его — и вместо кода увидишь «Secret must be at least 16 bytes (128 bits), got 10 bytes». Распространённые 32-символьные секреты работают без проблем. Верхний предел — 64 байта, около 102 символов.

Допустимы только A–Z и 2–7

Base32 (RFC 4648) использует 26 латинских букв и цифры от 2 до 7. Цифр 0, 1, 8 и 9 в нём нет, так что секрет с ними — это опечатка или вообще не Base32. Буквы O, I и L допустимы, поэтому люди и путают их на экране. Если в секрете есть 0, скорее всего, это O.

Настройки зафиксированы: SHA-1, 6 цифр, 30 секунд

Это значения по умолчанию в RFC 6238 и почти во всех потребительских аутентификаторах. Некоторые системы используют SHA-256, SHA-512, 8 цифр или период 60 секунд. Этот инструмент на них переключиться не может, так что его коды с такой системой не совпадут. Загляни в ссылку otpauth:// сервиса: если настройки отличаются от стандартных, в ней будут параметры algorithm=, digits= и period=.

У тебя спешат или отстают часы

TOTP работает, только если обе стороны согласны, который сейчас час. Если часы компьютера уплыли больше чем на несколько секунд, отсчёт и код не сойдутся с телефоном. Включи автоматическую установку времени в настройках системы и перезагрузи страницу.

Быстрая проверка при расхождении: вставь один и тот же секрет в этот инструмент и в приложение-аутентификатор. Если они совпадают, а сервер код отклоняет, значит, у сервера другие настройки или другой секрет. Если не совпадают — сначала проверь часы.

Фейковые OTP, SMS-коды и аппаратные токены

Люди ищут «фейковый генератор OTP» или «генератор случайных одноразовых кодов». Вот что это может значить, а что нет.

Нажми Сгенерировать случайный — и получишь настоящий код TOTP от совершенно нового секрета. Он полезен как тестовые данные: правдоподобный шестизначный код для формы, демо или скриншота. И он работает от начала до конца: добавь тот же секрет в приложение-аутентификатор, и коды будут совпадать. Если нужны просто шесть случайных цифр без секрета за ними, проще взять генератор случайных чисел.

Чего не может ни один генератор OTP — так это сделать код для чужого аккаунта. Код зависит от секрета этого аккаунта, а он есть только у сервиса и владельца. Код от любого другого секрета для сервера — просто шесть цифр.

То же касается SMS-кодов подтверждения. Банк или приложение выбирает их на своём сервере и присылает тебе. На твоей стороне нет секрета, из которого их можно вычислить. «Генератор кодов подтверждения» их не предскажет.

Аппаратные OTP-токены — это брелоки с кнопкой или маленьким экраном. Свой секрет они хранят запечатанным внутри устройства. Если производитель выдал тебе seed токена (некоторые так делают — для импорта на сервер), режим HOTP здесь воспроизведёт его коды. Без seed этого не сделает ничто.

Кому нужен генератор OTP

  • Разработчикам, которые делают 2FA. Сгенерируй секрет, сохрани его для тестового пользователя и сравни код, который ждёт твой сервер, с тем, что показан здесь.
  • Тестировщикам. Заходить в тестовый аккаунт с включённой 2FA, не передавая телефон по всей команде.
  • Всем, кто сохранил ключ настройки. Если ты записал секрет при настройке 2FA, он по-прежнему выдаёт твои коды на новом устройстве. Чтобы он сработал здесь, в нём должно быть не меньше 128 бит.
  • Любопытным. Пройди по тестовым векторам RFC выше и посмотри, как алгоритм делает ровно то, что написано в стандарте.

Одно предупреждение. Секрет настоящего аккаунта так же важен, как его пароль. Эта страница никуда его не отправляет, но не храни его в заметке, чате или общем документе. Для других секретов и строк Генератор паролей и Генератор Токенов работают в браузере точно так же. Чтобы достать секрет из QR-кода настройки, QR-ридер расшифрует его в ссылку otpauth://.

Частые вопросы

Почему мой 16-символьный секрет выдаёт ошибку?

16-символьный секрет Base32 — это 80 бит, а инструмент требует не меньше 128 бит (26 символов). Ошибка звучит так: «Secret must be at least 16 bytes (128 bits), got 10 bytes». Большинство сервисов сейчас выдают 32-символьные секреты, и они работают. Старый 80-битный секрет по-прежнему будет работать в твоём приложении-аутентификаторе, но этот инструмент его не примет.

Можно сделать 8-значные коды или использовать SHA-256?

Нет. Инструмент зафиксирован на 6 цифрах, HMAC-SHA1 и периоде 30 секунд — это стандартные значения RFC, которые используют потребительские аутентификаторы. Система с 8 цифрами, SHA-256 или SHA-512 либо периодом 60 секунд выдаст другие коды.

Сколько действует код TOTP?

Каждый код принадлежит одному 30-секундному окну, которое начинается на целом кратном 30 секунд Unix-времени. Полоска отсчёта показывает, сколько осталось от окна. Многие серверы принимают и код из соседнего окна — до или после, — чтобы учесть медленный ввод и небольшое расхождение часов. Это настройка сервера, а не свойство самого кода.

Как достать секрет из ссылки otpauth://?

Найди параметр secret=. В ссылке otpauth://totp/Example:alice?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example секрет — это всё между secret= и следующим &. Вставь эту часть в инструмент. Если у тебя только QR-код, сначала расшифруй его в ссылку.

Почему TOTP и HOTP показывают один и тот же код для одного секрета?

Иногда так и будет, и это правильно. TOTP — это HOTP со счётчиком, равным Unix-времени, делённому на 30. Когда твой счётчик HOTP совпадает с текущим шагом времени, оба режима считают одно и то же число.

Инструмент продолжает работать, когда я его закрою?

Нет. Ничего не сохраняется. Закрыл вкладку — секрет и код исчезли, так что храни собственную копию любого секрета, который понадобится позже.