Files
bare/docs/decisions/006-e2ee-webcrypto.md
T
ClaudeandClaude Fable 5 3d814112a9 Заложить репозиторий: философия, архитектура, модель угроз, ADR
Документы фиксируют принятые проектные решения Bare:
клиент без фреймворков и сборки, Go-сервер одним бинарём,
E2EE на WebCrypto, сервер-реле без истории, локальная история
с экспортом/импортом, Web Push + VAPID. Кода нет — сначала документы.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SW4ZXtKn5NjX8NH3Lhm2ND
2026-08-20 09:17:37 +00:00

17 lines
1.3 KiB
Markdown

# ADR-006: E2EE на WebCrypto, ключ за паролем
## Контекст
Оператор не должен уметь читать сообщения. Крипто-библиотеки на клиенте противоречат нулю зависимостей и аудируемости — вся криптография должна быть нативной.
## Решение
Только WebCrypto. Идентичность пользователя — ECDH-пара P-256. Приватный ключ шифруется ключом, выведенным из пароля (PBKDF2 — единственный KDF в WebCrypto), и хранится на сервере как блоб. Чаты 1:1: ECDH shared secret → AES-GCM.
## Следствия
- Сервер видит только шифротекст — и блоба, и сообщений.
- Сброс пароля невозможен by design: пароль — материал ключа. Забыл — значит забыл.
- Мультидевайс-вход: новый девайс вводит пароль, скачивает блоб, расшифровывает ключ.
- Стойкость блоба к оффлайн-перебору равна стойкости пароля.