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