Vault Approver Vaultwarden: биометрический вход | 2026
Безопасность

Vault Approver: подтверждение входа для Vaultwarden

Функция Bitwarden «Вход через устройство» — удобная штука: нажал уведомление, подтвердил, и ты авторизован без пароля. Но для подтверждения нужен полный клиент Bitwarden с загруженным хранилищем. Я создал Vault Approver Vaultwarden — минималистичное Flutter-приложение, которое делает ровно одно: подтверждает запросы на вход на self-hosted Vaultwarden серверах. Без доступа к хранилищу, без сохранённых паролей, только биометрия и одно нажатие.

Зачем нужен Vault Approver Vaultwarden

Vault Approver — приложение биометрического подтверждения входа через устройство для Vaultwarden

Self-hosted Vaultwarden — золотой стандарт управления паролями: вы контролируете данные, сервер, правила. Но у «Входа через устройство» есть UX-проблема: официальный мобильный клиент Bitwarden загружает всё хранилище ради одного подтверждения. Это лишняя поверхность атаки для действия в одно нажатие. Vault Approver Vaultwarden убирает всё лишнее: Face ID → запрос → проверка fingerprint-фразы → подтвердить. Приложение никогда не открывает хранилище, не хранит мастер-пароль, а модель безопасности полностью end-to-end с шифрованием RSA-2048-OAEP.

Принцип тот же, что я применяю к любой чувствительной системе: инструмент, которому нужно делать одно, должен уметь делать только это. Подтверждающее приложение, которое заодно умеет читать ваши пароли, — это приложение, которое может их утечь. Поэтому это — не умеет, по конструкции, а не по политике.

Как работает Vault Approver

  1. Разовая настройка: URL сервера + email + мастер-пароль. Приложение вычисляет ключи через Argon2id, сохраняет user key в Keychain/Keystore за биометрией, пароль стирает
  2. Уведомления в реальном времени: SignalR WebSocket с бинарным протоколом MessagePack подключается к серверу. При запросе «Вход через устройство» — мгновенный push, с polling-фолбэком (5 с / 15 с / 30 с / 1 мин), если сокет отвалился
  3. Биометрическая разблокировка: Face ID или Touch ID при каждом запуске, без PIN, без упрощений
  4. Верификация по фразе: 5-словная EFF-фраза из публичного ключа запрашивающего предотвращает спуфинг
  5. Подтверждение в одно нажатие: RSA-2048-OAEP шифрует user key публичным ключом запрашивающего. Сервер не видит ваших ключей

Криптографическая цепочка по шагам

Весь смысл в том, что подтверждение проходит end-to-end: сервер ретранслирует шифртекст, который не может прочитать. Vault Approver точно повторяет схему ключей Bitwarden, поэтому self-hosted Vaultwarden остаётся полностью совместимым. Деривация идёт в четыре этапа:

  1. Master keymasterPassword + email проходят через объявленный сервером KDF (Argon2id, соль = SHA-256(email), усечённая до 16 байт; или PBKDF2-SHA256 для старых серверов) и дают 32-байтовый master key.
  2. Stretched key — master key расширяется через HKDF-Expand(SHA-256) в 64-байтовый растянутый ключ: encKey = HKDF(info="enc", 32B) и macKey = HKDF(info="mac", 32B).
  3. User key — растянутый ключ через AES-256-CBC расшифровывает защищённый симметричный ключ аккаунта и даёт 64-байтовый user key. Именно он разблокирует данные хранилища — и это единственный секрет, который вообще держит подтверждающее приложение.
  4. Подтверждение — на каждый запрос user key шифруется через RSA-OAEP публичным ключом запрашивающего устройства. Расшифровать может только то устройство, что начало вход; сервер Vaultwarden — слепой ретранслятор.

Аутентификация на сервере использует отдельное значение — хеш мастер-пароля, вычисляемый как PBKDF2-SHA256(masterKey, соль=masterPassword, 1 итерация), — поэтому сервер проверяет вас, ни разу не получая ничего, что могло бы расшифровать хранилище. Ничего в этой цепочке не придумано для приложения: это документированный протокол Bitwarden, переписанный на Dart так, чтобы его можно было прочитать построчно.

Fingerprint-фраза: защита от фишинга подтверждений

У беспарольного подтверждения есть один неприятный сценарий: злоумышленник, знающий ваш email, инициирует запрос «Вход через устройство» и надеется, что вы по привычке нажмёте «подтвердить». Vault Approver закрывает эту брешь fingerprint-фразой — пять слов из словаря EFF, детерминированно выведенные из публичного ключа запрашивающего устройства. Та же фраза показывается на устройстве, которое просит вход. Если слова не совпали — запрос не ваш, и вы его отклоняете.

Это превращает абстрактное «легитимен ли запрос?» в конкретную пятисекундную человеческую проверку — та же идея внеполосной верификации, что стоит за safety numbers в Signal, применённая к подтверждению входа. Она не мешает запросу прийти, но мешает вам подтвердить чужой.

Архитектура безопасности

Имея 6 патентов в области информационной безопасности, я проектировал Vault Approver по принципу zero-trust. Модель безопасности держится на пяти гарантиях:

  • Мастер-пароль не хранится: вводится один раз при настройке, используется для деривации ключей, затем стирается. При смене биометрии нужна повторная настройка
  • Device Keychain/Keystore: user key зашифрован случайным biometric storage key, защищён Secure Enclave (iOS) или Android Keystore
  • E2E-шифрование: полная Bitwarden-совместимая криптоцепочка — Argon2id KDF, HKDF-SHA256 растяжка, AES-256-CBC расшифровка ключа хранилища, обмен ключами RSA-OAEP
  • Нет доступа к хранилищу: приложение вызывает только /api/auth-requests — физически не может прочитать пароли
  • Нулевой сбор данных: ноль аналитики, ноль телеметрии, ноль облака. Лейбл приватности в App Store подтверждает: «Data Not Collected»

