Усі статті

TOTP: як працюють одноразові коди в застосунках-автентифікаторах

Коли ви скануєте QR-код у Google Authenticator чи подібному застосунку, він починає показувати шестизначний код, що змінюється кожні 30 секунд — і це працює навіть без інтернет-з'єднання на телефоні. TOTP (Time-based One-Time Password) робить це можливим завдяки простій, але елегантній ідеї.

Спільний секрет плюс час

Під час налаштування сервер і застосунок-автентифікатор обмінюються одним спільним секретним ключем (саме його закодовано у QR-коді). Далі обидві сторони незалежно обчислюють HMAC від цього секрету й поточного unix-часу, округленого до 30-секундного інтервалу — і отримують однаковий код, не спілкуючись одна з одною.

Чому це працює без інтернету

Оскільки код обчислюється локально з секрету й системного часу пристрою, застосунку-автентифікатору не потрібне мережеве з'єднання для генерації коду. Єдина вимога — щоб годинники сервера й телефону були синхронізовані в межах невеликого допустимого відхилення (зазвичай ±30–60 секунд).

Чому код змінюється кожні 30 секунд

Короткий часовий інтервал обмежує вікно, протягом якого перехоплений код залишається дійсним, знижуючи ризик його повторного використання зловмисником. Сервер зазвичай приймає поточний і один попередній інтервал, щоб компенсувати невелику затримку мережі при введенні коду.

Навіщо це потрібно

  • Розуміти механіку двофакторної автентифікації при налаштуванні або діагностиці проблем із застосунками-автентифікаторами.
  • Тестувати власну реалізацію TOTP при розробці системи автентифікації.
  • Генерувати коди для автоматизованого тестування без ручного введення з телефону.

Чого TOTP не захищає

TOTP надійно захищає від крадіжки пароля окремо від коду, але не від фішингу в реальному часі: якщо жертва вводить і пароль, і поточний TOTP-код на підробленому сайті, зловмисник може миттєво використати обидва значення на справжньому сайті, поки код ще дійсний. Від такої атаки захищають лише апаратні ключі за стандартом FIDO2/WebAuthn, які криптографічно прив'язані до конкретного домену.

Спробувати інструмент