Генератор TOTP

Результаты

Каждый раз, когда Google Authenticator, Яндекс Ключ или Authy показывает шестизначный код, меняющийся каждые 30 секунд, это TOTP: HMAC от общего секрета и текущего времени Unix, стандартизированный в RFC 6238. Этот генератор вычисляет те же коды из любого секрета Base32, что удобно для отладки новой интеграции двухфакторной аутентификации (2FA), выяснения, почему сервис отклоняет ваши коды, или наблюдения за тем, как алгоритм реагирует на разные параметры. Используйте его с тестовыми секретами: код вычисляется на нашем сервере, поэтому настоящим секретам, защищающим ваши аккаунты, место в приложении-аутентификаторе, а не на веб-странице.

Как работает этот генератор TOTP

  1. 1

    Вставьте секрет Base32

    Буквы A-Z и цифры 2-7, то есть формат из QR-кодов otpauth://. Пробелы и строчные буквы не мешают; всё остальное помечается как недопустимый Base32.

  2. 2

    Выберите алгоритм хеширования

    SHA-1 используют почти все сервисы; переключайтесь на SHA-256 или SHA-512, только если сервис прямо этого требует.

  3. 3

    Задайте цифры и период

    Выберите 6, 7 или 8 цифр и окно в 30 или 60 секунд. Стандартная комбинация: 6 цифр каждые 30 секунд.

  4. 4

    Считайте текущий код

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

  5. 5

    Сравните URI otpauth

    Инструмент показывает URI otpauth:// для ваших параметров, чтобы сверить его с тем, что закодировано в настроечном QR-коде сервиса.

Алгоритм простыми словами

TOTP - это HOTP (одноразовый пароль на основе HMAC, RFC 4226), в котором счётчик заменён текущим временем Unix, делённым на шаг времени (обычно 30 секунд):

counter = floor(unix_time / 30)
hash = HMAC-SHA1(secret, counter_as_8_byte_big_endian)
offset = last byte of hash AND 0x0F
truncated = 4 bytes from offset, with the top bit zeroed
code = truncated mod 10^digits

Ваше устройство и сервер выполняют одни и те же вычисления над одним и тем же секретом и одними и теми же часами, поэтому получают одинаковый код, который при этом никуда не передаётся. Шестизначный код - это просто усечённый HMAC по модулю 10^6. Никакой магии, только хеширование.

Типичные параметры

Сервис Алгоритм Цифры Период
Большинство сайтов и приложений SHA-1 6 30 с
GitHub SHA-1 6 30 с
Cloudflare SHA-1 6 30 с
Аккаунты Microsoft SHA-1 6 30 с
Некоторые банки и корпоративные VPN SHA-256 или SHA-512 8 60 с

Если сервис отклоняет ваши коды, сначала проверьте количество цифр и период, затем алгоритм. Учтите также, что некоторые приложения-аутентификаторы молча игнорируют нестандартные параметры (Google Authenticator исторически обрабатывал всё как SHA-1, 6 цифр, 30 секунд), поэтому всегда тестируйте именно с тем приложением, которым будут пользоваться ваши пользователи.

Как безопасно хранить секреты

  • Никогда не отправляйте секрет 2FA по почте или в мессенджере. Попав в чей-то ящик, он навсегда остаётся в журналах и резервных копиях провайдера.
  • Подключайте 2FA сканированием QR-кода. QR-код содержит URI otpauth://totp/..., объединяющий секрет, алгоритм, количество цифр и период в один однозначный пакет.
  • Делайте резервную копию при подключении. Храните коды восстановления, или сам секрет, в менеджере паролей: потеря телефона без них означает потерю доступа.
  • Один секрет на сервис. Каждый сервис выдаёт собственный секрет при настройке; если какой-то из них утёк, подключите 2FA заново, чтобы старый перестал действовать.

Расхождение времени

