Files
org-roamings/20220226100700-matrix.org
2022-06-04 12:57:39 +02:00

5.1 KiB

matrix

Introduction

  • Protocole de communication ouvert (specs ouvertes) pour la communication en temps réel (messagerie).
  • Passerelle avec différents fournisseurs de services (xmpp, Skype, IRC, …).
  • Sécurisé (chiffrement de bout en bout activé par défaut).
  • Décentralisé (possibilité d'héberger son propre serveur).
  • Distribué/fédéré: chaque participant conserve l'historique de ses conversations (réplication entre les différents serveurs).
  • Appels voix & vidéo basés sur WebRTC.
  • Contrairement à XMPP (envoi de messages), Matrix fonctionne comme git : synchronisation de serveurs (conversation complète).
  • Matrix is transport agnostic: JSON/HTTP pourrait être remplacé.

Introduction/Diagramme_Matrix_fr_2022-02-26_10-29-56.svg

  • Long-term secret = private key.

Les serveurs Home

API

  • Synchro des messages et de l'état des rooms entre serveurs, en temps réel.
  • Synchro de l'historique des messages sur d'autres serveurs (à la git pull) : en cas d'offline, le serveur peut récupérer les historiques auprès d'autres serveurs afin de combler le trou.
  • Récupérer le profil et la présence d'un utilisateur.

Implémentations

  • Synapse (implémentation de référence) en Python/twisted.
  • Dendrite (implémentation de 2nd génération - plus scalable/performant) en Go.
  • Conduit (simple/rapide/reliable) en Rust.
  • Construct (orienté performances avec un min de deps) en C++.

Les serveurs d'application

API

  • Possède un accès privilégié à un serveur Home.
  • Peut souscrire au trafic d'un server.
  • Peut mascarade comme un utilisateur virtuel.

Serveurs d'intégration

  • Permet d'intégrer de nouveaux services.

Exemples

  • Etherpad:
  • RSS bot:
  • Grafana: publication de dashboards grafana pour un affichage directement sur les clients.
  • Jitsi:
  • Matrix-content-scanner:

Les bridges

  • Unifier différents réseaux ensemble (ie: signal, IRC, …).

Types de bridges

  • Bridgebot:
  • Puppeted: L'usage du bridge est transparent pour les utilisateurs.

Les clients

API client-server

  • Conçue pour être user-friendly.

Implémentations UI

  • Element (implémentation de référence avec le plus de features) pour WebApp/desktop(electron)/IOS/Android.
  • Ditto (réalisé avec React) pour IOS/Android.
  • Nio (réalisé avec Switch) pour IOS.
  • Pattle (réalisé avec flutter) pour IOS/Android.
  • FluttyChat.
  • Seaglass: client matrix pour IOS.
  • Spectral: client matrix desktop écrit en c++ avec QtQuick control.
  • Quaternion: client IM desktop écrit en c++ avec Qt5.
  • Nheko reborn: client matrix desktop écrit en c++17 avec Qt.
  • Mirage: client matrix desktop configurable et opérable avec le clavier (à la Emacs).
  • Fractal: client matrix desktop écrit en rust.

Implémentations console

  • weechat-matrix:
  • gomuks: client matrix pour terminal écrit en go.
  • matrixcli: client matrix en ligne de commande.
  • matrix-commander: client matrix cli simple supportant le chiffrement E2E et la vérif. emoji.
  • tchap: client développé par le gouvernement français (inclus l'intégration du matrix-content-server).

Les espaces (TODO)

  • Public space: l'annuaire hiérarchisé et public de Matrix.org.
  • Restricted space: pour les organisations, permet de regrouper des rooms dans un même domaine.
  • private space: pour un usage personnel

P2P (TODO)

OSS

Matrix utilise les OSS suivants:

  • olm: Librairie implémentant un double-ratchet (basé sur les specs de Signal).
  • megolm: Librairie réalisant un ratchet crypto basé sur AES pour les communications de groupe.

Inconvénients

  • Backward secrecy (future secrecy ou post-compromise security, le vol de la clé privée d'un correspondant ne compromet pas la confidentialité des communications futures) faible (tant que la session n'est pas renouvellée).
  • Confidentialité persistante (forward secrecy ou perfect forward secrecy, le vol de la clé privée d'un correspondant ne compromet pas la confidentialité des communications passées) faible (dépend de la fréquence de renouvellement des clés).

Optimisations réalisées

  • Lazy loading members: Ne charger les métadonnées que des personnes communiquant dans la room (réduction de la RAM consommée).