Одноразовый код TOTP (Time-based One-Time Password — одноразовый пароль, основанный на времени) — это временный код, который используется как второй фактор аутентификации (2FA) при входе в учетные записи и системы. Он генерируется на основе секретного ключа и текущего времени, и действует только в течение короткого времени (обычно 30 секунд).
🔐 Суть и назначение TOTP
TOTP используется для повышения безопасности, дополняя стандартную связку логин + пароль. Даже если злоумышленник узнает ваш пароль, он не сможет войти без одноразового кода, который постоянно меняется.
🔄 Как работает TOTP (по шагам)
1. Настройка
Вы регистрируете двухфакторную аутентификацию в сервисе (например, Google, GitHub, банковское приложение).
Сервис генерирует секретный ключ (обычно в виде QR-кода или текстовой строки).
Вы сканируете этот QR-код в приложении-аутентификаторе (Google Authenticator, Authy, Microsoft Authenticator и т.д.).
📦 Этот секретный ключ сохраняется в приложении и используется для генерации одноразовых кодов.
2. Генерация одноразового кода
Каждые 30 секунд приложение генерирует новый 6-значный код.
Код создается на основе:
секретного ключа (он никогда не передается по сети),
текущего времени (например, UNIX-время округляется до 30-секундных интервалов),
алгоритма HMAC-SHA1 (или SHA256, SHA512 — зависит от реализации).
⏱ Это значит, что одинаковый секретный ключ + текущее время → одинаковый код.
3. Проверка
Когда вы входите в систему, она запрашивает одноразовый код.
Вы берете код из приложения и вводите его.
Сервер тоже генерирует код (на основе того же секретного ключа и текущего времени).
Если введенный код совпадает с тем, который рассчитал сервер — доступ разрешается.
🧠 Пример:
Секретный ключ:
JBSWY3DPEHPK3PXP
Время: 12:01:00
Приложение и сервер вычисляют TOTP:
Шаг 1: Определяется временной интервал (например, «шаг 40020»)
Шаг 2: Делается HMAC с секретным ключом и временем
Шаг 3: Полученный байт обрезается до 6 цифр
Получается код, например:
482913
Код действует только 30 секунд.
🧰 Приложения для TOTP
Google Authenticator (самый распространенный)
Microsoft Authenticator
Authy
1Password / Bitwarden (встроено в менеджеры паролей)
FreeOTP
OTP Auth (iOS)
📜 Стандарты и алгоритмы
Основан на открытом стандарте RFC 6238
Базируется на HMAC-Based One-Time Password (HOTP, RFC 4226), но вместо счетчика используется текущее время
Используется SHA1 по умолчанию, но может быть SHA256 или SHA512
✅ Преимущества
📱 Удобство: можно использовать даже без интернета (офлайн)
⛓ Безопасность: код не передается по сети (в отличие от SMS-кодов)
🔓 Независимость от оператора или SIM-карты
⚠️ Недостатки и риски
📴 Если потеряете устройство с TOTP — потеряете доступ (если нет резервного кода)
🕓 Несинхронизированные часы между устройством и сервером могут вызвать ошибки
🔒 Не защищает от фишинга, если злоумышленник подделал сайт и попросил код
💡 Советы по безопасности
Делайте резервные копии секретных ключей при настройке
Храните коды восстановления (backup codes)
Используйте аппаратные токены (например, YubiKey с TOTP) для критически важных аккаунтов
Настройте защиту доступа к телефону и приложениям-аутентификаторам
Если хочешь, я могу показать, как самому сгенерировать TOTP-код на Python или рассчитать его вручную для понимания.