Presentazione di XMPP

Serata al GOLEM del

Questo scritto deriva dagli appunti sulla presentazione di XMPP che tenni presso il Gruppo Operativo Linux Empoli (GOLEM), , ed è pubblicato con la licenza CC BY-SA 4.0 di Creative Commons. <https://creativecommons.org/licenses/by-sa/4.0/legalcode.it>


Introduzione

XMPP è un acronimo che sta per Extensible Messaging and Presence Protocol (protocollo estendibile di messaggistica e presenza). Come suggerisce il nome stesso, XMPP è una specifica per un sistema libero per l'invio di messaggi, allegati di ogni tipo e molto altro [1]. Questo scritto si concentra sull'invio dei messaggi, tuttavia il protocollo in questione può essere usato per chiamate audio e video, pubblicazione di notizie e in generale la comunicazione di dati attraverso XML. Infatti l'XML è il formato su cui poggia la struttura dei dati di XMPP. È uno strumento stabile, il cui sviluppo è iniziato nel 1998. È decentralizzato, sicuro, flessibile e perciò ampliabile, ed è uno standard riconosciuto dall'Internet Engineering Task Force [2]. Nasce dall'esperienza di Jabber e un tempo era noto con tale nome. Essendo di fatto una raccolta di regole e linee guida, il corpo del protocollo è composto da documenti che spiegano il suo funzionamento. L'insieme delle implementazioni di XMPP comprende quindi programmi per utilizzarlo, programmi da installare sui server per offrire il servizio, e librerie per interagirci all'interno di altri programmi.

Decentralizzato

L'aspetto fondamentale di qualunque sistema di comunicazione è che si possa decentralizzare. Non sempre è preferibile che un sistema di comunicazione sia tale, ma uno che non ha la possibilità di esserlo presenta dei difetti strutturali e mina seriamente la libertà di chi ne fa uso. Per fortuna XMPP è decentralizzato, in maniera analoga alla posta elettronica. Esso adotta il paradigma client e server (cliente e fornitore): ovvero ogni azione da compiersi viene inviata dai computer che usa chi legge e invia i messaggi, il cliente, al computer centrale, il fornitore, che si occupa di prendere in carico la richiesta e di comunicarne l'esito. I messaggi vengono inviati al computer centrale che si occupa di spedirli, come se fosse un ufficio postale del mondo informatico. Lo stesso per quanto riguarda quelli ricevuti: il server si occupa di recapitarli al destinatario, che li consulterà da un programma apposta, il client, su un altro computer, come un telefono Android. Così funziona la posta elettronica e così XMPP. Il vantaggio di questo sistema è che non dovete tenere il computer o il telefono sempre accesso per paura di perdere dei messaggi. Il computer del fornitore deve stare sempre accesso, quello del cliente no. Uno svantaggio di questo sistema è che richiede maggiore manutenzione, poiché viene incluso un intermediario, piuttosto che mettere in contatto diretto le parti in causa. Nonostante ciò, i vantaggi di questo approccio superano gli svantaggi, soprattutto se l'obiettivo è ottenere uno scambio di messaggi le cui modalità ricordino quelle delle applicazioni di messaggistica come WhatsApp, che tra l'altro funziona con una versione modificata di XMPP [3].

Per inviare messaggi a qualcuno, avete bisogno di un indirizzo, così come ne avete bisogno per riceverli. L'indirizzo è anche la prima credenziale necessaria per l'autenticazione col vostro server. I dati degli utenti vengono salvati sui server dove sono ospitati. Non potete autenticarvi col vostro indirizzo sul server di altri, perché non vi conosce. Per inviare e leggere i messaggi, i client possono dialogare solo col computer dove i vostri dati sono ospitati. Un indirizzo XMPP è composto come uno di posta elettronica ed è diviso in due parti: prima della chiocciola, un nome che avete scelto per identificarvi, dopo la chiocciola, il nome del dominio su cui è installato il programma del servizio XMPP. Potete vedere la parte dopo la chiocciola come l'entità che vi offre tale servizio. Potete decidere di cambiare chi ospita i vostri messaggi, o potete ospitarli voi stessi acquistando un dominio e adibendo un computer con un programma server di XMPP, ma tale cambio comporterà la modifica della seconda parte dell'indirizzo XMPP e, a volte, pure della prima, a seconda che su quel dominio ci sia un vostro omonimo.

Primi passi

