Об этом инструменте
TOTP (одноразовый пароль на основе времени, RFC 6238) — это алгоритм, лежащий в основе шестизначных кодов, которые показывают Google Authenticator, Microsoft Authenticator, Authy и большинство настроек двухфакторной аутентификации по принципу «отсканируйте этот QR-код». Он работает, объединяя общий секретный ключ с текущим временем, округлённым вниз до фиксированного окна (обычно 30 секунд), и пропуская результат через HMAC — та же конструкция, что используется в HOTP из RFC 4226, только со счётчиком, производным от времени, вместо инкрементного. Поскольку обе стороны (ваше устройство и сервер) знают секрет и могут читать часы, они независимо вычисляют один и тот же код, никогда его не передавая.
Этот инструмент выполняет полный алгоритм RFC 6238 на стороне клиента, используя нативную реализацию HMAC браузера (WebCrypto): вставьте (или сгенерируйте) секрет в кодировке Base32, и он выведет текущий код в реальном времени, обновляя его каждую секунду и переключая ровно в момент окончания 30-секундного окна. Он предназначен для разработчиков, проверяющих реализацию TOTP, тестирующих процесс регистрации или желающих понять, как на самом деле вычисляются коды аутентификатора — а не для хранения реальных секретов 2FA ваших аккаунтов.
Частые вопросы
Это тот же алгоритм, что и в Google Authenticator?
Да — здесь реализован TOTP согласно RFC 6238 с SHA-1 (по умолчанию), это именно то, что используют Google Authenticator, Authy, Microsoft Authenticator и большинство 2FA-приложений. При одинаковом секрете этот инструмент и эти приложения будут выдавать одинаковые коды в один и тот же момент.
Почему мой код перестал совпадать с приложением-аутентификатором?
Две самые частые причины: часы вашего устройства рассинхронизированы (TOTP основан на времени, поэтому обеим сторонам нужны точные часы — синхронизируйте системное время), или вы немного неверно ввели/вставили Base32-секрет. Перепроверьте секрет посимвольно, поскольку у TOTP нет встроенного способа обнаружить опечатку в самом секрете.