SECURITY / ZERO KNOWLEDGE
Сервер не знает ваших кодов.
Практическая модель безопасности Best2FA: что именно зашифровано, какие атаки мы учитываем и где заканчиваются гарантии.
Ключевая модель
На устройстве создаётся случайный 256-битный Vault Master Key. Пароль через Argon2id защищает одну обёртку VMK, а 256-битный ключ Recovery Kit — вторую. Для каждого объекта из VMK и UUID выводится отдельный ключ HKDF-SHA256.
Что находится в ciphertext
Тип OTP, issuer, account, secret, алгоритм, PIN, домены и заметки шифруются AES-256-GCM. AAD привязывает ciphertext к vault ID, item ID, версии схемы и версии ключа. Подмена ciphertext, nonce или любого AAD-поля приводит к отказу аутентификации.
Что видит сервер
Сервер видит opaque ciphertext и nonce, версии, порядок, moving factor, revision, sync sequence и tombstone. Moving factor необходим для атомарной выдачи HOTP counter между устройствами. Активный hostname расширение сопоставляет локально и не отправляет в API.
Вход и устройства
Парольный вход завершается WebAuthn. Одноразовый recovery code может заменить passkey. Расширение использует OAuth Authorization Code с S256 PKCE, десятиминутный access token и rotating refresh token. Повторное использование старого refresh token отзывает всю семью устройства.
Границы защиты
E2EE защищает при раскрытии базы, backup и server storage. Она не защищает разблокированное заражённое устройство, вредоносное расширение, clipboard reader или JavaScript, который скомпрометированный production origin отдал пользователю. Для web-client риск доставки JavaScript остаётся принципиальным.
Потеря Recovery Kit
Мы не создаём escrow и не имеем master backdoor. Без пароля или recovery key ciphertext остаётся недоступным. Если потеряны также passkey/recovery codes, после подтверждения email и семидневной отмены разрешено только уничтожить старый vault.
Сообщить об уязвимости
Напишите на security@best2fa.com, не прикладывая реальные OTP-секреты. Укажите компонент, версию, шаги воспроизведения и влияние. Мы стремимся подтвердить получение в течение трёх рабочих дней.