Получить код 2FA по ключу. Как работает 2FA
Генератор кодов 2FA (TOTP) по секретному ключу
Вставьте один или несколько секретных ключей (Base32). Каждый ключ с новой строки. Коды обновляются автоматически каждые 30 секунд.
Как получить код 2FA по секретному ключу: полное руководство
Двухфакторная аутентификация (2FA) стала стандартом безопасности в интернете. Но что делать, если у вас есть секретный ключ, а приложение-аутентификатор недоступно? Или если вы хотите генерировать коды сразу для нескольких аккаунтов? Выше уже есть готовый инструмент: вставьте один или несколько Base32-ключей, и получите актуальные 6-значные коды. Ниже - как это работает, почему коды меняются каждые 30 секунд и что происходит внутри алгоритма TOTP.
1. Что такое 2FA и зачем она нужна
Двухфакторная аутентификация - это метод защиты аккаунта, при котором для входа нужно не только знать пароль, но и подтвердить личность вторым способом. Обычно это код из SMS, push-уведомление или одноразовый код из приложения-аутентификатора.
Пароль можно украсть, подобрать, перехватить через фишинг. Второй фактор решает эту проблему: даже если злоумышленник получил пароль, без кода из вашего телефона он не сможет войти. По данным Microsoft, 2FA блокирует более 99% атак на аккаунты.
Самый распространённый тип второго фактора - TOTP (Time-based One-Time Password). Это те самые 6-значные коды, которые меняются каждые 30 секунд в Google Authenticator, Authy, 1Password и других приложениях.
2. Как работает TOTP: математика внутри
TOTP описан в стандарте RFC 6238. Это расширение алгоритма HOTP (RFC 4226), который генерирует одноразовые пароли на основе счётчика событий. TOTP заменяет счётчик событий на текущее время.
Вот как это работает шаг за шагом:
1. Секретный ключ. При настройке 2FA сервер генерирует случайный секретный ключ. Это строка в кодировке Base32, обычно длиной 16 или 32 символа. Пример: JBSWY3DPEHPK3PXP. Этот ключ передаётся вам (через QR-код) и сохраняется на сервере. Он один и тот же для вас и для сервера.
2. Счётчик времени. Текущее время в Unix-формате (количество секунд с 1 января 1970 года) делится на 30. Получается целое число - это номер текущего 30-секундного интервала. Например, если сейчас 12:00:15, то время в Unix может быть 1700000015, делим на 30, получаем 56666667. Это число одинаково для всех устройств в мире в данный момент.
3. HMAC-хеш. Секретный ключ и номер интервала подаются на вход функции HMAC-SHA1. HMAC - это алгоритм хеширования с ключом. На выходе получается 20-байтовый хеш. Именно здесь используется SHA1 - стандартный алгоритм для TOTP, хотя существуют варианты с SHA256 и SHA512.
4. Усечение. Из 20 байт хеша берётся только часть. Специальный алгоритм динамического усечения (dynamic truncation) выбирает 4 байта и преобразует их в число. Затем это число делится по модулю 10^6, чтобы получить 6-значный код. Если код получается короче 6 цифр, добавляются ведущие нули.
5. Результат. Вы получаете 6-значный код, например 492039. Сервер делает те же вычисления со своим секретным ключом и сравнивает результат с тем, что вы ввели. Если коды совпадают, доступ разрешён.
Вся математика занимает миллисекунды. Именно поэтому приложение-аутентификатор может генерировать коды без интернета: ему нужны только секретный ключ и точное время.
3. Почему коды меняются каждые 30 секунд
30 секунд - это компромисс между безопасностью и удобством. Если бы код действовал дольше, у злоумышленника было бы больше времени на его перехват и использование. Если бы меньше - пользователи не успевали бы вводить код.
Сервер обычно принимает не только текущий код, но и код из предыдущего интервала, чтобы компенсировать небольшую рассинхронизацию часов. Это называется "окно допуска" (search window). Обычно оно составляет 1-2 интервала в каждую сторону. Однако чем шире окно, тем выше риск, что старый код всё ещё будет действителен.
В инструменте выше вы видите таймер обратного отсчёта. Когда он доходит до нуля, все коды автоматически обновляются. Это происходит синхронно с сервером, потому что обе стороны используют одно и то же системное время.
4. Что такое секретный ключ и как он выглядит
Секретный ключ - это строка в кодировке Base32. Base32 использует алфавит из 32 символов: A-Z и 2-7. Это сделано для удобства: буквы и цифры легко различить, нет путаницы между 0 и O, 1 и I. Длина ключа обычно составляет 16, 26 или 32 символа.
Примеры секретных ключей:
JBSWY3DPEHPK3PXP
GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ
MFRGGZDFMZTWQ2LK
Ключ чувствителен к регистру, но обычно хранится в верхнем регистре. Пробелы и дефисы игнорируются. Если у вас есть QR-код для настройки 2FA, внутри него закодирован URL вида:
otpauth://totp/Example:user@example.com?secret=JBSWY3DPEHPK3PXP&issuer=Example
Параметр secret в этом URL - это и есть ваш секретный ключ.
5. Где взять секретный ключ
Когда вы включаете 2FA на каком-либо сервисе (Google, GitHub, Discord, банк), вам показывают QR-код. Внутри этого QR-кода зашит URL с секретным ключом. Приложение-аутентификатор сканирует QR-код и извлекает ключ.
Если вы хотите получить ключ вручную:
На странице настройки 2FA найдите ссылку "Не можете отсканировать?" или "Ввести ключ вручную". Там будет показан секретный ключ в виде текста.
Либо отсканируйте QR-код любым приложением для чтения QR и найдите в результатах параметр secret=.
Сохраните ключ в надёжном месте. Если вы потеряете телефон, но у вас есть ключ, вы сможете генерировать коды на любом устройстве.
6. Безопасность: что важно помнить
Секретный ключ - это фактически второй пароль. Любой, кто получил ваш ключ, может генерировать действительные коды 2FA. Поэтому:
Не передавайте секретный ключ третьим лицам.
Не вставляйте ключ на непроверенных сайтах и в подозрительных приложениях.
Не храните ключ в открытом виде в заметках, мессенджерах или облачных хранилищах без шифрования.
Инструмент на этой странице работает полностью в вашем браузере. Ключи не отправляются на сервер, не сохраняются и не логируются. Вы можете проверить это, отключив интернет после загрузки страницы: инструмент продолжит работать.
Если вы подозреваете, что ключ скомпрометирован, немедленно отключите 2FA на сервисе и настройте заново с новым ключом.
7. Частые вопросы
Почему код не совпадает с приложением? Проверьте время на устройстве. TOTP зависит от точного времени. Если часы отстают или спешат больше чем на 30 секунд, коды будут разными. Включите автоматическую синхронизацию времени.
Можно ли использовать один ключ для нескольких аккаунтов? Нет, каждый аккаунт имеет свой уникальный секретный ключ. Если вы используете один ключ для двух сервисов, коды будут одинаковыми, но это небезопасно: компрометация одного ключа затронет оба аккаунта.
Что делать, если я потерял ключ? Если у вас нет резервных кодов, восстановить доступ будет сложно. Обратитесь в поддержку сервиса. На будущее всегда сохраняйте резервные коды, которые выдаются при настройке 2FA.
Работает ли TOTP без интернета? Да, генерация кода не требует подключения к сети. Нужны только секретный ключ и точное время. Интернет нужен только для того, чтобы сервер принял код.
Какой алгоритм используется по умолчанию? SHA1. Хотя SHA1 считается устаревшим для некоторых задач, в TOTP он до сих пор стандарт де-факто, потому что все распространённые аутентификаторы его поддерживают. SHA256 и SHA512 используются реже.
Заключение
TOTP - это элегантный и надёжный способ двухфакторной аутентификации. Он работает на основе общего секретного ключа и текущего времени, не требует интернета и легко реализуется на любом языке программирования. Инструмент выше позволяет быстро генерировать коды для одного или нескольких аккаунтов, не устанавливая дополнительных приложений. Главное - помнить, что секретный ключ равносилен паролю, и обращаться с ним нужно так же бережно.
Ключевые слова: 2FA код по ключу, TOTP генератор, секретный ключ 2FA, как получить код 2FA, TOTP онлайн, генератор одноразовых паролей, Base32 ключ 2FA, RFC 6238, двухфакторная аутентификация.


