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