Прототип P2P-версии клиента Matrix поверх новой overlay-сети Pinecone

Материал из InnerEq.org
Перейти к навигации Перейти к поиску

Matrix Element Android P2P Pinecone.png

Эксперименты с децентрализацией продолжаются!

Ранее разработчики Matrix предложили бессерверный вариант веб-клиента Element с использованием библиотеки libp2p (использующуюся в IPFS). Параллельно с этим шло тестирование iOS-клиента Element поверх overlay-сети Yggdrasil. Изучив доступные инструменты, был привлечён Neil Alexander (разработчик Yggdrasil и Dendrite) для создания дизайна и разработки новой P2P overlay-сети, оптимизированной специально для Matrix — Pinecone (видеопрезентация для FOSDEM 2021).

Пользователям предлагаются для тестирования мобильные клиенты, работающие поверх Pinecone в условиях локальной mesh-сети и глобального Интернета.

>>> Прототип для Android (10+)

>>> Прототип для iOS

Для тестирования достаточно установить клиент на свой смартфон. После запуска программы вам будет доступна связь между клиентами с помощью локальной mesh-сети. Для подключения к глобальной Интернет-сети зайдите в настройки, раздел «Peer-to-Peer», и включите опцию «Connect to static peer». После этого вы можете зайти в тестовую комнату, предлагаемую самими разработчиками, по адресу #beachparty:3bf0258d23c60952639cc4c69c71d1508a7d43a0475d9000ff900a1848411ec7 или создать свою, оставив её адрес в комментариях! После входа в комнату должна загрузиться история предыдущих отправленных сообщений и картинок.

Matrix[править | править код]

Протокол Matrix построен на основе линейной истории событий (events) в формате JSON внутри ациклического графа событий (DAG): простыми словами, является распределённой базой данных, хранящей полную историю отправленных сообщений и данные участвующих пользователей, реплицируя эту информацию между участвующими серверами — ближайшей аналогичной по работе технологией может быть Git и блокчейн.

Основной реализацией этой сети является мессенджер с поддержкой сквозного шифрования и VoIP (аудио- и видеозвонков, групповых конференций). Эталонные реализации клиентов и серверов разрабатываются коммерческой компанией Element, сотрудники которой также возглавляют некоммерческую организацию Matrix.org Foundation, курирующую разработку спецификации протокола Matrix.

Dendrite — сервер сети Matrix нового поколения, основанный на микросервисной архитектуре, написанный на Go.

Yggdrasil — зашифрованная (с поддержкой TLS), одноранговая (P2P), IPv6, overlay-сеть, написанная на Go.

Pinecone[править | править код]

Дизайн Pinecone вдохновлён Yggdrasil и создан для решения проблемы создания маршрутов между пирами сети, используя source routing или virtual ring routing вместо greedy routing. Введение overlay-сети решает только часть проблем, сам протокол Matrix всё ещё остаётся full-mesh. В дальнейшем могут быть введены оптимизации, вроде механизма gossip или store-and-forward. Больше подробностей во всё той же видеопрезентации для FOSDEM 2021 от Neil Alexander.

В текущем виде на телефонах пользователей запускается полноценный Matrix-сервер на Go — Dendrite, встроенный прямо в клиенте Element и работающий в фоне. Всё ещё не предусмотрено никакого механизма для использования одного пользовательского идентификатора на нескольких устройствах, но это может измениться после принятия правки в протокол под номером MSC2787: Portable Identities. Она позволит отвязать идентификатор пользователя от конкретного сервера, используя вместо этого публичный ключ и привязку внешних идентификаторов к этому публичному ключу. Подразумевается, что после этого пользователь сможет привязать к своему публичному ключу произвольное количество человекочитаемых алиасов вида @username:domain.tld, настроив синхронизацию своего профиля с избранными публично доступными серверами. Пользователь сможет дать и забрать разрешение серверу отправлять сообщения от своего имени.

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

P2P и создание маршрутов не единственные нововведение, также стоит ожидать появление нового транспортного протокола вместо текущего JSON over HTTPS.

Обновление за 6 мая 2021[править | править код]

В блоге Matrix.org появилась официальная новость про Pinecone со ссылкой на исходный код.

Matrix Pinecone Architecture.png

В ней даётся пояснение про новый механизм поиска маршрута между пирами. Как и в Yggdrasil, в Pinecone используется global spanning tree, но вместо того, чтобы пересылать весь трафик с использованием этой топологии, она используется в качестве механизма начальной маршрутизации для линейной/змеевидной топологии с использованием ed25519-ключей под названием SNEK (Sequentially Networked Edwards Key).

Пиры ищут своих ближайших соседей в сети и строят пути между ними аналогично тому, как работает Chord DHT. Эти пути затем используются для пересылки трафика без предварительного поиска, что позволяет очень быстро устанавливать и стабильно держать устойчивое к изменениям соединение между пирами. Также проводились эксперименты с комбинацией микротранспортного протокола (μTP) и TLS, чтобы обеспечить установку соединения с отслеживанием состояния, контролем перегрузки (TCP congestion control) и сквозным шифрованием для всего федеративного трафика.

Matrix Pinecone SNEK.png

В случае успешной разработки и внедрения Pinecone, разработчики Matrix думают о внедрении этого протокола в библиотеку libp2p от разработчиков проекта IPFS.


И даны ответы на часто задаваемые вопросы.

Могу ли я запустить Pinecone на своей платформе?
Реализация написана на языке Go и протестирована на macOS, Linux, Windows, Android и iOS. Скорее всего, нет никаких причин считать, что проект не заработает на других поддерживаемых компилятором платформах.
Почему не Yggdrasil?
Pinecone был разработан после тестирования прототипа с использованием Yggdrasil и учёта его недостатков. Топология global spanning tree, используемая в Yggdrasil, не подходит для работы в условиях частоизменяемой сети. Такой способ соединения пиров может привести к тому, что пути между ними станут временно недействительными, что приведёт к прерыванию связи.
Почему не libp2p?
libp2p хорошо работает в условиях, где пиры соединяются друг с другом напрямую (либо через локальную сеть, либо через Интернет), что не всегда справедливо для Matrix в условиях P2P. Компоненты, которые могут быть полезны для решения этой проблемы (например, «пробивание» NAT и оверлейная маршрутизация), всё еще находятся на ранней стадии разработки.
Анонимен ли Pinecone?
Нет, Pinecone не ставит своей основной задачей обеспечение анонимности. Пакеты Pinecone маршрутизируются с использованием наиболее прямых возможных путей (в отличие от Tor и друзей, которые намеренно передают трафик в несколько шагов). Пакеты Pinecone содержат информацию в своих заголовках об отправителе и получателе — вероятно, мы сможем когда-нибудь скрыть часть этой информации, но не сегодня.
Что такое «static peer»?
Пиры в сети Pinecone могут автоматически обнаруживать друг друга в зависимости от платформы (например, клиенты Android и iOS могут обнаруживать друг друга с помощью Bluetooth без какой-либо дополнительной настройки). Однако пиры могут физически находиться отдалённо друг от друга и вне одной локальной сети, поэтому вместо этого вы можете присоединиться к более широкой сети Pinecone, подключившись к статическому одноранговому пиру через Интернет. Тем самым трафик будет маршрутизироваться через одноранговое соединение.
Могу ли я запустить свой «static peer»?
Конечно, просто запустите бинарный файл cmd/pinecone с аргументом командной строки -listen. Вероятно, вы также захотите указать флаг -connect для подключения к уже существующему одноранговому пиру.
«Пробивает» ли Pinecone фаервол и NAT?
Да. Pinecone выглядит как обычное TCP- или WebSocket-соединение. Если вы установите соединение со статическим пиром, вы всё равно сможете получать входящий трафик Pinecone через это соединение.