Необходимо было создать SaaS-чат – самый безопасный мессенджер для обмена сообщениями на базе платформы клиента с возможностью предоставления платного доступа по подписке для других платформ. Мы отвечали за прототипирование и дизайн пользовательского приложения, которое разработано на React Native, чтобы охватить пользователей и iOS, и Android, но не растягивать процесс создания на долгий срок.
Plasma Messenger
Это SaaS-продукт для обмена приватными сообщениями между пользователями различных платформ.
Кто делал?
Команда Веб Секрет в лице Никиты Толкачева и Маши Сидоревич, которые являются специалистами в области криптографии и мобильной разработки.
Толкачев
Сидоревич
«По факту нам предстояло создать второй 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 процессов.
Кому будет интересно?
Компаниям, которые хотят обеспечить безопасный канал общения между сотрудниками с возможностью синхронизировать переписки между несколькими устройствами пользователя, передачей медиафайлов и отсутствием необходимости хранить что-то у себя на серверах.
Границы между онлайн и офлайн мешают развитию вашего бизнеса? Свяжитесь с нами, вместе мы решим эту задачу.