Безопасность

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

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

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

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

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

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

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

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

Тот же подход defense-in-depth, который я рекомендую для корпоративной ИТ-архитектуры.

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

  • Flutter + Dart: кросс-платформа (iOS в App Store, Android в бете)
  • State management: Riverpod 2.x
  • Криптография: PointyCastle 4.x + cryptography 2.x — полная Bitwarden-совместимая реализация
  • Real-time: SignalR WebSocket + MessagePack + polling fallback
  • Безопасность: local_auth, flutter_secure_storage
  • Локализация: English + Русский с переключателем в приложении

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

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

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

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

Security-приложение без возможности аудита — это risk. Vault Approver под MIT-лицензией, полностью открыт на GitHub. Каждая строка криптокода доступна для проверки. Для организаций с чувствительными данными это обязательное требование.

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

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

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

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

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

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

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

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

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

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

Илья Арестов — Внештатный технический директор | Dubai Airport Free Zone (DAFZ), Дубай, ОАЭ | Республика Казахстан, г. Алматы, ул. Зенкова 59 | +971-585-930-600 | https://t.me/getmonolith

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