Stanchi di subire le angherie di Meta con WhatsApp, siete giunti a provare XMPP. Non essendo gestito da un unico ente, dovete decidere chi ospiterà le vostre conversazioni, un po' come quando avete deciso il fornitore della posta elettronica. Se siete alle prime armi, vi sconsiglio di fare da soli: cercate un amico smanettone e chiedete a lui, oppure recatevi al gruppo di appassionati di software libero più vicino (i LUG, Linux User Group, gruppi utenti Linux). Se siete temerari invece, potete intraprendere la strada dell'autarchia, gestendo in autonomia il vostro server XMPP. Più avanti vedremo dei consigli a riguardo.

Esistono sia servizi a pagamento di XMPP, come conversations.im [4], amministrato da Holger Weiß e Daniel Gultsch, l'autore dell'applicazione per Android con lo stesso nome, sia servizi gratuiti o a donazioni, come autistici.org [5] o esiliati.org [6]. Ognuno ha le proprie esigenze e preferenze: cercate il fornitore più in linea con le vostre. Questi sono ottimi per iniziare. Ricordatevi che WhatsApp è apparentemente gratuito poiché il prodotto siete voi, anzi i dati che producete. I servizi di sopra non guadagnano niente dai vostri dati, né tanto meno dal numero di utilizzatori. La corrente elettrica, l'archiviazione dei messaggi e la manutenzione del sistema hanno un costo e un onere non trascurabile. I soldi non devono essere la misura di ogni cosa che facciamo, però prendete coscienza dello sforzo richiesto da queste piccole organizzazioni, che si impegnano a offrire un servizio di qualità, a un costo irrisorio, per una comunicazione libera.

Programmi

Dopo aver creato l'utente presso il fornitore scelto, dovete installare un programma per usare XMPP. Essendo un protocollo libero, ci sono svariate opzioni. Per i computer con GNU/Linux, Dino [7] presenta un'interfaccia grafica pulita, accattivante e semplice. Se il vostro fornitore le supporta, permette anche di effettuare chiamate audio e video. Il classico Gajim [8] è disponibile pure per Windows e Mac, però non permette di effettuare le chiamate su questi sistemi operativi. Nota a margine: se siete sensibili alle problematiche di libertà e riservatezza di un sistema di messaggistica, forse vi interesserà passare a GNU/Linux, un sistema operativo libero e davvero rispettoso dei vostri dati. Per Android, c'è il perfetto Conversations [9] di Daniel Gultsch, che non farà rimpiangere WhatsApp a nessuno! Parlo per esperienza diretta con persone davvero di entusiaste di Conversations, a tal punto da definirlo la chat con solo le persone di cui m'importa. Su iOS le cose si complicano un pochino. C'è sia Monal [10], che funziona anche su Mac, sia Siskin IM [11]. In seguito vedremo come mai iOS è leggermente ostile a XMPP. Infine per gli amanti del minimalismo e della linea di comando, abbiamo il meraviglioso Profanity [12], per GNU/Linux, i BSD, Windows, Mac e Android (con Termux). Con Profanity non potete fare chiamate. Sul sito di XMPP trovate una lista estesa e filtrabile [13] di tutti i programmi per utilizzare questo protocollo.

Per iniziare a usare un qualunque programma XMPP, dovete inserire il vostro indirizzo XMPP e la password scelta al momento della registrazione, nei campi per l'autenticazione. Le dinamiche della registrazione variano a seconda del fornitore del servizio. Dopodiché dovrete aggiungere gli indirizzi delle persone con cui volete scambiare messaggi, o comunicare loro il vostro indirizzo e lasciare che siano loro a contattarvi per primi. Da questo punto in poi, il funzionamento di XMPP è autoesplicativo ed è identico a qualunque sistema di messaggistica degli ultimi quindici anni.

Sicurezza

