keychain_max/README.md
2026-09-09 19:53:50 +00:00

56 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 использует только синтетические записи, не реальные пароли.
Сборка:
```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
```