Введение
Недавно озадачился поиском подходящего месседжера для общения с ближним кругом друзей и близких, так как в стандартных решениях стало полно мошенников.
Сначала я думал развернуть свой сервер jabber в виде классической связки сoturn + prosody, но в поисках я наткнулся на более интресное решение, имя которому Delta chat.
Архитектура
Delta Chat - это децентрализованный и безопасный мессенджер, который работает поверх обычной электронной почты.
Архитектура Delta chat это совокупность:
- клиентские приложения под разные платформы
- chatmail сервара (можно использовать и обычный email сервер, но с ограничениями)
- приложения webxdc (HTML5, CSS, JavaScript), которые запускаются на клиенте
Также в delta chat есть возможность создания ботов (как в Telegram).
Клиентские приложения
Используется для создания профиля и подключения его к chatmail релеям, а так же запуска webxdc приложений.
Сервер chatmail
Состоит из 2-х дополняющих друг друга проектов:
Chatmail core
Это высокоуровневый интерфейс обмена сообщениями в чате и автоматически управляет одноранговыми сообщениями в режиме реального времени на основе DNS, TLS, HTTPS, SMTP, IMAP, MIME, OpenPGP и Iroh, а также включает протокол SecureJoin для защиты от активных атак (MITM-атак).
Данная библиотека используется приложениями Android / iOS / Desktop, биндингами к различным ЯП и ботами.
В 2023 был проведен анализ криптографии используемой в Delta Chat и все найденные проблемы были исправлены.
Реализация p2p
Для реализации p2p соединения используется библиотека iroh. Данный позволяет устанавливать прямые одноранговые QUIC соединения, когда это возможно, и при необходимости использовать серверы ретрансляции. Маршрутизация происходит по публичному ключу EndpointId (32 bit), к которой устанавлиается соединение, и в отличии от IP адреса этот ключ яввляется уникальным во всем мире.
Cоединение устанавливается с помощью сервера ретрансляции. При запуске одноранговые узлы регистрируют свой EndpointId на домашнем сервере ретрансляции. Сервер ретрансляции помогает преодолевать брандмауэры, NAT-серверы и другие подобные системы. Если прямое соединение установить не удается, оно передается через сервер.
Само соедиение шифруется на основе ассимитричных публичных ключей.
Chatmail relay
Chatmail relay - это совместимые почтовые транспортные агенты (MTAS), предназначенные для того, чтобы
- Не собирались личные данные или метаданные;
- Автоматического удаления сообщений;
- Использования низкого объем диска;
- Мгновенной рассылка сообщений в режиме реального времени;
- Потоковой передачи P2P в режиме реального времени;
- Отправки push-уведомления для Apple, Google и Huawei с сохранением конфиденциальности;
- Принимались только строгие TLS, DKIM и OpenPGP с минимальным количеством метаданных.
Можно использовать готовый релей или настроить свой, при этом все релеи взаимодействуют друг с другом.
Релеи - это дешевые и тупые серверы, которые не хранят данные о состоянии группы, вашем имени или аватаре (все это существует только на вашем устройстве), но они используются для временного хранения сообщений на случай, если ваше устройство отключено.
После того как клиент получил сообщение оно удаляется с релея.
Релеи взаимодейтвуют между собой через инфраструктуру почтовых серверов (для этого в составе есть Postfix) по средствам SMTP-relay.
Приложение webdc
Webxdc это файл специального формата, который включает в себя веб страницы HTML5, CSS, JavaScript и другие нужные ресурсы. Эти приложения запускаются внутри главного приложения клиента, которое отвечает за транспорт, аунтификацию и шифрование.
По сути клиент просто внутри себя запускает контейнер с приложением webxdc и ретранслирует сообщения об обновлениях приложений между пользователями клиентского приложения.
Каждое приложение webxdc является zip-архивом, расширение которого .xdc. Минимальный контейнер должен содержать только файл index.html.
Для того чтобы использовать приложение, достаточно отправить файл .xdc в чат.
Заключение
Технологии и решения используемые в Delta chat делают его одним из лучших средств для приватной коммуникации.
comments powered by Disqus