: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]]