XMPP offre due tipi di sicurezza: la prima, più comune, è il TLS, Transport Layer Security (sicurezza del trasporto), e la seconda è la crittografia end-to-end (da un capo all'altro), quest'ultima ottenibile in diversi modi. Questi due tipi di sicurezza non sono specifici di XMPP, anzi sono la base della riservatezza su Internet. In particolare il primo è il responsabile dell's nell'HTTPS, il celebre lucchetto chiuso dei siti. C'è molta confusione riguardo a cosa sia la sicurezza informatica e a cosa servano questi due metodi di protezione.

TLS

Il primo, il TLS, serve a far viaggiare le informazioni criptate, indecifrabili per chiunque, tranne per i due poli comunicanti. Una volta giunte a destinazione le informazioni non sono più criptate, bensì in chiaro, intelligibili da chiunque, così come lo erano nel momento prima dell'invio. Senza TLS, chiunque si trovi agli snodi dove passano le informazioni sarebbe in grado di esaminare ogni vostro messaggio, allegato o chiamata. Gli snodi di Internet sono tutti i collegamenti che devono essere eseguiti affinché i dati giungano al computer del destinatario: ovvero il vostro router e/o il modem, tutti i router della compagnia che vi fornisce la connessione, tutti i router della compagnia che fornisce la connessione al computer del destinatario, il modem e/o il router della rete dov'è collegato il computer del destinatario, eccetera. Questo è uno schema semplificato, nella realtà ci sono più passaggi e di conseguenza moltissimi punti in cui poter ascoltare di nascosto, in gergo sniffare (dall'inglese sniffing).

Grazie alla sicurezza del trasporto o TLS, i dati XMPP viaggiano da un computer all'altro senza che nessuno possa intercettarli, come succede invece con le telefonate. Tuttavia, giunti ai destinatari, i messaggi vengono salvati in chiaro e chiunque abbia accesso a quei dispositivi può leggerli. Lo stesso dicasi degli allegati. Per rimediare a questa vulnerabilità si usa la crittografia end-to-end.

end-to-end

Il nome end-to-end, che si traduce dall'inglese con "da un capo all'altro", genera confusione, in quanto pure il TLS funziona da un capo all'altro della comunicazione. Un epiteto più chiaro potrebbe essere "crittografia di archiviazione". Difatti questo tipo di protezione serve a garantire che soltanto le persone scelte possano leggere il contenuto non criptato di un determinato documento. La crittografia da un capo all'altro è l'equivalente digitale di parlare in codice o del cifrario di Cesare.

Mediante la crittografia da un capo all'altro, i messaggi e gli allegati XMPP vengono salvati criptati. Soltanto i vostri dispositivi e quelli del destinatario sono in grado di decifrarne il contenuto.

È bene tenere a mente che la crittografia da un capo all'altro presenta degli svantaggi che spesso superano i benefici della riservatezza promessa. Per esempio, nel caso di OMEMO [14], che è uno dei due metodi possibili di crittografia da un capo all'altro per XMPP, ogni dispositivo genera una chiave e i messaggi vengono criptati con le chiavi dei dispositivi presenti fino a quel momento. Ciò significa che non è possibile decriptare un messaggio più vecchio della data d'inizio utilizzo di un dispositivo. Più semplicemente: se usate XMPP sul telefono e dopo un mese installate un programma XMPP sul computer, sul computer non potete leggere i messaggi OMEMO più vecchi di un mese, perché non sono stato criptati con la chiave del computer, visto che all'epoca ancora non esisteva.

Ci sono due modi per ottenere la crittografia da un capo all'altro con XMPP: il già menzionato OMEMO e il sempreverde OpenPGP. OMEMO è quello più facile e veloce da usare. Quello OpenPGP non è altro che un incapsulamento di OpenPGP attraverso XMPP. Se non conoscete OpenPGP e non avete esigenze di sicurezza particolari, usate OMEMO. Anzi, se non avete esigenze di sicurezza particolari, non usate né l'uno né l'altro, tranne sporadicamente quando sapete di star inviando delle informazioni davvero sensibili, di cui preferite che non rimanga traccia sui computer altrui. Esempio: il PIN del Bancomat, se siete così folli da scriverlo via messaggio.

Tenete bene a mente che, per quanto gli algoritmi di crittografia attualmente in uso siano inespugnabili, non potete controllare il contenuto di un messaggio una volta che lo avete inviato. Se il contatto a cui scrivete con la crittografia da un capo all'altro decide di salvare una copia del messaggio in chiaro, non potete fare nulla per impedirglielo, né potete avere la certezza che lo faccia, né che non lo farà in futuro. Ciò non vuole suggerire che la crittografia sia inutile, tutt'altro! Serve a sottolineare il peso del fattore umano e della fiducia in questo genere di faccende.

Infine commentiamo la scritta su WhatsApp che recita che nessuno al di fuori dei partecipanti della chat, nemmeno WhatsApp, può leggere o ascoltare il contenuto dei messaggi e delle chiamate, perché crittografate end-to-end. È senza dubbio una frase molto rassicurante, ma è anche molto difficile da verificare. Mentre è possibile verificare il funzionamento della sicurezza del trasporto, almeno in parte, senza avere accesso al codice sorgente, altrettanto non si può scrivere della crittografia da un capo all'altro.

Qualunque applicazione di cui non si possa leggere e compilare in autonomia il codice sorgente non può definirsi davvero sicura. Invece, quando abbiamo a che fare con un server, avere accesso al codice sorgente non basta, per quanto sia fondamentale per l'indipendenza del sistema. Non possiamo mai fidarci del suo operato, a meno che non siamo noi l'amministratore del server, visto che non c'è modo di essere certi che il codice sorgente che leggiamo sia quello che è eseguito sul computer remoto. Da un punto di vista razionale, non ci si può mai fidare di un server, l'unica difesa è la crittografia da un capo all'altro. Da un punto di vista pratico, consiglio di scegliere accuratamente il fornitore e differenziare quanto più possibile.

Estensione

XMPP è un protocollo modulare, le cui specifiche sono suddivise in sottospecifiche, denominate XEP, XMPP Extension Protocols (protocolli per l'ampliamento di XMPP). In sostanza le regole del protocollo sono identificate con un numero progressivo e raggruppate per argomento [15]. I documenti che racchiudono le regole sono chiamati XEP. Chiunque può proporre modifiche alle linee guida esistenti o aggiungerne di nuove, attraverso la proposta di uno XEP. Ciò consente un'evoluzione flessibile, a seconda delle esigenze che vengono scoperte. Talvolta questo approccio rende il sistema farraginoso, con implementazioni che differiscono per funzionalità disponibili, sia lato fornitore che cliente. Ciò non accade con protocolli stabili come la posta elettronica. Potrebbe capitare che alcuni dei vostri contatti abbiano scelto un fornitore che non supporta le chiamate, o utilizzino programmi non compatibili con la crittografia OMEMO. Col passare del tempo queste differenze stanno diminuendo e in gran parte sono già state appianate, soprattutto per quanto riguarda il funzionamento base d'invio messaggi e allegati e per la crittografia. Come ho scritto nell'introduzione, XMPP mira a essere molto di più che un sistema di messaggistica istantanea, però non significa che ogni fornitore offra la gamma completa delle possibilità, che tra l'altro ritengo eccessiva e di fatto inutile. XMPP non è una soluzione minimalista, ma è funzionale e funzionante.

Notifiche

Le notifiche si basano su un principio semplice: il programma rimane in funzione e connesso, anche quando non lo stiamo usando, e se arrivano dei messaggi dice al sistema operativo di emettere un suono o di mostrare un avviso, o entrambi. Sui telefoni intelligenti non è così semplice, poiché purtroppo i sistemi operativi Android e iOS hanno un'avversione nei confronti delle applicazioni che continuano a girare, pure quando non sono in primo piano. In realtà su questi sistemi quasi nessuna applicazione di parti terze continua a girare se non è in primo piano. Quando passiamo da un'applicazione all'altra, lo stato della precedente viene congelato, in modo da poter riprendere l'attività in seguito da dove l'avevamo lasciata, ma bloccando la sua esecuzione, per risparmiare batteria e risorse. Su Android questo limite è aggirabile, dicendo al sistema operativo che l'applicazione di XMPP ha il permesso di girare sempre. Non preoccupatevi, il consumo energetico richiesto per mantenere una connessione XMPP è minimo, nettamente inferiore a tenere sempre accessi il Bluetooth, il GPS, o la connessione dati. iOS non concede eccezioni, l'unica via è attraverso le notifiche push [16]. Sui dispositivi mobili di Apple o Google, le notifiche passano attraverso i computer di queste due aziende. Quando un'applicazione mostra una notifica, tale evento è stato scatenato dal computer remoto a cui si appoggia quella applicazione, che ha contattato i computer di Apple o Google, ai quali il cellulare è sempre connesso e che, quando riceve un segnale da loro, mostra la notifica.

È stato redatto uno XEP [17], per informare il fornitore XMPP dei dispositivi che hanno bisogno di essere risvegliati attraverso notifiche push, inviate da un determinato computer. L'applicazione sopracitata Monal gestisce il proprio server per le notifiche push che permette ai dispositivi iOS di risvegliarsi, connettersi al fornitore XMPP e scaricare i nuovi messaggi. Un server di notifiche push non è eccessivamente oneroso da mantenere, però è un elemento in più di cui tenere conto. Questo è il triste stato dei sistemi operativi per dispositivi mobili, riguardo ai limiti eccessivamente stringenti che impongono alle applicazioni che non desiderano seguire il seminato. La notifica push viene utilizzata solo per svegliare il programma XMPP, nessun dato sensibile viene inoltrato ai computer di Apple o Google.

Server

Se siete curiosi e abbastanza temerari da percorrere la strada dell'autarchia, magari con un gruppo di amici, potreste diventare voi stessi fornitori di XMPP. Non è obbligatorio, però lo consiglio. È un'esperienza didattica utile, che sfata numerosi miti riguardo l'inevitabilità dei sistemi centralizzati. È richiesta pazienza e determinazione, e la conoscenza dell'inglese per leggere la documentazione e fare ricerche su Internet; aiuta l'esperienza informatica con un sistema GNU/Linux o BSD.

ejabberd

Il primo programma server che consiglio può essere considerato di fatto l'implementazione ufficiale di XMPP, visto che l'azienda che lo sviluppa è tra i finanziatori dell'organizzazione che presiede la stesura delle linee guida del protocollo. L'organizzazione che presiede all'evoluzione di XMPP è la XSF, XMPP Standards Foundation [18] (fondazione per gli standard XMPP). Il programma server in questione è il completissimo ejabberd [19], il quale gira ottimamente pure su computer con poche risorse, nonostante sia progettato per resistere ai traffici ingenti delle aziende e offrire abbondanti funzionalità. Amministro un'istanza personale piccola, di quindici persone, con supporto per le chiamate, su un computer con un solo processore e un giga di RAM, adibito ad anche altri scopi. Un possibile svantaggio dell'adozione di ejabberd è che è scritto in Erlang, un linguaggio di programmazione progettato per risolvere i problemi specifici delle telecomunicazioni, con enfasi sui processi asincroni [20]. Tale caratteristica potrebbe scoraggiare la lettura e la modifica del codice sorgente, a causa della conoscenza richiesta di un linguaggio che non è tra i più diffusi in ogni ambito, sebbene sia impiegato pure al di fuori della telefonia. Inoltre non è un programma minimalista. Tuttavia è facile da configurare ed è ben documentato [21]. In aggiunta, offre un server TURN e STUN integrato, che è fondamentale per le chiamate audio e video, anche se nel caso di fornitori grandi non conviene collocarlo insieme a quello XMPP, visto che può consumare molta banda. All'epoca scelsi ejabberd per non dover installare un programma server TURN e STUN a parte e perché volevo un'implementazione delle funzioni per dispositivi mobili completa. Adesso sono curioso di provare Prosody.

Prosody

Prosody [22] è un server XMPP scritto in Lua, pensato per essere semplice da configurare e da estendere. Come ejabberd è suddiviso in moduli, ma quelli principali sono meno ed essenziali. Credo sia l'implementazione più minimalista di XMPP, dopo l'abbandonato jabberd 2 [23]. Tra gli obiettivi del progetto c'è la leggerezza. Lua è un linguaggio di programmazione facile e veloce, ottimo per i neofiti. Forse modificare Prosody è più facile di estendere ejabberd, grazie alla scelta di questo linguaggio più conosciuto e semplice.

Non è questo lo scritto in cui spiegherò passo passo come mettere su un server XMPP con nessuno dei due programmi. Mi riservo questo compito per la prossima installazione. Concludo questo capito esprimendo lo sciocco desiderio di una nuova implementazione in C, magari ANSI. Forse il protocollo è troppo oneroso da implementare in questo linguaggio e non c'è abbastanza interesse verso XMPP tra gli appassionati di C da sobbarcarsi questa sfida. D'altronde i seguaci del minimalismo informatico alla suckless sono pochi e spesso disprezzano XML.

Alternative

Sorrido di coloro che apostrofano XMPP come un'alternativa a WhatsApp. WhatsApp è un'alternativa inferiore di XMPP! Scritto ciò, la scelta non è soltanto tra questi due.

Telegram

Telegram ha la fama errata di essere un'applicazione sicura, da smanettoni e per qualche motivo meglio di WhatsApp. In realtà non è più sicura di WhatsApp. Anzi, lo è di meno, stando a quello che dicono le rispettive aziende dei loro prodotti [24] [25], poiché le chat normali non sono crittografate da un capo all'altro. Quindi se qualcuno dovesse violare i computer di Telegram, potrebbe leggere le conversazioni archiviate sui loro dischi. Per le chat segrete è attiva la crittografia end-to-end, per quelle di base no. Magari la fama di essere un'applicazione da aggeggioni deriva dalla quantità di materiale di dubbia legalità che è possibile reperire sui gruppi. Telegram pubblica il codice sorgente delle applicazioni client [26], però non quello del server. Non potete scegliere il fornitore di Telegram, è sempre Telegram, come con WhatsApp. È una dittatura della comunicazione. Forse il fatto che il fondatore sia russo fa associare l'applicazione agli hacker brutti e cattivi, che nell'immaginario collettivo vivono in uno scantinato in Russia, indossano guanti sditati e sono dei delinquenti spietati.

Signal

Signal è un'applicazione di messaggistica con la crittografia da un capo all'altro sempre attiva. Dal protocollo di Signal deriva la crittografia OMEMO di XMPP [27]. I suoi sviluppatori pubblicano il codice sorgente delle applicazioni client e server [28], però l'azienda è contraria a creare un sistema decentralizzato, come spiega il suo fondatore nell'articolo The ecosystem is moving [29]. Invito a leggere l'obiezione di Daniel Gultsch [30], l'autore di Conversations per Android. È più sicuro di WhatsApp, dal momento che è possibile verificare il codice sorgente dell'applicazione e del server, ma rimane una dittatura della comunicazione, dove anche coloro che volessero esaminare il codice non avrebbero voce in capitolo e avrebbero zero possibilità di decidere del futuro del protocollo.

Matrix

Un protocollo di messaggistica istantanea libero e recente (2013) [31], con enfasi sulla crittografia da un capo all'altro, progettato per soddisfare le esigenze moderne. Comprende l'invio di allegati, gruppi e chiamate audio e video. Lo sconsiglio perché ancora acerbo e soprattutto oneroso da mantenere. Le risorse richieste per ospitare il servizio sono eccessive per quella che di fatto è un'applicazione per lo scambio di messaggi prevalentemente di testo. XMPP è più efficiente, dal momento che permette di fornire il servizio su computer adibiti anche ad altri scopi o meno potenti, rendendo il mezzo di fatto democratico. Matrix non possiede ancora questa maturità. Attualmente c'è un solo programma server stabile [32], che non è leggero. È in corso lo sviluppo di un'implementazione in C ANSI [33], però al momento è in alto mare e non può essere utilizzata. Nonostante la notorietà di Matrix, il suo comparto server è acerbo, composto da soli cinque programmi [34], di cui tre in beta e uno in alfa, contro gli otto stabili di XMPP, due dei quali pensati per la leggerezza.

Il progetto Disroot ha smesso di offrire Matrix come sistema di messaggistica nel 2018 [35], per poi spegnere definitivamente il servizio nel 2020 [36], a causa della quantità inaccettabile di risorse che consuma un server con solo una manciata di utenti. Nel loro caso si trattava di 5 GB di RAM (database escluso) e 170 GB di spazio per il database. Uno spreco tremendo! In più hanno additato alcune lacune sulla riservatezza: la cronologia dei gruppi, o in gergo stanze, non risiede nel computer del fornitore dell'utente che l'ha creato, è distribuita sui computer dei fornitori di tutti i partecipanti, per maggiore resilienza, ma anche a tempo indeterminato. Invece con XMPP sapete quale fornitore archivia i dati e per quanto. Almeno lo storico delle conversazioni è crittografato end-to-end. Quel che è peggio è che gli indirizzi Matrix di una stanza sono visibili a tutti i partecipanti. Ciò significa praticamente a chiunque nel caso di stanze pubbliche. Con l'avvento di programmi che scandagliano la rete Matrix e l'aumento di popolarità del sistema in questione, tale decisione strutturale del protocollo potrebbe rivelarsi un problema serio. Queste considerazioni risalgano a settembre 2018 e derivano dall'esperienza di Disroot, non le ho verificate di persona. La mia unica esperienza risale a quattro anni fa circa, quando provai Element su Android e lo trovai estremamente lento. Tuttavia i limiti evidenziati nel primo paragrafo sono sufficienti per preferire XMPP. Per coloro che volessero approfondire l'argomento sicurezza, consiglio la ricerca sulla riservatezza di Matrix.org redatta dalla comunità di The Grid protocol [37].

IRC

L'Internet Relay Chat è vecchia quanto il cucco informatico ed è scomoda secondo le aspettative odierne, però mi colma di gioia ogni volta che la uso. Non funziona come la messaggistica moderna e non assolve agli stessi bisogni. È scarna proprio perché progettata per chiacchierare sul momento, col solo testo. Nel protocollo non è previsto il concetto di utenza univoca: gli utenti si collegano al fornitore, scelgono un nome e chi prima arriva, meglio alloggia. Non c'è lo storico dei messaggi. Non c'è un modo pratico per inviare allegati. Non è possibile inviare i messaggi a chi non è connesso in quel momento. Non ci sono chiamate audio né video.

IRC o sue personalizzazioni furono usate per il multigiocatore in rete nei videogiochi degli anni '90 e d'inizio 2000. La WormNET di Worms Armageddon (1999) è composta da IRC e HTTP [38]. IRC viene tuttora usato per le riunioni di persone che si coordinano da remoto e che spesso non si sono mai incontrate, per offrire assistenza veloce su progetti di software libero, e per numerosi gruppi tematici, che nel gergo si chiamano canali. È l'equivalente di un locale digitale: dovete conoscere un server o un canale e frequentarlo negli orari in cui le persone si collegano, facendo amicizia e spesso finendo a litigare su inutili questioni tecniche e/o politiche. Prima delle comunità su Discord, c'era IRC. La distribuzione di GNU/Linux Debian e numerosi progetti di software libero usano IRC.

L'Internet Relay Chat è decentralizzata in maniera diversa dalla posta elettronica o da XMPP, e può essere distribuita. Si tratta di una decentralizzazione chiusa, in cui chiunque può diventare fornitore, però non può comunicare con gli altri. È distribuita quando i fornitori decidono di replicare la propria rete su computer sparsi per il mondo, per renderla resiliente. Nel nome, la parola relay (ripetitore, staffetta) si riferisce alla natura distribuita, in cui i computer di una rete IRC ne ripetono i dati, fungendo da staffette.

È un protocollo talmente semplice che è facile scrivere a mano i comandi grezzi per il server. Questa semplicità permette di ampliare le funzionalità attraverso programmi terzi, che operano come utenti sempre connessi, i bot (abbreviazione inglese di robot), per svolgere determinati compiti. L'inconveniente è che tali soluzioni potrebbero non essere uguali per tutti i fornitori e perciò le regole del loro funzionamento potrebbero non essere omogenee per coloro che frequentano canali ospitati da fornitori diversi. Attraverso i bot ci sono sistemi di:

La riservatezza su IRC è una questione sfaccettata, poiché non è stato pensato per quello, ma a seconda dei casi, può garantire il semianonimato. Il primo scoglio è che non tutti i fornitori supportano il TLS, però i maggiori come Libera Chat sì, per alcuni è addirittura obbligatorio. Il secondo ostacolo alla riservatezza è che di base il vostro indirizzo IP sarebbe consultabile da chiunque sia connesso a quel fornitore, ma molti operatori l'offuscano. Ovviamente il vostro indirizzo IP è sempre noto agli amministratori del server. Per evitarlo, potete connettervi mediante Tor, o da una rete pubblica o da una VPN, o con una combinazione delle tre. Quasi nessun fornitore salva lo storico delle conversazioni, però quando si tratta di fidarvi della parola di un terzo di cui non potete verificare l'operato, si applica quanto ho scritto di sopra sulla sicurezza di XMPP. Non fidatevi mai, o fatelo sapendo di non poterci fare affidamento. Purtroppo, di fatto il protocollo non supporta la crittografia end-to-end, sebbene in teoria sia possibile implementarla attraverso programmi terzi come GnuPG. Nonostante ciò, una volta trovato un fornitore che offuschi gli indirizzi IP e scelto un alias non riconducibile alla vostra identità, IRC diventa un sistema di comunicazione piuttosto vicino all'anonimato. In più, alcuni fornitori offuscano gli indirizzi IP e permettono l'invio di messaggi, senza registrazione di alcuna sorta.

Il suo vantaggio è che essendo semplice, stabile e vecchio, si trovano programmi e strumenti vari per ogni gusto, ovviamente tutti liberi. Rappresenta come dovrebbe funzionare la messaggistica, lontana delle logiche stressanti della controparte istantanea, senza notifiche e senza l'ansia di dover rispondere immediatamente. Su IRC si conoscono persone strane, interessanti. Quando c'è bisogno di un'informazione veloce basta una telefonata, o al massimo un SMS, o se proprio vogliamo fare i moderni, un bel messaggio XMPP. Per le cose serie c'è la posta elettronica. Per le chiacchiere c'è IRC!

STOMP

Questa è la proposta sbarazzina, provocatoria, per farvi sorridere a fine scritto. Il Simple (or Streaming) Text Orientated Messaging Protocol (protocollo semplice, o di trasmissione, di messaggistica orientato al testo) ha una specifica [39] che tiene fede al nome e di cui trovo affascinante la semplicità, intrigante. La struttura è ispirata a HTTP. Come esso supporta l'invio di binario, perciò non è relegato al puro testo. Come IRC è talmente semplice che è facile scrivere a mano i comandi grezzi per il server. Nonostante tali pregi, non ho trovato programmi sviluppati con l'utente finale in mente [40]: da quanto ho capito di solito STOMP viene utilizzato per comunicare informazioni interne tra computer, che l'utente finale non usa direttamente. Possibile che nessuno abbia mai letto questa specifica, che tra l'altro è più semplice di XMPP, e abbia deciso di realizzare un sistema di messaggistica decentralizzato, libero e minimalista? Di programmi server che implementano il protocollo ce ne sono svariati, pure di librerie per interargirci. Di qui la proposta, perché non scrivete voi il primo programma di chat basato su STOMP? Magari con curses, mi piacerebbe che esistesse! Chissà che prima o poi non raccolga io stesso questa sfida.


Sitografia

 1 An Overview of XMPP <https://xmpp.org/about/technology-overview/>

 2 XMPP RFCs <https://xmpp.org/rfcs/>

 3 WhatsApp's Architecture & System Design <https://www.cometchat.com/blog/whatsapps-architecture-and-system-design>

 4 conversations.im <https://account.conversations.im/>

 5 Instant Messaging e Chat su A/I <https://www.autistici.org/services/chat#jabber---instant-messaging>

 6 XMPP @ esiliati.org <https://www.esiliati.org/jabber/>

 7 Dino <https://dino.im/>

 8 Gajim <https://gajim.org/>

 9 Conversations <https://conversations.im/>

10 Monal <https://monal-im.org/>

11 Siskin IM <https://siskin.im/>

12 Profanity <https://profanity-im.github.io/>

13 XMPP Software <https://xmpp.org/software/>

14 OMEMO Multi-End Message and Object Encryption <https://conversations.im/omemo/>

15 XMPP Specifications <https://xmpp.org/extensions/#the-whole-list>

16 Apple Notifications Overview <https://developer.apple.com/notifications/>

17 XEP-0357: Push Notifications <https://xmpp.org/extensions/xep-0357.html>

18 XMPP Standards Foundation <https://xmpp.org/about/xmpp-standards-foundation/>

19 ejabberd <https://www.ejabberd.im/>

20 History of Erlang <http://erlang.org/course/history.html>

21 ejabberd Docs <https://docs.ejabberd.im/>

22 Prosody <https://prosody.im/>

23 jabberd 2 <https://jabberd2.org/>

24 Telegram End-to-End Encryption FAQ <https://tsf.telegram.org/manuals/e2ee-simple>

25 About WhatsApp end-to-end encryption <https://faq.whatsapp.com/820124435853543>

26 Telegram Applications <https://telegram.org/apps#source-code>

27 XEP-0384: OMEMO Encryption <https://xmpp.org/extensions/xep-0384.html>

28 Signal GitHub <https://github.com/signalapp>

29 The ecosystem is moving <https://signal.org/blog/the-ecosystem-is-moving/>

30 An Objection to ‘The ecosystem is moving’ <https://gultsch.de/objection.html>

31 About Matrix <https://matrix.org/about/>

32 Synapse <https://github.com/element-hq/synapse>

33 Telodendria <https://telodendria.io/>

34 Matrix servers <https://matrix.org/ecosystem/servers/>

35 Matrix Closure <https://disroot.org/it/blog/matrix-closure>

36 Time to switch some lights off <https://disroot.org/it/blog/time-to-switch-some-lights-off>

37 Privacy research on Matrix.org <https://gitlab.com/libremonde-org/papers/research/privacy-matrix.org>

38 WormNET <https://worms2d.info/WormNET_(Worms_Armageddon)>

39 STOMP Protocol Specification 1.2 <https://stomp.github.io/stomp-specification-1.2.html>

40 STOMP Implementations <https://stomp.github.io/implementations.html>