О Matrix
Содержание
Дисклеймер
Текст ниже написан дилетантом и может содержать ошибки.
Matrix
Matrix - это протокол. То есть инструкция, как обмениваться сообщениями. Есть реализации этого протокола:
Клиентская часть (например,
Element). Клиента реализовать легко, поэтому их много.Серверная часть (например,
Synapse). Серверную часть реализовать сложно, поэтому, реализаций серверов мало.
Список некоторых реализаций клиентов и серверов можно посмотреть тут.
Быстрые ответы на вопросы о Matirx можно найти тут.
Открытый код
Протокол Matrix прозрачен, описан и доступен любому желающему. А почти все реализованные клиенты и сервера имеют открытый код. То есть можно быть уверенным в том, что именно делает сервер во время работы Matrix. Также важно отметить, что Matrix под лицензией Apache Licence v2.
Организация сообщений
В матрице можно писать (или отправлять файлы, картинки, аудио или аудиосообщения) пользователям напрямую в лс или звонить (говорить голосом). Доступен и видеозвонок. Можно создавать и модерировать комнаты (room), где могут писать сразу много пользователей. Также можно сделать так, чтобы сообщения комнаты можно было читать всем по ссылке в браузере без регистрации.
В Element доступен групповой звонок.
Также можно организовать пространство (space). В пространстве можно создавать комнаты и добавлять пользователей (переписки с ними). Необязательно для этого создавать новую комнату, можно добавлять уже существующие. Также в Element в пространство можно добавлять другие пространства.
Боты
Ботов делать легко и их много. Есть разные, нужно лишь выбрать нужного или написать своего.
Распределённая архитектура и федерация
В Matrix нет единого сервера. Сервера имеют распределённую архитектуру. То есть серверов много и они все связаны между собой. Связанные сервера между собой называются федерацией. Любой сервер может вступить в федерацию Matrix.
Каждый пользователь привязан к определённому серверу. Он выбирается при регистрации. Все его переписки будут храниться в зашифрованном виде на выбранном сервере. Причём сервер никак не может прочитать содержимое таких переписок, прочитать могут только участники переписки. Также организовать свой сервер Matrix не сверх сложно. Можно для этого приспособить не самый мощный компьютер, тем самым заимев свой личный сервер Matrix, который можно легко присоединить к федерации. Такой сервер называется homeserver. Также помимо привязки пользователей к серверу привязываются и комнаты.
Переписки синхронизируются между серверами (в одной федерации) автоматически. То есть, если есть комната room_1 на homeserver_1 и в неё заходит пользователь из homeserver_2, то homeserver_2 автоматически получит зашифрованную (если было включено шифрование) переписку из room_1 на homeserver_1. И пользователь из homeserver_2 даже не почувствует, что он в комнате другого хомсервера. Этот пользователь может спокойно писать сообщения, а homeserver_2 сам их синхронизирует с homeserver_1. Это и называется по сути федерацией.
Также можно запрещать заходить в комнаты пользователям из другого хомсервера. Ещё можно включить регистрацию на вашем хомсервере только по секретной фразе. Только те, кто её знают, смогут зарегистрироваться.
Групповые комнаты
В Matrix можно создавать комнаты, где могут одновременно писать/читать много пользователей. В Element видно какой пользователь до какого места дочитал.
Также возможна модерация и настройка комнат. Настройка прав пользователей. Можно разрешить/запретить доступ к истории после входа в комнату.
Уведомления
Для уведомлений (на телефон или почту) можно использовать свой собственный сервер уведомлений.
Мосты
Предположим, есть куча “мессенджеров” (вк, телеграмм, ватсапп, skype и прочее всякое) или электронная почта. Тогда нужно устанавливать куча клиентов (приложений), чтобы этим пользоваться. А память того же телефона не резиновая. В Matrix есть такое понятие, как мосты, они позволяют соединить все эти “мессенджеры” через матрицу…
То есть условный пользователь пишет вам в чате, например, телеграмма. Вы видите это сообщение в матрице и отвечаете в матрице, а ему показывается это сообщение так, как будто вы ответили ему в телеграмме. Работает и с групповыми чатами.
Статья про опыт использования мостов в Telegram и Discord.
Кроссплатформенность
Зависит от клиента, но, например, Element доступен на всех платформах: GNU/Linux, Android, Windows, Mac…
Есть статья с обзором Element.
Также Matrix можно пользоваться из браузера. Необязательно устанавливать какие-либо клиенты на устройство.
Регистрация
Для регистрации в матрице не нужно чего-либо, кроме логина и пароля. Потеря пароля означает потерю аккаунта. Но некоторые сервера федерации Matrix позволяют привязывать почту, номер телефона, делать двухфакторную аутентификацию и т. п. Тогда будет возможность восстановить аккаунт в случае потери пароля. Но это опционально и нужно явным образом это всё включать в настройках аккаунта. Также некоторые хомсерверы поддерживают авторизацию (регистрацию) через сторонние сервисы: гугл, гитхаб и т. п.
На самом деле хомсервер способен восстановить аккаунт в случае потери пароля, но тогда все переписки будет расшифровать невозможно, а владельцу и пользователям по переписке будет извещено, что с вашим аккаунтом что-то не так, он (аккаунт) будет помечен как неверифицированный (красный) для них.
Также на хомсерверах можно включить регистрацию только тем, кто знает секретную фразу. Или же можно регистрацию отключить вовсе, и тогда регистрировать каждого пользователя будет администратор хомсервера вручную.
Аутентификация
В Matrix продуманная система аутентификации. Предположим 2 вполне реальные ситуации.
В первой ситуации User уже авторизирован на клиенте с компьютера. Теперь User зашёл и, например, с телефона. Тогда в любой верифицированной сессии User покажется уведомление с просьбой подтвердить аутентификацию. Нужно пройти некоторые челленджи, и после этого сессия с телефона будет верифицированной. Она сможет расшифровать старые переписки и отсылать сообщения контактам без каких либо проблем.
Во второй ситуации User1 общается с User2. Но User2 сделал себе пароль “ilovesleep” и его, конечно, взломали. Теперь User2 для User1 выглядит как 2 разные сессии: верифицированная (зелёная) и ещё какая-то (красная). В случае, если красная сессия напишет User1 сообщение, то:
User1увидит, что написала ему неверифицированния (красная) сессия. В настройках такие сессии можно блокировать автоматически.Красная сессия
User2будет красной до тех пор, покаUser2не верифицирует её (как в первом случае) или покаUser1сам не нажмёт кнопку верифицировать красную сессиюUser2.Красная сессия
User2не сможет расшифровать старые переписки до тех пор, пока она не станет зелёной (математика не позволит).
На самом деле верифицировать сессию необязательно с другого верифицированного аккаунта. Можно это делать и с помощью фразы восстановления аккаунта. С помощью этой фразы можно получить ключи шифрования и ключи аутентификации, тем самым сделать сессию зелёной сразу. Такая фраза восстановления выдаётся при регистрации или при сбросе аккаунта.
Сброс аккаунта - это процесс обновления ключей шифрования и ключей авторизации (это очень неточное определение). В этом случае доступ к старым перепискам будет невозможен, а аккаунт станет красным.
Сбросить аккаунт может и красная сессия, тогда все зелёные сессии станут красными. В этом случае восстановление аккаунта дело трудоёмкое, но возможное.
Если доступ к аккаунту утерян, то восстановление аккаунта возможно на хомсервере. Так как хомсервер не имеет возможности получить ваши ключи, то восстановленная сессия будет красной. Доступ к старым перепискам будет невозможен. Зелёной её сделать может только сам владелец аккаунта, если у него есть фраза восстановления или доступ к зелёной сессии.
Портативно
Element сохраняет также ваши зашифрованные переписки и локально (оффлайн) на устройстве, причём только в одной папке.
Но важно ещё раз отметить, что переписки в зашифрованном виде лежат в homeserver.
В Element можно использовать сразу несколько аккаунтов, у каждого будет своя отдельная папка, которую можно носить с собой.
Шифрование
В Matrix для генерации и подписи ключей используются эллиптическая кривая 25519, ECDH, HKDF-SHA-256 и AES-256. Каждый device имеет Ed25519 fingerprint key pair, с помощью которых можно идентифицировать этот device. Для обмена общим секретом (например, ключом) используется Curve25519 (только одна инициализация только для одного обмена). Ключи для шифрования алгоритмом AES-256 получаются с помощью HKDF-SHA-256. Сам обмен ключами происходит протоколом Диффи-Хеллмана-Меркла на эллиптических кривых (ECDH). Подробнее тут.
Для Matrix была разработана имплементация алгоритма двойного храповника. Называется olm.
Благодаря olm, если ваш аккаунт был скомпрометирован, то злоумышленник сможет прочитать лишь часть сообщений (или одно в зависимости от настроек). Не получится ему прочитать самые первые переписки или последующие. Блок сообщений шифруется разными ключами, которые обновляются и получаются с помощью алгоритма двойного храповника. Ключи могут меняться после захода/выхода в/из комнаты, после истечения определённого времени или после использования ключа N раз. Но проблема заключается в том, что алгоритм подразумевает, что сообщения передаются только между двумя лицами. В групповых чатах использовать olm проблематично.
Поэтому olm был “модифицирован” в megolm. Megolm как раз решает проблему передачи сообщений в групповых чатах. Поэтому в Matrix используется именно megolm. Даже в “одиночных чатах”, так как эти “чаты” могут быть расширены до комнаты. Нужно отметить, что никакое шифрование не спасёт, если в комнате много людей, тем более если комната общедоступная. Поэтому в общедоступных комнатах нужно несколько раз подумать, прежде чем включать шифрование, так как это скажется на производительности.
Передача сообщений, их хранение на сервере, обмен ключами подразумевает, что homeserver относится к разряду untrusted. То есть думается, что сервер (как и все остальные) пытается всяким образом “взломать” ваши переписки. Отсюда такие сложности. Но пользователь используя Matrix даже не заметит их (ну почти), но знать об этом надо.
Аудиозвонки происходят через WebRTC, а через Matrix отсылается лишь событие и служебная информация об организации такого звонка.
Заключение
Приятно, когда вашими личными переписками не надо делиться с третьими лицами, которые никакого отношения не имеют к вашим личным сообщениям.
The220th
15 Марта, 2023 г.