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

106 lines
5.1 KiB
Org Mode

:PROPERTIES:
:ID: 2e51f7e7-cf37-45d3-b7c4-c136d4e3cc64
:mtime: 20220313180139
:ctime: 20220226100700
:END:
#+title: 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é.
#+DOWNLOADED: https://upload.wikimedia.org/wikipedia/commons/b/bd/Diagramme_Matrix_fr.svg @ 2022-02-26 10:29:56
#+ATTR_ORG: :width 400
[[file: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).
* [[https://gitlab.matrix.org/matrix-org/olm/blob/master/docs/megolm.md][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).
* [[https://fr.wikipedia.org/wiki/Confidentialit%C3%A9_persistante][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).
* Références
* [[https://fr.wikipedia.org/wiki/Matrix_(protocole)][Wikipedia]]
* [[https://www.youtube.com/watch?v=cD8xbci4wAY][Matrix - Open, Secure, Decentralised, Real-Time Communication Across Networks - Oleg Fiksel]]
* [[https://www.youtube.com/watch?v=9cjUzftDuoQ][Matrix in the French State What happens when a government adopts open source & open standards for all its internal communication? by Matthew Hodgson]]
* [[https://2021.commcon.xyz/talks/matrix-101][Matrix 101 - Thibault Martin]]