Личные сообщения с End-to-End шифрованием
На Kakahi.ru появилась система личных сообщений с End-to-End Encryption (E2EE).
Это означает, что сообщения шифруются непосредственно в браузере отправителя и расшифровываются только в браузере получателя. Сервер выступает исключительно в роли посредника для доставки зашифрованных данных и не имеет доступа к содержимому переписки.
Как работает шифрование
При первом открытии раздела сообщений браузер автоматически создает уникальную криптографическую пару ключей:
- публичный ключ (Public Key);
- приватный ключ (Private Key).
Публичный ключ сохраняется на сервере и используется другими пользователями для отправки вам зашифрованных сообщений.
Приватный ключ никогда не передается на сервер и хранится только локально в вашем браузере.
Для защиты переписки используются современные криптографические алгоритмы:
- X25519 — обмен ключами;
- XChaCha20-Poly1305 — шифрование и проверка целостности сообщений;
- libsodium — криптографическая библиотека с открытым исходным кодом.
Каждое сообщение шифруется на устройстве отправителя еще до отправки на сервер. Сервер получает и хранит только зашифрованный набор данных.
Что хранится на сервере
Сервер хранит:
- публичные ключи пользователей;
- зашифрованные сообщения;
- техническую информацию, необходимую для доставки сообщений.
Сервер не хранит:
- тексты сообщений в открытом виде;
- приватные ключи пользователей;
- данные, позволяющие расшифровать переписку.
По этой причине администрация сайта технически не может читать содержимое защищенных сообщений.
Почему приватный ключ хранится только в браузере
Мы сознательно выбрали модель Zero-Knowledge.
В классических мессенджерах приватные ключи часто синхронизируются между устройствами через серверы компании. Это удобно, но требует определенного уровня доверия к оператору сервиса.
В нашей реализации приватный ключ остается исключительно у пользователя. Сервер никогда не получает его копию и не может восстановить его при утере.
Такой подход делает систему максимально прозрачной:
- только пользователь владеет своим ключом;
- администрация сайта не имеет доступа к ключам;
- отсутствует скрытое резервное хранение ключей на сервере.
Что произойдет при очистке браузера
Поскольку приватный ключ хранится локально, его удаление приводит к потере возможности расшифровать ранее полученные сообщения.
Это может произойти в следующих случаях:
- очистка данных браузера;
- удаление localStorage;
- использование другого браузера;
- использование нового устройства;
- переустановка браузера или операционной системы.
После потери приватного ключа браузер автоматически создаст новую пару ключей.
Новые сообщения будут работать нормально, однако старая переписка останется зашифрованной и станет недоступной для чтения.
Это не ошибка системы, а следствие принципа Zero-Knowledge: если сервер никогда не получал приватный ключ, он не может помочь восстановить доступ к старым сообщениям.
Важное ограничение
End-to-End шифрование защищает переписку от чтения на сервере, но не может защитить пользователя в случае полного компрометирования его устройства или браузера.
Наша позиция
Мы стремились создать максимально честную и прозрачную систему E2EE.
Поэтому приватные ключи не передаются на сервер, не синхронизируются между устройствами и не могут быть восстановлены администрацией сайта.
Только пользователь контролирует свои ключи и доступ к своей переписке.
Ссылка на исходный код https://github.com/vegagmt/php-e2ee-messenger