Нажмите "Enter" для перехода к содержанию

Как мы создали приватный мессенджер с сквозным шифрованием (E2E)

Это SaaS-продукт для обмена личными сообщениями между пользователями различных платформ.

Мы отвечали за прототипирование и дизайн пользовательского приложения, разработанного на React Native, для пользователей iOS и Android, но при этом не хотели затягивать процесс создания на длительный срок.

Кто это сделал?

Команду Web Secret представляют Никита Толкачев и Маша Сидоревич, специалисты в области криптографии и мобильной разработки.

Сколько?

3 месяца. Да, именно столько времени требуется для создания полноценного и безопасного мессенджера, работающего по принципу SaaS и которым могут пользоваться до 10 000 человек в день. При этом скорость генерации и доставки контента сервером не будет превышать 1 секунду при пиковой нагрузке.

Почему это круто для пользователей?

Для доступа к приложению не требуется вводить никаких личных данных, поскольку у вас уже есть личный аккаунт на платформе. Кстати, никто не найдет вас по вашему нику. Для входа вам понадобится QR-код или прямая ссылка, размещенная в профиле человека, с которым вы хотите пообщаться, а также средства на вашем счету.

За определенную плату вам предоставляется возможность вести абсолютно конфиденциальную онлайн-переписку с любым другим пользователем платформы. И вы можете делать это с нескольких устройств одновременно. Таким образом, если вам нужна история переписки или доступ к медиафайлам, вы можете получить их с мобильного телефона, планшета или ноутбука.

Проект может быть подключен к совершенно различным сервисам и даже не требовать платы. Например, если это решение будет выбрано любым представителем финансового сектора для внутреннего использования.

Сквозное шифрование

Если вы сейчас начали кричать: «Ааа! Личные сообщения будут храниться на чужих серверах», то пришло время рассказать вам о сквозном шифровании, которое использовалось при создании этого мессенджера.

Фактически это означает, что ключ расшифровки хранится только на вашем устройстве. И даже если кто-то атакует сервер, перехватывает трафик, он всё равно не сможет прочитать сообщения. Они остаются на сервере до тех пор, пока не будут доставлены адресатам. Но даже там они остаются зашифрованными. Это значит, что даже владельцы сервиса не смогут узнать, что вы там пишете друг другу.

Почему это технически круто?

Как вы уже поняли, мы создали секретные чаты, как в Telegram, но лучше, потому что в нашем случае они доступны для нескольких пользовательских устройств, своего рода многоустройственный секретный чат. Для шифрования сообщений используется AES-256, а для обмена общим ключом — собственный протокол, использующий криптографию на эллиптических кривых.

Алгоритм «Кунжут»

Синхронизация сообщений между всеми устройствами пользователей, на которой настаивал клиент, реализована аналогично схеме, описанной в алгоритме Sesame (протокол, разработанный для мессенджера Signal). Все используемые устройства постоянно обмениваются ключами для поддержки сквозного шифрования (E2E).

Хранение данных

Ещё одно требование заказчика — хранение сообщений на сервере до момента их получения клиентом — было реализовано следующим образом. Сами сообщения хранятся в PostgreSQL, а для системы публикации/подписки используется Redis. Хранить сообщения в Redis нецелесообразно, так как это требует слишком много памяти. Мессенджер https://koobik.net/blog/howto-install-nextcloud-talk поддерживает обмен медиафайлами (фотографиями и видео), которые дублируются на всех устройствах пользователей (та же самая печально известная синхронизация), и это потребовало бы большого количества памяти.

Что было использовано в работе?

Back-end : Go — это мощный и простой компилируемый язык программирования.

Мобильные приложения : React Native значительно сократил время разработки кроссплатформенных приложений без потери качества.

Базы данных : Redis, PostgreSQL. Redis используется там, где требуется максимальная производительность, PostgreSQL — это проверенная временем база данных, используемая для хранения данных об устройствах, пользователях и сообщениях.

Сервер : Docker и Kubernetes позволяют снизить затраты на обслуживание серверной инфраструктуры и создание процессов CI/CD.

Кому это будет интересно?

Компании, которые хотят обеспечить безопасный канал связи между сотрудниками с возможностью синхронизации переписки между несколькими устройствами пользователей, передачи медиафайлов без необходимости хранения чего-либо на своих серверах.