56 lines
3.5 KiB
Markdown
56 lines
3.5 KiB
Markdown
# 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
|
||
```
|