# 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. ## Запуск ```bash 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`](deploy/README.md). Сборка: ```bash npm run typecheck npm run build npm run api:test ``` Готовое расширение появляется в `apps/extension/dist`; его можно загрузить как unpacked extension в Chrome/Edge/Brave или импортировать в Firefox с учётом различий MV3. ## Структура ```text 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 ```