12 октября 2020

Plasma Messenger

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

intro

Необходимо было создать SaaS-чат – самый безопасный мессенджер для обмена сообщениями на базе платформы клиента с возможностью предоставления платного доступа по подписке для других платформ. Мы отвечали за прототипирование и дизайн пользовательского приложения, которое разработано на React Native, чтобы охватить пользователей и iOS, и Android, но не растягивать процесс создания на долгий срок.

Кто делал?

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

Никита
Толкачев
Back-end
Маша
Сидоревич
Mobile

«По факту нам предстояло создать второй telegram. Но, наверное, хорошо, что клиент сформулировал задачу не так, и мы смотрели на проект как на абсолютно чистый лист»‎

Сколько?

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

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

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

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

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

E2E шифрование

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

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

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

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

The Sesame Algorithm

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

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

Другое требование заказчика, хранение сообщений на сервере до момента получения заказчиком, было реализовано следующим образом. Сами сообщения хранятся в PostgreSQL, а для Pub-Sub системы используется Redis. Сообщения в Redis’е хранить нецелесообразно — жалко памяти. В мессенджере поддерживается обмен медиа-файлами (фото и видео), которые должны дублироваться на все устройства пользователя (та самая пресловутая синхронизация), и это бы съедало много памяти.

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

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

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

Mobile: React Native — позволило значительно сократить время разработки кроссплатформенного приложения без потери в качестве.

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

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

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

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

Границы между онлайн и офлайн мешают развитию вашего бизнеса? Свяжитесь с нами, вместе мы решим эту задачу.