Good

TOTP (Time-based One-Time Password)

TOTP (Time-based One-Time Password) — алгоритм генерації одноразових паролів на основі поточного часу та спільного секрету (RFC 6238), що є основою більшості застосунків двофакторної автентифікації.

Опис

TOTP є розширенням алгоритму HOTP (RFC 4226), де замість лічильника використовується поточний часовий відрізок (зазвичай 30 секунд). Обидві сторони — сервер та пристрій користувача — знають спільний секрет і можуть незалежно обчислити однаковий 6-значний код без мережевої взаємодії.

Алгоритм:
1. Часовий крок T = floor(Unix timestamp / 30)
2. HMAC-SHA1 від спільного секрету та T
3. Dynamic truncation: взяти 4 байти з HMAC-результату
4. Взяти останні 6 цифр (modulo 10⁶)

Код дійсний 30 секунд. Для компенсації розбіжності годинників сервери зазвичай приймають ±1 крок (тобто ±30 секунд від поточного часу).

Спільний секрет передається одноразово при першому налаштуванні у вигляді QR-коду (URI-формат otpauth://) або Base32-рядка. Секрет зберігається в зашифрованому сховищі застосунку-автентифікатора (Google Authenticator, Aegis, Bitwarden TOTP).

З точки зору безпеки TOTP захищає від атак підбору пароля та перехоплення статичних credentials, але не від фішингу в реальному часі (MITM, що перехоплює і миттєво використовує код) та від компрометації пристрою. Для захисту від фішингу рекомендуються апаратні ключі FIDO2/WebAuthn. Проте для внутрішніх корпоративних систем TOTP є значно кращою альтернативою, ніж відсутність другого фактора.

⚠️ Увага
Резервні коди TOTP (backup codes) є повноцінною заміною токена. Зберігайте їх офлайн у захищеному місці. Якщо резервні коди скомпрометовано — негайно відкличте TOTP-налаштування та перегенеруйте.

В контексті UMTC

MAS (Matrix Authentication Service) підтримує TOTP як другий фактор автентифікації для адміністраторів Wiki та операторів Matrix. Налаштування через Element або веб-інтерфейс MAS.

Рекомендований застосунок для UMTC-персоналу: Aegis Authenticator (Android, відкритий код) з резервним копіюванням у зашифрований файл.

Перевірка TOTP у типовому Python-сервісі:

import pyotp

def verify_totp(secret: str, user_code: str) -> bool:
    totp = pyotp.TOTP(secret)
    # valid_window=1 дозволяє ±1 крок (±30 сек)
    return totp.verify(user_code, valid_window=1)

# Генерація URI для QR-коду
def generate_totp_uri(secret: str, username: str) -> str:
    totp = pyotp.TOTP(secret)
    return totp.provisioning_uri(
        name=username,
        issuer_name="UMTC Wiki"
    )

Для командного рядка перевірка коду:

# oathtool (Linux)
oathtool --totp --base32 "JBSWY3DPEHPK3PXP"
💡 Порада
При розгортанні TOTP для групи операторів: генеруйте секрети централізовано, передавайте QR-коди через захищений канал (Matrix E2EE), фіксуйте факт активації в журналі доступу.

Пов'язані терміни

  • oauth2 — OAuth 2.0 / MAS є рівнем, де TOTP застосовується як другий фактор
  • matrix — Matrix Element підтримує TOTP для входу в акаунт
  • synapse — Synapse делегує автентифікацію (включно з TOTP) до MAS

Посилання

Шлях: glossary/totp.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications