Matrix – пример хорошего децентрализованного месенджера

Matrix – лишь одна технология из многих, децентрализованных решений.

Система централизована тогда, когда данные пользователей обрабатываются только одной компанией. Например, сообщения «Вконтакте» хранятся только внутри «Вконтакте», «Телеграма» – только внутри «Телеграма» и так далее. Это и есть централизация.

Централизованные системы отказывают в обслуживании пользователям по всему миру. Компании хотят спокойно торговать нашими данными [1][2], а мы им в этом не помогаем. Мы то обсуждаем не то, что надо. То, наоборот, не осуждаем то, что осуждать приказывают. И всё пытаемся убедить окружающих в своей правоте.

Можно долго ругаться с администрацией условного «Твиттера» в поиске правды, но есть эффективный способ установить справедливость: дать возможность пользователям самостоятельно определять границы хорошего и плохого. Разрешить каждому пользователю стать администрацией своего Твиттера.

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

Это называется Федерацией. Пользователи Федерации с разных серверов могут беспрепятственно общаться.

На самом деле, это называется Федиверсумом (Fediverse)Федерация – это соглашение о совместимости разных протоколов внутри себя, Федиверсум – частный случай Федерации.
Но слово “Федиверсум” – это издевательство над русским языком, поэтому
далее будет использоваться более привычный, хотя и менее точный термин “Федерация”.

Преимущества

Удобнее

Федерация создана так, чтобы пользователи не ощущали границ

Федерация создана так, чтобы пользователи не ощущали границ. Представьте, что вы можете общаться в своём любимом мессенджере, не зная, откуда вам отвечает собеседник – из «Телеграма», с электронной почты, из комментариев на YouTube, VK или из другой Федерации. Вам не придётся хранить на телефоне десяток мессенджеров, помнить пароли от дюжин аккаунтов.

Вы не обязаны агитировать всех своих знакомых переходить в Федерацию вслед за вами. Федерация может прокладывать мосты к другим системам для бесшовного общения. Конечно, чтобы оно красиво работало, вам надо будет вложить свой труд: где-то больше, где-то меньше. В Mastodon есть почти родная интеграция с Twitter, а Matrix позволяет связать между собой около тридцати соцсетей.

Свободнее

Пользователь может свободно выбирать сервера, правила которых его устроят – или создавать свои. Админ сервера – козёл? Да и чёрт с ним, переходите на другой сервер и общайтесь с теми же людьми, с кем общались и ранее. Все козлы? Создайте свой сервер – это требует минимальных знаний системного администрирования и крайне скудного финансирования.

Иногда безопаснее

В Федерации считается дурным тоном требовать от пользователя номер телефона или почту, равно как и собирать приватные данные вроде IP-адреса или отпечатка браузера. Администрация вашего сервера обычно знает о вас только то, что вы сами ей сообщили.

Некоторые ресурсы Федерации настроены на использование сквозного шифрования (E2EE). Администрация сервера не имеет доступа к E2EE-переписке пользователей, и это повышает безопасность общения. «Телеграм» подвергался блокировкам в России именно за применение E2EE.

Федерация – это не магия, которая делает «безопасно». Это инструмент, безопасность общения в котором зависит от навыков пользователей.

Недостатки

Молодость

Федерации несколько лет от роду. С некоторыми ограничениями приходится мириться. Например, количество просмотров рассчитывается иногда приблизительно. Не полностью развиты интеграции со сторонними системами.

Человеческий фактор

Ваш сервер администрируется просто человеком. Лишь его добрая воля поддерживает порядок. Если крупные компании связаны – хотя бы формально – договором (во что в 2022 году верится всё меньше), то администрация сервера Федерации вам вообще ничего не должна. Не нравится администрация – создавайте свой сервер, вот и весь разговор.

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

Новые подходы

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

Что такое Matrix

Matrix – одна из децентрализованных федеративных систем общения. Способ передачи сообщений в Matrix лежит на https://matrix.org/. В чём-то она похожа на git. Сообщение – коммит, отправка – пуш и так далее.

В обычной речи “Matrix” – термин многозначный. Под ним могут подразумевать:

  1. Сеть: сервера и связи между ними.
  2. Протокол: способ передавать сообщения через сервера, хотя протокол называется по-другому.
  3. Мосты: способ забирать сообщения из одной чужой системы (например, из «Телеграма») и помещать их в другую чужую систему (например, VK).
  4. Общение: мессенджера Matrix нет. Под «общаться в Matrix» имеется в виду «общаться через Matrix с помощью любого подходящего мессенджера».

Далее предполагается, что канал общения в Matrix переключен в режим полного шифрования (Е2ЕЕ), в режим приватного доступа, не индексируется поисковиками, не публикуется автоматом в чужие системы, словом, лично вы сделали всё со своей стороны, чтобы общение было защищённым.

С чего начать

Начать стоит с выбора клиента. С относительно полным списком можно ознакомиться на https://matrix.org/clients/.

Веб

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

Относительно полный список серверов лежит на http://joinmatrix.org/servers.

Для первого знакомства вам подойдёт веб-версия одного из крупнейших серверов: https://app.element.io.

Element (Riot)

На все основные платформы выпущен Element (бывший Riot). Если не знаете, что выбрать, а веб-интерфейс вас не устраивает, берите Element.

Регистрация аккаунта

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

При регистрации в Matrix надо заполнить три поля:

  1. Логин.
  2. Пароль Сейчас считается, что безопасный пароль – это предложение на вашем родном языке длиннее 20-25 символов. При такой длине включать в него знаки препинания или цифры необязательно (но допустимо).
  3. Сервер По умолчанию вы регистрируетесь на сервере matrix.org. Этот сервер подключен к Федерации. Любой другой сервер в Федерации будет использовать ваш аккаунт как родной. Если сервер, на котором вы зарегистрировались, будет выключен, вы потеряете доступ к своему аккаунту. Но есть сервера, отключённые от Федерации. На таких серверах регистрироваться надо отдельно. Обычно это делается для большей безопасности: чтобы на сервере не было посторонних.

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

После регистрации сразу же перейдите в «Настройки» -> «Безопасность»-> Secure Backup your encryption keys -> сохраните бэкап в безопасном месте. Об этом будет подробнее будет рассказано в разделе «Офлайн и дизлогин» ниже, а пока просто сделайте бэкап.

Особенности

Федеративность аккаунта

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

В следующем примере адреса серверов выдуманы для упрощения.

Предположим, вы создаёте аккаунт @user:matrix.vk.ru на matrix.vk.ru через веб-интерфейс element.vk.ru. Пока что это не будет отличаться от привычного подхода. Но тут вы решаете завести аккаунт на matrix.telegram.org.

Оба сервера – matrix.vk.ru и matrix.telegram.org – находятся внутри одной Федерации. Поэтому вы можете зайти наmatrix.telegram.orgчерезelement.telegram.org, введя логин и пароль от аккаунта @user:matrix.vk.ru.

Такой подход чем-то схож с OAuth: вы регистрируетесь на google.com, а потом заходите везде под своим гугл-аккаунтом.

Проверить, подключён ли конкретный сервер к общей Федерации можно на сайте https://federationtester.matrix.org/.

Доступ к аккаунту

Доступ к аккаунту происходит по логину и паролю. Так как вы стараетесь быть хорошим человеком, вы не указываете при регистрации ни почты, ни телефона, ни ещё какого-либо способа связаться с вами. Если вы забудете логин или пароль, вы потеряете аккаунт навсегда.

Использование ключей

Большая статья про использование ключей в matrix.

  1. Ключами подписываются все сообщения. Прочитать подписанное сообщение может только отправитель и получатель.
  2. Получатель может быть уверен в том, что подписанное сообщение отправил именно отправитель.
  3. Ключи хранятся только на клиенте (в ~/.config/Element%profileName%). Утрата ключа приводит к утрате доступа к содержимому сообщений.
  4. Ключ можно восстановить для клиента из заранее созданного бэкапа.
  5. Для обмена ключами клиенты должны быть залогинены (можно быть офлайн). Обменяться ключами с незалогиненным клиентом нельзя. Обменяться ключами заранее нельзя.
  6. Ключи обладают свойством правдоподобности отрицания. Если вы свой ключ удалили, то невозможно доказать ваше участие в переписке, анализируя подписи сообщений.
  7. Ключи, использованные на аккаунте, могут делиться между клиентами этого аккаунта.
  8. Ключами шифруется содержимое сообщения, но не его метаданные. Метаданные хранятся в открытом виде: реакции, отправитель, получатель, время отправки и так далее. Точный список меняется со временем, например, в этом пулл реквесте приводится пример удаления избыточных метаданных.
  9. Ключи пересоздаются в нескольких случаях:
    • спустя некое количество сообщений;
    • при дизлогине одного из участников беседы.
    • в других случаях

Клиенты, находящиеся онлайн, получат новые ключи. Залогиненные клиенты, находящиеся офлайн, получат новые ключи. Незалогиненные клиенты не получат новые ключи.

Предположим, вы переписываетесь с настольного компьютера. На вашем компьютере лежит ключ, которым подписано каждое сообщение. Если вы зайдёте на свой аккаунт с другого клиента – например, с планшета – вы увидите факт переписки, но сообщения прочитать не сможете, так как на планшете отсутствует ключ, которым были подписаны сообщения. Вы можете восстановить ключи тремя путями:

  1. Запросить ключи с другого клиента (клиент должен быть залогинен и онлайн).
  2. Восстановить ключи из бэкапа с помощью заранее настроенного Secure backup. Ключи, защищённые паролем, в этом бэкапе хранятся на сервере. Они обновляются время от времени.
  3. Восстановить ключи из бэкапа с помощью заранее созданного E2E room keys. Ключи, защищённые паролем, в этом бэкапе отдаются вам в виде файла. Они не обновляются, поэтому рано или поздно из-за ротации ключей потеряют свою актуальность.

Чуть подробнее

Офлайн и дизлогин

Офлайн и дизлогин – очень разные вещи.

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

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

Дизлогин произойдет:

  • при нажатии кнопки “log out”;
  • при закрытии инкогнито браузера;
  • при очищении данных браузера, например, CCleaner’ом;
  • на мобильных браузерах – автоматически, если системе не хватит памяти; поэтому клиент для мобилок важен.

Неудобство дизлогина – известная проблема, и её решение разрабатывается. Предлагается каждому клиенту на сервере держать свою “копию”, которая в случае отсутствия других залогиненных клиентов будет получать ключи для расшифровки сообщений. Войдя в систему, клиент сможет скачать эти ключи для расшифровки новых сообщений.

Ключи для клиента так же важны, как и вода для жизни, поэтому:

  • «дегидрированием» (dehydration) называется процесс загрузки ключей из клиента на сервер;
  • «перегидрированием» (rehydration) называется процесс загрузки ключей с сервера на клиент.

ДИЗЛОГИН РАЗРУШИТЕЛЕН! Думайте о нём как об удалении аккаунта с текущего устройства, а так как аккаунт и существует только на устройствах, то думайте о нём как об удалении аккаунта вообще. Это крайне непривычно первое время, но клиенты Matrix при дизлогине обязаны удалить ключи, тем самым уничтожая доступ к переписке. Дизлогин эквивалентен удалению каталога ~/.config/Element%profileName%

Без ключей получить доступ к переписке невозможно. Поэтому первым же делом сохраните свои ключи так, как это сказано в разделе «Регистрация аккаунта». Следите за тем, когда ваш клиент создаёт новые ключи, настройте Secure backup. О том, где хранится ваша резервная копия, должны знать только вы.

Когда вы захотите войти обратно в свой аккаунт, вам надо будет ввести логин и пароль. Если они введены верно, доступ к аккаунту будет разрешён. Вместо старых сообщений останутся надписи «Не удалось расшифровать». Если вы восстановите ключи шифрования из резервной копии, сообщения будут расшифрованы.

Общение

Поиск

Каждый аккаунт однозначно определяется логином и сервером, например,@alice:matrix.org. Комната определяется её именем и сервером, например,#room:matrix.org.

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

Личные сообщения

Личных сообщений в Matrix нет. Вместо этого Matrix создаёт приватную комнату и добавляет в неё только двух человек – вас и собеседника. Поэтому всё, что верно для комнаты, верно и для личных сообщений.

Удаление сообщений

При удалении сообщения его текст также удаляется у собеседника.

Комната

См. визуализацию “How does it work”

Поначалу вам покажется, что комнаты аналогичны каналам в Discord или чату в Skype. В чём-то это так, но есть отличия: – канал в Discord и чат в Skype принадлежат одному серверу; – в Matrix комната обслуживается несколькими серверами. Если в комнате находятся @alice:happy.ru@bob:happy.ru и @eva:evil.corp, то доступ в комнату имеют два сервера.

Так реализуется та самая федеративность: именно в комнатах встречаются люди с разных серверов.

Комнаты могут быть публичными: в них может заходить кто угодно. Комнаты могут быть приватными: для доступа к ним нужно личное приглашение.

Комнаты могут быть как Е2ЕЕ, так и обычные. Всегда используйте Е2ЕЕ, если нет веских оснований делать иначе.

Важно: прежде чем общаться в новой комнате, проверьте, стоит ли в ней Е2ЕЕ. Так как федеративность реализуется на уровне комнат, любой сервер, имеющий доступ к комнате, получает полную копию всех данных. Если ваше общение в приватной комнате не Е2ЕЕ, то любой новый участник (даже без злого умысла) опубликует на своём сервере содержимое вашей комнаты, как только будет в неё добавлен. Поэтому лучше всего закрывать доступ к истории для новых участников. Механизм аналогичен git.

Верификация

Нигде нет никакого способа надёжно защититься от физического доступа. Верифицируется железо и данные, но не руки. Люди – самое слабое звено.

В Matrix существует механизм верификации клиента (не аккаунта).

Механизм Е2ЕЕ в Matrix можно грубо сравнить с доступом по SSH. Вы генерируете двойной ключ, публичную часть отправляете собеседнику, приватную часть храните у себя. Доступ к аккаунту можно получить, только введя пароль. В такой схеме есть известная проблема: кража пароля и приватного ключа предоставляет полный доступ к данным.

Чтобы решить эту проблему в SSH, на сервер прописываются IP-адреса потенциальных клиентов. Пароль и ключ будут приняты только от этих IP.

В Matrix реализован похожий механизм верификации:

  1. Верифицируются всегда клиенты (устройства). Уже не IP, но и не аккаунты.
  2. Верификация происходит между двумя клиентами. Не между клиентом и сервером, не между клиентом и множеством клиентов.
  3. Верификация нужна лишь единожды.
  4. Если вы входите с нового устройства, другие пользователи будут видеть две ваших сессии: одну верифицированную, другую – нет.
  5. Для удобства можно верифицировать новую сессию из своей старой сессии.
  6. Клиент находится в одном из трёх статусов:
    • ни одной верификации не было проведено (чёрный щит)
    • клиент был верифицирован и использует тот же клиент (зелёный щит)
    • клиент был верифицирован и использует другой клиент (красный щит)

Верификация:

Алгоритм верификации таков:

  1. Вы заходите в свой аккаунт.
  2. Собеседник заходит в свой аккаунт.
  3. Вы устанавливаете канал обмена информацией вне Matrix: личная встреча, звонок, другой мессенджер.
  4. Вы открываете профиль собеседника и нажимаете кнопку «верифицировать».
  5. Вы с собеседником получаете смайлики для сравнения или qr коды. Сравните их, используя вышеуказанные каналы для связи.
  6. Если всё совпадает, подтверждайте верификацию.

Теперь верификация с собеседником закончена, ваши статусы друг для друга изменятся на «верифицировано». Это означает, что сообщения от собеседника отправлены именно с того устройства, с которым вы верифицировались.

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

  1. Собеседник заходит в свой аккаунт с другого устройства
  2. Вы увидите, что статус собеседника сменился на «не верифицировано». Значит, вы не можете быть уверены, что сообщение было отправлено с того же устройства, что и предыдущие.

Пока что не существует способа верифицировать всех участников комнаты/сервера, а не тыкать лично каждого.

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

Следует ли верифицировать свой аккаунт с кем попало? Скорее всего, нет. Вы должны быть уверены, что человек и его клиент – это именно тот человек, о котором вы думаете, и именно его клиент.

Когда заниматься верификацией? В спокойное время, когда вы никому не интересны.

Общий вывод по Matrix

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

Интересные ссылки:

OUTERHEAVEN

Наш канал в [matrix] доступен по адресу: https://matrix.to/#/#outervpnheaven:matrix.org