Блог о жизни и технологиях

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

/core.php, line 2
Error 2: A non-numeric value encountered

О протоколе Matrix и self-hosted мессенджерах

На протяжении всего этого лета я пользовался мессенджером Riot, чей сервер я установил себе на хост, как раз когда он вышел из беты и стал готов к использованию. В этой статье я хотел бы рассказать вам о протоколе [matrix] и его клиенте Riot, поделиться опытом использования и дать немного статистики. Также затрону тему self-hosted мессенджеров в целом и каково это держать свой сервер.

Что есть что?

[matrix] logo

[matrix] — это протокол обмена сообщениями. Помимо текстовых сообщений через него можно пересылать документы, картинки, звонить и т. д.

Сервер (homeserver) — удаленный хост, на котором установлено ПО, реализующее протокол Matrix, например, Synapse. Там хранятся ваши сообщения, их вложения и учетная запись. Matrix предлагает свой homeserver — matrix.org, который можно использовать для ознакомления. При желании можно найти другой сервер или создать свой. Имя пользователя будет выглядеть так: @login:server.com. Серверы могут связываться между собой, образуя тем самым федерацию, так что можно спокойно писать пользователю, который зарегистрирован на matrix.org, в то время как сами вы находитесь на matrix.iriscot.org!

Иллюстрация федерации
Иллюстрация федерации. Здесь в сети находятся три пользователя, каждый на своем сервере.

Клиент — программа на компьютере или телефоне конечного пользователя. Через нее устройство связывается с сервером, а пользователь пишет сообщения. Самый популярный клиент матрицы на данный момент — Riot, его мы и рассмотрим в этой статье.

Комната — место, где общаются пользователи. Иными словами, это чат. Может содержать от одного до бесконечности участников. Адреса комнат начинаются с символа #.

Группа (community) — тематическое объединение пользователей и комнат. Адрес начинается с символа +.

В чем профит?

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

Matrix решает эти проблемы: номер телефона при регистрации необязателен, можно вообще использовать только логин и пароль, а сервер у вас может быть собственный.

Выгодно отличают Matrix от других Open Source решений простота установки и обслуживания. Также доставляет синхронизация ключей в зашифрованных комнатах, то есть вы можете пересесть с одного устройства на другое и все равно будете видеть все сообщения. В прямом конкуренте Jabber такой фичи нет, по крайней мере на момент использования его мной.

Безопасность

Matrix использует алгоритмы Двойного Храповика Olm и Megolm, основанные на AES и SHA2. Эти шифры изначально были разработаны в Signal, а доработаны в Matrix, чтобы поддерживать шифрование сразу на тысячи устройств одновременно.

Имеется проверка подлинности устройств, которая предупреждает пользователя в случае появления в комнате новых непроверенных устройств.

Боты и IoT

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

Мосты

Самая вкусная фича — это мосты (bridges). С их помощью можно собрать в одном месте все свои чаты и общаться с пользователями разных мессенджеров. Собственно поэтому Matrix именно так и назван, ведь он объединяет много разных сервисов в одну матрицу.

Официально поддерживаются Slack, IRC, XMPP и Gitter. Сообществом разработаны мосты в Telegram, Discord, WhatsApp, Facebook, Hangouts, Signal, VK, SMS, Instagram и много других.

Более подробно смотрите здесь.

Клиент Riot.im

Если вы обычный пользователь, первое на что вы будете смотреть — это клиент. Вот так выглядит Riot.im:

на десктопе
на телефоне

Комната со скриншотов: #ru.matrix:matrix.org.

Возможности программы:

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

Markdown форматирование

Картинки можно отправлять из памяти устройства, камеры или буфера обмена. Единственное, что может встать на вашем пути — лимит на загрузку на сервере. Мобильный клиент Riot умеет сжимать картинки, что очень удобно.

Голосовые сообщения и аудио файлы. Голосовые сообщения доступны только на мобильном клиенте. По сути он просто запускает приложение диктофона и отправляет записанный файл. Также можно отправить любой аудио файл и он отобразится в виде плеера.

Видео. То же самое, что с аудио файлами.

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

Звонки. Аудио- и видео-звонки реализованы через WebRTC. В отсутствие TURN-сервера идут напрямую, что неизбежно взаимно палит IP-адрес собеседников, но здесь уже надо понимать разницу между анонимностью и приватностью.

Оконечное шифрование. Riot реализует поддержку алгоритмов Olm и Megolm, а также резервное копирование ключей.

Стикеры. Так, погодите радоваться. Реализованы они через сервер интеграции, и очень вероятно, что не будут работать, если у вас self-hosted сервер. На официальном сервере не проверял.

Виджеты. То же самое, что и со стикерами.

Говоря о перспективах развития Riot, уже сейчас разрабатывается RiotX — полная переработка Riot на Android с нормальным дизайном. Попробовать можно в Google Play.

О self-hosted чатах в целом

Установить чат на свой сервер будет определенно хорошим решением, если вас волнует вопрос приватности в Сети. Тем не менее, из этого вытекают несколько потенциальных проблем:

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

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

Статистика сервера

В течение двух месяцев я со своим ассистентом тестировали мой сервер каждый день, ни в чем себе не отказывая: были и картинки и голосовые сообщения, в общем полноценное общение. По прошествии указанного времени мой сервер стал весить 343 Мб, из которых 264 Мб составляют медиа-файлы. Проведя несложный расчет, станет ясно, что сервер с каждым днем отъедает в среднем 5.7 Мб, а значит через год будет весить примерно 2 гигабайта. Напомню, что это только для одного чата на двоих пользователей. Выводы оставляю на вас. Что касается остальных ресурсов, в первую очередь обращаем внимание на RAM, поскольку Synapse туда много чего кэширует.

В итоге

Я считаю, что Matrix станет хорошим средством для обеспечения конфиденциальности, в том числе для среднестатистического пользователя. Шифрование и возможность использования собственного сервера увеличивает безопасность вашего общения.

Если вы решили начать использовать матрицу, и не знаете, кому написать, пишите мне на @iriscot:matrix.iriscot.org :).