Snikket pour décentraliser les messageries ?

Aujourd'hui il est toujours compliqué de conseiller une messagerie instantanée libre et sécurisée à ses proches. Chaque messagerie a ses avantages et inconvénients. Concernant les messageries décentralisées, on constate souvent une simili-centralisation autour de quelques serveurs plutôt qu'une véritable décentralisation du réseau. Il n'est pas facile d'installer son propre serveur. Par exemple dans le cas des utilisateurs de l'email qui est une messagerie décentralisée, même si elle n'est pas instantanée, la plupart utilisent quelques grands services comme Hotmail, Yahoo et Gmail. Par conséquent, quand un trop grand pourcentage d'utilisateurs est regroupé dans un trop petit nombre de services, nous perdons les avantages de la décentralisation et souffrons des inconvénients des services centralisés. Les services ne sont plus redondants et ne laissent plus beaucoup de liberté de choix aux utilisateurs. Pour mieux décentraliser ces messageries, je viens de découvrir Snikket qui propose d'installer son propre serveur de messagerie instantanée facilement. Serait-ce une bonne piste ?

Mise à jour du 23/04/2020 : Ajout de Zoom à la liste des logiciels utilisant XMPP.

Rapide présentation de XMPP

Le logo de XMPP

Parmi les messageries instantanées disponibles la plupart utilisent ou ont utilisé un protocole open source qui est né à la fin du siècle dernier : XMPP (aussi connu sous son ancien nom Jabber). Il s'agit d'un protocole extensible (le « X » de XMPP signifie « eXtensible ») et généralement les logiciels qui l'utilisent ajoutent leurs propres briques par-dessus. En effet, Google Talk utilisait XMPP et les autres messageries comme iChat d'Apple, Facebook Messenger et Skype avaient ou ont encore des intégrations avec XMPP. Un rapport de vulnérabilité par Cisco Talos montre que le logiciel de vidéoconférence Zoom utilise aussi XMPP (la faille de sécurité mentionnée est dûe à l'implémentation de XMPP par Zoom et non de XMPP en tant que tel). La messagerie WhatsApp elle, utiliserait FunXMPP qui serait une version allégée de XMPP.

XMPP est donc un protocole très répandu mais la plupart des personnes n'en ont jamais entendu parler et l'ont seulement utilisé via des interfaces intégrées à d'autres écosystèmes propriétaires. C'est une idée assez frustrante pour les personnes qui souhaitent promouvoir l'utilisation de services libres et sécurisés. Les solutions commerciales de XMPP sont largement utilisées mais pas les solutions open source.

Je ne suis pas un expert de XMPP, j'ai seulement pu installer des clients XMPP il y a quelques années pour voir à quoi ça ressemble. Pourtant, je n'ai jamais eu l'occasion de l'utiliser au quotidien faute d'interlocuteurs prêts à installer un client XMPP. Il faut se rendre à l'évidence qu'il est plus simple de dire à tout le monde d'aller sur Facebook Messenger pour communiquer plutôt que de dire qu'il faut se créer un compte sur jabberfr.org ou sur un autre serveur, et qu'il faut ensuite trouver un client XMPP compatible avec sa plateforme : Gajim, Psi ou Dino pour Linux, Psi aussi pour Windows, BeagleIM pour MacOS, Conversations pour Android et ChatSecure pour iOS (cette liste n'est pas exhaustive). Et encore, pas sûr que la communication fonctionne bien car chaque client et chaque serveur n'a pas forcément tous les mêmes XEP implémentées (les XEP sont les noms des extensions possibles au protocole XMPP). Cela implique que le partage de fichier ne marche pas toujours, ni la vidéoconférence, etc. Bref, plein de choix sont possibles mais ce n'est pas clair pour quelqu'un qui souhaite juste communiquer avec d'autres personnes sans avoir beaucoup de connaissances techniques.

Présentation de Snikket

Le logo de Snikket

J'ai découvert Snikket il y a quelques jours et je me permets d'espérer que ce projet est sur la bonne voie. Snikket est un projet créé par les développeurs de Prosody qui est un serveur XMPP. Les personnes derrière Snikket sont donc déjà expérimentées avec XMPP mais ça ne s'arrête pas là. En effet, il ne s'agit pas d'un énième client XMPP mais plutôt l'uniformisation, ou l'intégration verticale, de services XMPP déjà existants. Concrètement, si vous souhaitez communiquer avec la messagerie Snikket, il vous faut installer un serveur Snikket ou en rejoindre un déjà existant puis installer le client Snikket sur votre téléphone. Le même nom est utilisé pour l'application mobile et pour l'application du serveur. Et ce projet ne réinvente pas la roue car le client Snikket est en réalité juste l'application Conversations dont la couleur a été changée du vert au jaune et le serveur est Prosody combiné avec Let's Encrypt.

Le logo de Conversations

J'ai le sentiment que les personnes derrière le projet Snikket ont compris au moins en partie les lacunes de XMPP dans son adoption par le grand public. Le projet cherche à simplifier l'expérience des utilisateurs en leur expliquant simplement le fonctionnement du service de messagerie et en donnant une seule réponse claire sur l'application à utiliser. C'est une uniformisation du même type qui a fait le succès de l'écosystème d'Apple auprès du grand public. En ne proposant qu'une seule application pour chaque plateforme, il n'est pas nécessaire de réfléchir longtemps pour faire son choix et les interactions entre les différentes applications fonctionnent sans devoir paramétrer quoi que ce soit.

Autre point à noter : Snikket fonctionne par invitation. Ce qui signifie qu'il est nécessaire qu'une connaissance nous partage une invitation pour rejoindre le réseau, sinon il faut installer son propre serveur. Je pense voir plusieurs raisons à ce choix. Premièrement, cela permet aux administrateurs du service de gérer progressivement l'afflux des utilisateurs sur le serveur. Cela va éviter des pannes de service suite à une surcharge. Deuxièmement, cela permet d'avoir un serveur Snikket par cercle familial ou par cercle d'ami. Dès leur inscription, les utilisateurs du service peuvent communiquer avec d'autres personnes qu'ils ou elles connaissent (les membres du serveur voient automatiquement s'ajouter à leur liste de contact les autres membres du même serveur). Finalement, cela permet de limiter la taille des serveurs Snikket. Tout l'enjeu du projet Snikket est de faciliter la création de serveurs. Ainsi il est possible de créer son propre serveur lorsque l’on a pas de serveur à rejoindre. Cela pourrait permettre de multiplier le nombre de serveurs Snikket et d'avoir véritablement un réseau décentralisé plutôt homogène.

Mise en place de Snikket

Il est très facile d'installer un serveur Snikket. J'ai pu en faire l'expérience moi-même et en 30 minutes j'avais un service de messagerie pleinement opérationnel.

Là encore un choix clair a été fait. L'installation se fait avec Docker et Docker-compose. Pour résumer, il suffit de :

  1. Avoir un serveur Linux (la plus grande barrière je pense)
  2. Pointer trois noms de domaine vers ce serveur (chat.example.com, groups.example.com et share.example.com)
  3. Installer Docker et docker-compose
  4. Copier un fichier de configuration pour Snikket
  5. Lancer le service avec docker-compose

C'est tout.

Je trouve qu'un bon travail a été fait pour rendre simple l'installation du serveur de messagerie. L'étape supérieure serait peut-être de proposer directement une image virtuelle à lancer chez un hébergeur « cloud » avec juste les noms de domaine à spécifier. Il serait peut-être aussi possible de proposer une application pour les NAS Synology et aussi une application pour la plateforme Yunohost. Jusqu'où est-il possible de faciliter l'installation d'un serveur ? L'idéal serait de populariser les compétences d'administration de serveurs.

La page web lorsque l'on reçoit une invitation

Une fois le serveur Snikket installé, il faut lancer une commande sur le serveur pour générer une invitation puis partager le lien à la personne qui souhaite rejoindre le réseau. Cette page indique les instructions pour installer l'application mobile et pour rejoindre le réseau Snikket. Il y a peut-être encore des améliorations possibles, mais c'est déjà un grand pas en avant en terme d'accompagnement.

Une précision : l'application Snikket est aujourd'hui seulement disponible sur Android mais il est possible d'utiliser d'autres applications XMPP pour les autres plateformes. J'ai pu tester l'application ChatSecure sur un appareil iOS et son utilisation avec le serveur Snikket a fonctionné. La méthode d'enregistrement est juste un peu différente. Il faut d'abord installer l'application XMPP sur le téléphone, puis suivre le lien de l'invitation dans un navigateur et une fois sur la page de l'invitation, cliquer sur le lien « register an account manually » pour créer son compte XMPP sur l'interface web. On entre ensuite ses identifiants dans l'application XMPP pour se connecter.

Une capture d'écran officielle de l'application mobile sur Android (source : F-Droid)

Conclusion

Il existe déjà beaucoup de messageries instantanées et toutes souffrent ou bénéficient de l'effet réseau. Il n'est donc jamais évident de prévoir le succès d'une messagerie.

Dans le cas de Snikket, je pense qu'il s'agit d'une bonne initiative pour aider à populariser le protocole XMPP. Ses initiateurs, me semble-t-il, sont sur la bonne voie. En comparaison avec Matrix, qui est aussi un protocole de messagerie open source que je suis de près, j'estime l'actuelle implémentation de référence Synapse de celui-ci trop complexe à installer et très gourmand en ressources. Quant à l'interface Web et mobile de Riot, elle est trop lourde et pas assez réactive à mon goût. Même si j'utilise aujourd'hui plus Riot que XMPP, je préfère ne pas héberger de serveur Matrix alors que je me sens capable d'en héberger un XMPP.

Pour la suite, j'espère que l'équipe de Snikket réussira à garder un rythme (malgré le contexte actuel dû au Covid-19) et qu'elle réussira à lancer un mouvement. Snikket a été annoncé publiquement lors du FOSDEM en février et est encore considéré en version alpha. J’attends avec impatience qu'il atteigne sa maturité.

Mots-clés : XMPP, Snikket, Riot, Matrix

Un commentaire ?

Vous avez repéré une erreur dans l'article ? Un point d'amélioration ? Vous pouvez envoyer vos commentaires par email à « blog arobase killiankemps.fr » avec pour objet « [Comment][fr][Snikket pour décentraliser les messageries ?] ».
(Le « @ » a été remplacé par « arobase » afin que des robots malveillants ne puissent pas récupérer l'adresse email)

Envoyer un commentaire par email