Тот же подход defense-in-depth, который я рекомендую для корпоративной ИТ-архитектуры: минимизировать поверхность атаки, шифровать всё, не доверять ничему.

Модель угроз: от чего защищает и от чего нет

Честная безопасность — это называть границы. От чего Vault Approver защищает:

  • Скомпрометированный сервер — Vaultwarden ретранслирует только шифртекст, который не может прочитать, поэтому взломанный сервер не восстановит хранилище из подтверждений
  • Фишинг подтверждений — fingerprint-фраза делает инициированный атакующим запрос явно неправильным
  • Утечку хранилища на уровне приложения — утекать нечему: UI хранилища нет, читать пароли приложение не может в принципе
  • Случайный доступ к устройству — биометрия при каждом запуске плюс авто-блокировка держат приложение за вашим лицом или отпечатком

От чего не защищает, прямым текстом: полностью скомпрометированное устройство, где атакующий может обойти биометрический слой ОС; пользователь, который подтверждает запрос с несовпавшей фразой (проверка работает, только если вы её действительно читаете); и вы по-прежнему доверяете своему серверу Vaultwarden честно ретранслировать auth-requests — хранилище он не читает, но вредоносный сервер мог бы придерживать или спамить запросами. Приложение резко сужает поверхность атаки, но не отменяет доверие к собственному железу.

Детали защиты

Помимо криптографии, несколько мелких решений снижают реальную экспозицию:

  • Privacy screen: размытие на iOS и FLAG_SECURE на Android скрывают содержимое в переключателе задач и блокируют скриншоты
  • Настраиваемый таймаут блокировки: сразу / 15 с / 1 мин / 5 мин / 15 мин / никогда — приложение пере-блокируется на ваших условиях
  • 2FA / TOTP поддерживается при первичной настройке, в соответствии с тем, что требует ваш сервер
  • Темы система / светлая / тёмная и встроенный переключатель EN/RU — инструмент подстраивается под устройство, а не наоборот

Технический стек

  • Flutter + Dart (SDK ≥ 3.5): кросс-платформа — iOS в App Store, Android в бете
  • State management: Riverpod 2.x для реактивного UI
  • Криптография: PointyCastle 4.x + cryptography 2.x — полная Bitwarden-совместимая реализация
  • Сеть: dio 5.x, web_socket_channel 3.x, msgpack_dart 1.x (SignalR + MessagePack + polling fallback)
  • Безопасность: local_auth (биометрия), flutter_secure_storage (Keychain/Keystore)
  • Локализация: English + Русский со встроенным переключателем

Быстрый старт

Требования: self-hosted сервер Vaultwarden с включённым «Входом через устройство» и телефон с Face ID / Touch ID (iOS) или биометрией (Android).

  1. Установить: Vault Approver в App Store (бесплатно, 20.9 MB)
  2. Подключить: URL вашего Vaultwarden сервера (например, https://vault.yourdomain.com)
  3. Авторизоваться: email + мастер-пароль + опционально 2FA/TOTP
  4. Биометрия: Face ID или Touch ID — это становится единственным способом разблокировки
  5. Готово: запросы «Вход через устройство» приходят мгновенно

Android-версия в открытой бете — APK на GitHub.

Почему open source критичен для security-приложений

Security-приложение, которое нельзя аудировать, — это риск. Vault Approver под MIT-лицензией, полностью открыт на GitHub. Каждая строка криптокода доступна для проверки — от деривации ключей Argon2id до обмена ключами RSA-OAEP. Никакой обфускации, скрытых сетевых вызовов, проприетарных чёрных ящиков. Для инструмента, который держит единственный ключ, способный разблокировать ваше хранилище, «доверьтесь мне» недостаточно — нужно «прочитайте код». Эта прозрачность особенно важна для организаций с чувствительными данными, которым нужно проверять, что работает на устройствах сотрудников.

Нужна помощь с настройкой self-hosted Vaultwarden для команды? Бесплатная консультация →

Часто задаваемые вопросы

Vault Approver работает с официальным Bitwarden?

Разработан для Vaultwarden, использует стандартный Bitwarden API. Может работать с официальными серверами, но основное тестирование — на Vaultwarden.

Может ли приложение получить доступ к паролям?

Нет. Vault Approver взаимодействует только с endpoint auth-requests. Нет UI хранилища, нет списка паролей, нет возможности расшифровать учётные данные. Это подтверждающее приложение, а не клиент хранилища.

Для чего нужна fingerprint-фраза?

Это 5-словная EFF-фраза из публичного ключа запрашивающего устройства, показываемая и у запрашивающего, и у подтверждающего. Совпадение фраз доказывает, что запрос действительно ваш; несовпадение значит, что его инициировал атакующий — и вы отклоняете.

Что если потерять телефон?

User key защищён биометрией устройства внутри Secure Enclave / Android Keystore. Без вашего лица или отпечатка ключ не извлечь, и хранилище в безопасности. Просто настройте Vault Approver на новом устройстве с мастер-паролем.

Есть Android-версия?

В открытой бете. Можно собрать из исходников или скачать APK с GitHub. Google Play — после завершения бета-тестирования.

Нужна консультация?

Если вам нужна профессиональная экспертиза — запишитесь на бесплатную 15-минутную консультацию.

Оцените статью