keychain_max/README.md
2026-09-09 21:08:37 +00:00

3.6 KiB
Raw Permalink Blame History

Keychain

Полированный MVP менеджера паролей в стиле системного Keychain: Vue 3 + TypeScript на клиенте, FastAPI + SQLite для API и Manifest V3 расширение для Chromium/Firefox-подобных браузеров.

Интерфейс самостоятельный и вдохновлён спокойной компоновкой Apple Keychain — это не копия ассетов Apple и не официальный продукт Apple.

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

  • Пароль аккаунта и мастер-пароль разделены. Пароль аккаунта нужен только API для аутентификации.
  • Vault шифруется в браузере: Argon2id выводит ключ из мастер-пароля, данные шифруются AES-256-GCM с новым nonce на каждое сохранение.
  • API хранит только versioned envelope (salt, KDF-параметры, nonce, ciphertext, revision) и не получает мастер-пароль.
  • Сессии — случайные opaque-токены; на сервере хранится только SHA-256 хэш токена. Cookie сессии HttpOnly/SameSite, CSRF-токен отдельный.
  • Расширение не заполняет поля автоматически и не отправляет форму. Перед fill проверяется точное совпадение origin.
  • После перезапуска service worker расширение снова заблокировано; расшифрованные записи живут только в памяти worker-а.

Это не security-аудированный production password manager. Перед реальным использованием нужны HTTPS, PostgreSQL, rate limiting на edge, CSP/Trusted Types, аудит supply chain и криптографии, резервное копирование, threat modeling и независимый security review. Сброс пароля аккаунта не восстанавливает vault.

Запуск

npm install
cp .env.example apps/web/.env.local

# terminal 1
python3 -m venv .venv
. .venv/bin/activate
pip install -r apps/api/requirements.txt
KEYCHAIN_ALLOWED_ORIGINS=http://localhost:5173 \
  python3 -m uvicorn app.main:app --reload --app-dir apps/api --port 8000

# terminal 2
npm run dev

По умолчанию web-приложение запускается в безопасном demo mode, чтобы можно было посмотреть UI без API. Для реальных регистраций выставьте VITE_DEMO_MODE=false в apps/web/.env.local. Demo mode использует только синтетические записи, не реальные пароли. Production deployment через PostgreSQL + Docker Compose описан в deploy/README.md.

Сборка:

npm run typecheck
npm run build
npm run api:test

Готовое расширение появляется в apps/extension/dist; его можно загрузить как unpacked extension в Chrome/Edge/Brave или импортировать в Firefox с учётом различий MV3.

Структура

apps/
  api/         FastAPI, SQLite dev storage, auth/session/vault endpoints
  web/         Vue 3 responsive vault UI
  extension/   Manifest V3 popup, background worker and origin-checked content script
packages/
  core/        shared types, API client and browser crypto envelope