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