TOTP работает только пока обе стороны согласны во времени. Эта страница вычисляет коды по часам сервера, поэтому если код здесь отличается от кода в вашем приложении-аутентификаторе, первый подозреваемый - часы устройства. Большинство проверяющих систем допускают расхождение в одно окно в каждую сторону (30-60 секунд); если разница больше, синхронизируйте часы устройства по NTP, прежде чем винить секрет.

Используйте здесь тестовые секреты

Этот инструмент вычисляет код на нашем сервере: введённый секрет передаётся по HTTPS при каждом обновлении, а при переходе между шагами инструмента появляется и в URL страницы. Для разработки, демонстраций и отладки с одноразовыми секретами это нормально. Но это не место для настоящего секрета, защищающего вашу почту или банковский счёт: ему место в отдельном приложении-аутентификаторе на телефоне. Если вы уже вставили настоящий секрет куда-то вне своего аутентификатора, подключите 2FA на том сервисе заново, чтобы секрет сменился.

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

Относитесь к этой странице как к инструменту разработчика и тестировщика, а не как к сейфу. Код вычисляется на сервере, поэтому секрет передаётся на наш сервер по HTTPS и может появляться в URL страницы между шагами. Демонстрационные и тестовые секреты используйте свободно, но никогда не вставляйте настоящий секрет аккаунта, который вам дорог. Если это уже произошло, подключите 2FA на том сервисе заново, чтобы сменить секрет.

Сначала проверьте параметры: алгоритм, количество цифр и период должны точно совпадать с тем, что выдал сервис. Затем проверьте часы: эта страница использует часы сервера, так что расхождение обычно указывает на другое устройство. Наконец, помните, что некоторые приложения игнорируют нестандартные параметры; классический пример - Google Authenticator.

Только Base32: буквы от A до Z и цифры от 2 до 7, с необязательным заполнением =. Пробелы удаляются, строчные буквы преобразуются автоматически. Секреты в шестнадцатеричном виде или сырых байтах нужно сначала преобразовать в Base32, иначе инструмент сообщит о недопустимом секрете Base32.

Вы теряете доступ к 2FA этого аккаунта. Воспользуйтесь процедурой восстановления сервиса (коды восстановления, подтверждение личности, запасной вариант по SMS). При настройке всегда сохраняйте коды восстановления или исходный QR-код в надёжном месте.

Да. Сгенерируйте случайный секрет на стороне сервера, не менее 128 бит (RFC 4226 рекомендует 160), покажите его один раз в виде QR-кода и проверяйте присланные коды, вычисляя тот же HMAC, обычно с допуском в одно окно в каждую сторону. Зрелые библиотеки есть для любого стека: pyotp (Python), otplib (JavaScript), rotp (Ruby).

Сопутствующие инструменты

Генератор ключей PGP

Создайте пару ключей OpenPGP в текстовом формате ASCII и сертификат отзыва с Curve25519, RSA 2048 или RSA 4096.

Генератор ключей API случайного типа

Создавайте на сервере ключи API длиной 8–128 символов в формате hex, base64url или алфавитно-цифровом формате либо UUIDv4.

Генератор SSL-сертификатов

Создайте самоподписанный сертификат SSL/TLS и закрытый ключ RSA полностью в браузере. Свои Common Name, SAN и срок действия, экспорт в PEM.

Шифрование / расшифровка AES

Шифруйте и расшифровывайте текст низкого риска с AES-шифрами OpenSSL. Парольная фраза хэшируется SHA-256, а Base64-вывод содержит IV плюс шифротекст.

Генератор JWT

Создавайте подписанные токены JWT с пользовательским заголовком, полями полезной нагрузки, подписью HMAC или RSA, а также ограничениями по сроку действия и аудитории для тестирования.

Генератор MD5

Создайте хеш MD5 для любого текста или файла. Результат, 128-битное значение в шестнадцатеричном формате, вычисляемое полностью в вашем браузере.

Инструмент доступен на других языках