| apps | ||
| deploy | ||
| packages/core | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.yml | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| SECURITY.md | ||
| tsconfig.base.json | ||
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