Что делает инструмент
Приложения двухфакторной аутентификации — Google Authenticator, Microsoft Authenticator, 1Password — показывают шестизначные коды, которые меняются каждые 30 секунд. Каждый код — одноразовый пароль, вычисленный из общего секрета: TOTP (RFC 6238) использует время, HOTP (RFC 4226) — счётчик. Инструмент вычисляет те же коды из секрета, чтобы вы могли протестировать настройку 2FA, отладить серверную реализацию или проверить, каким должен быть код.
Он показывает текущий код с обратным отсчётом, а также предыдущий и следующий коды, которые серверы часто принимают, чтобы покрыть небольшие расхождения часов.
Как пользоваться
- Вставьте секрет Base32 (буквы A–Z и цифры 2–7; пробелы и регистр не важны) или целиком URI
otpauth://из QR-кода. Нажмите Пример, чтобы попробовать. - Выберите TOTP или HOTP и задайте алгоритм, число цифр и интервал как в аккаунте. Настройки из URI otpauth имеют приоритет.
- Для HOTP введите счётчик и переходите между кодами кнопкой Счётчик +1.
- Скопируйте текущий код. Обратный отсчёт показывает, сколько он ещё действителен.
Пример
Демонстрационный секрет JBSWY3DPEHPK3PXP — это байты «Hello!» и 0xDEADBEEF в Base32. URI ниже, в том виде, в каком он закодирован в QR-коде, описывает аккаунт, использующий этот секрет с настройками по умолчанию:
otpauth://totp/Example:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example&algorithm=SHA1&digits=6&period=30
В Unix-время 1700000000 этот секрет даёт код 324 550, а до конца окна остаётся 10 секунд.
Как вычисляется код
Секрет декодируется из Base32 в байты. Для TOTP счётчик — это Unix-время в секундах, делённое на интервал и округлённое вниз. Счётчик записывается в 8 байт и подписывается HMAC с секретом. Динамическое усечение выбирает 4 байта из результата HMAC по его последнему полубайту, и число приводится к нужному количеству цифр с сохранением ведущих нулей.
Частые вопросы
› Почему мой код не совпадает с кодом в приложении-аутентификаторе?
Коды TOTP зависят от часов, поэтому сначала проверьте, что время на устройстве устанавливается автоматически. Затем убедитесь, что алгоритм, число цифр и интервал совпадают с настройками аккаунта. Большинство сервисов использует SHA-1, 6 цифр и 30 секунд, а приложения-аутентификаторы игнорируют другие настройки, если они не указаны в QR-коде.
› Чем TOTP отличается от HOTP?
TOTP (RFC 6238) использует в качестве счётчика текущее время, делённое на интервал, поэтому код меняется каждые 30 секунд. HOTP (RFC 4226) использует счётчик, который увеличивается на единицу при каждом использованном коде. Оба пропускают секрет и счётчик через HMAC и берут последние 6–8 цифр.
› Сохраняется ли мой секрет или отправляется куда-либо?
Нет. Коды вычисляются в браузере с помощью Web Crypto API. Секрет не сохраняется, не попадает в адресную строку и не включается в ссылки для отправки; ссылка содержит только настройки. Тем не менее секрет 2FA даёт полный доступ ко второму фактору, поэтому вставляйте только свои секреты.
› Можно ли использовать инструмент при внедрении 2FA в своё приложение?
Да. Нажмите «Случайный секрет», чтобы создать 160-битный секрет Base32, передайте его пользователям в URI otpauth:// или QR-коде и сравнивайте коды сервера с показанными здесь. Серверы обычно принимают также предыдущий и следующий коды, чтобы учесть расхождение часов.