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
- Выбери режим. При открытии страницы выбран TOTP. Переключись на HOTP, если тестируешь токен со счётчиком.
- Введи секрет. В поле уже стоит случайный секрет, так что код на экране появляется ещё до того, как ты что-то напечатаешь. Вставь поверх свой секрет Base32 или нажми Сгенерировать случайный, чтобы получить новый. Случайные секреты длиной 32 символа — это 160 бит.
- Прочитай код. В режиме TOTP полоска отсчитывает время до следующей 30-секундной границы, и код обновляется сам, когда она доходит до нуля. В режиме HOTP введи значение счётчика или нажми + Далее, чтобы увеличить его на единицу.
- Скопируй его. Кнопка Скопировать код кладёт 6 цифр в буфер обмена. Значок копирования рядом с секретом копирует сам секрет.
Поле секрета прощает неаккуратную вставку. Оно переводит строчные буквы в заглавные и убирает пробелы прямо при вводе, так что gezd gnbv ..., скопированный с экрана настройки, работает так же, как чистая версия. Значок глаза скрывает секрет, если кто-то заглядывает через плечо.
Вот и весь процесс. Ни аккаунта, ни установки, ни шага «подключите свой аутентификатор». Большинство инструментов для тестирования 2FA живут внутри платформ для разработчиков с оплатой за каждое рабочее место. Здесь — одно поле и одно число.
Как считаются коды TOTP и HOTP
Любой код получается за одни и те же четыре шага:
- Секрет Base32 декодируется в сырые байты.
- По 8-байтовому счётчику считается HMAC-SHA1 с секретом в роли ключа. Получается 20 байт.
- Последние 4 бита результата задают стартовую позицию, и оттуда как число читаются 4 байта. В RFC 4226 это называется динамическим усечением.
- Берутся последние 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 |
|---|---|---|
| 0 | 755224 | 755224 |
| 1 | 287082 | 287082 |
| 2 | 359152 | 359152 |
| 3 | 969429 | 969429 |
| 9 | 520489 | 520489 |
Режим TOTP всегда берёт текущее время, так что прошлую метку времени туда не ввести. Но значения из RFC 6238 всё равно можно проверить: раздели метку времени на 30, округли вниз и введи результат как счётчик HOTP. В RFC 6238 приведены 8-значные коды. Инструмент показывает 6 цифр — это последние 6 цифр того же числа.
| Unix-время | Счётчик (время ÷ 30) | RFC 6238 (8 цифр, SHA-1) | Этот инструмент (6 цифр) |
|---|---|---|---|
| 59 | 1 | 94287082 | 287082 |
| 1111111109 | 37037036 | 07081804 | 081804 |
| 1234567890 | 41152263 | 89005924 | 005924 |
| 2000000000 | 66666666 | 69279037 | 279037 |
Если у тебя на экране всё совпало, математика верна. Любое расхождение с настоящим сервисом идёт от входных данных: секрета, часов или настроек.
Какие секреты принимает инструмент и почему коды не совпадают
Этот раздел стоит прочитать, если код не проходит проверку. Вот что проверить в первую очередь.
Секрет должен быть не короче 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 совпадает с текущим шагом времени, оба режима считают одно и то же число.
Инструмент продолжает работать, когда я его закрою?
Нет. Ничего не сохраняется. Закрыл вкладку — секрет и код исчезли, так что храни собственную копию любого секрета, который понадобится позже.