La struttura decentrata del protocollo Matrix permette di creare delle chat virtualmente eterne, capaci di essere utilizzabili anche se il server é sotto attacco hacker, va offline o viene fatto esplodere in mille pezzi con una bomba termonucleare!

RETE DECENTRALIZZATA

Innanzitutto va ricordato che Matrix é una piattaforma decentralizzata (o, se si preferisce, “federata”). Ciò significa che non esiste UN server Matrix ufficiale come sulle piattaforme centralizzate tipo Twitter o Whatsapp ma ci sono diversi server che interagiscono fra loro (un po come l’email: non ci si “iscrive all’email”, ma si crea un account su ProtonMail o Gmail o Hotmail o al server di posta della propria azienda/scuola ben sapendo che da ognuno di questi si può ricevere ed inviare messaggi agli altri).

Sono già diversi i server Matrix attivi. Alcuni hanno una certa dimensione e sono gestiti da un ente, un’associazione o un’azienda commerciale mentre altri sono molto piccoli, essendo praticamente dei server casalinghi pensati per essere usati tra un ristretto numero di persone. Alcuni sono aperti al pubblico, ossia é possibile registrarcisi (così come ci si registra a Gmail per l’email), mentre altri sono privati (come il server di posta della tua azienda). Il più noto server Matrix attualmente é matrix.org, ossia quello dei creatori originari di Matrix. Una lista incompleta di server Matrix pubblici é disponibile qui.

SU MATRIX, TUTTO E’ UNA “STANZA”

Matrix organizza tutto in stanze: quelli che su Whatsapp sono chiamati gruppi e su IRC son chiamati canali, su Matrix vengono chiamate stanze, con la particolarità che su Matrix… tutto é una stanza!

Quando Tizio chatta direttamente con Caio ed in quella discussione non c’é e non può entrare nessun altro, semplicemente Tizio e Caio stanno in una stanza con due soli utenti! Questa, quindi, può essere amministrata e gestita allo stesso modo di una stanza con migliaia di utenti diversi, assegnando regole, ruoli, permessi speciali ecc.

LE STANZE MATRIX SONO UBIQUE

Se si crea una stanza in cui interagiscono solo utenti registrati sullo stesso server, quella stanza materialmente si troverà solamente su quel server. Questa é la situazione che si verifica su OGNI piattaforma centralizzata: un gruppo Whatsapp si trova materialmente sui server Whatsapp così come i suoi utenti. I gruppi Facebook pure.

Osserviamo il disegno qui sotto e facciamo un paragone: é come se matrix.blu fosse Whatsapp e matrix.giallo fosse Telegram. Tra i due non v’é alcun contatto e se uno dei due avesse un problema, l’altro, essendo una piattaforma del tutto diversa, avrebbe gruppi diversi, utenti diversi ecc.

Ma con Matrix le cose funzionano diversamente ed i diversi server, parlando la stessa lingua (il protocollo Matrix), sono fatti proprio per interagire fra loro! Alla stanza che abbiamo creato può dunque partecipare anche un utente che é registrato su un server diverso. Quando ciò avviene, la stanza viene di fatto clonata su quest’altro server. Ciò significa che di quella stanza ci saranno due copie identiche costantemente sincronizzate fra loro.

[Per una spiegazione più dettagliata di come avviene la trasmissione dei dati tra server diversi, c’é la chiara animazione (in inglese) in questa pagina di matrix.org. Basta premere su NEXT perché la spiegazione avanzi mostrando passo-passo cosa avviene quando si spedisce un messaggio, una risposta, ecc…]

Nel momento in cui il proprio server fosse irraggiungibile, i suoi utenti non avrebbero alcun modo né di accedere alla stanza né di recuperare i messaggi scritti in precedenza, così come non potrebbero interagire fra loro. Tuttavia la stanza continuerebbe ad essere raggiungibile e funzionante sull’altro server (come dire: se Whatsapp non funziona, il tuo gruppo é comunque accessibile da Telegram).

Basterà dunque accedere (temporaneamente o definitivamente che sia) al server ancora funzionante per recuperare stanze, messaggi, media e contatti inaccessibili dal server su cui si era inizialmente.

STANZE UBIQUE = VIRTUALMENTE INDISTRUTTIBILI

Se Mastodon, Whatsapp, Facebook o Twitter sono irraggiungibili non c’é nulla da fare: bisognerà aspettare che tornino utilizzabili e nel frattempo spostarsi su piattaforme diverse… a lamentarsi che la piattaforma é irraggiungibile! Al contrario, su Matrix, il contenuto può essere ubiquo e sopravvivare anche alla caduta del server su cui é stato realizzato. Metti caso che in una stanza vi siano 60 utenti di matrix.blu ed 1 di matrix.giallo. Ebbene, quell’unico utente, solo per il fatto di essere registrato su un server diverso, svolge un ruolo importantissimo, permettendo ai contenuti dei 60 utenti di matrix.blu, di avere una copia di sicurezza anche su matrix.giallo. Appare chiaro che più é differenziato il numero di server da cui si accede ad una stanza, più questa ha probabilità di sopravvivere ad eventuali inefficienze di uno dei suoi server. Si tratta dunque di una struttura estremamente resiliente.

Su Matrix esistono stanze molto grandi, cui partecipano diverse centinaia o migliaia di utenti e queste solitamente hanno diverse decine di indirizzi locali diversi (cosa siano gli indirizzi locali lo vediamo tra un attimo). Anche se si accedesse su un server Matrix che non ha alcuna copia locale di una stanza (nell’immagine qui sopra: uno dei due server in cui non c’é la stanza) conoscendone gli indirizzi é comunque sempre possibile entrarci. Dunque non é indispensabile registrarsi proprio su uno dei server in cui c’é una copia della stanza, ma ci si potrà accedere da un qualsiasi server Matrix!

Le stanze Matrix, dunque, possono essere quasi condiserate una sorta di portale di comunicazione fra più mondi/server, trovandosi contemporaneamente su ognuno di questi.

Questo concetto, inoltre, é espandibile in qualche modo anche ai bridge di Matrix. Un server Matrix, difatti, può sincronizzare le proprie stanze non solo con altri server Matrix, ma addirittura con altre piattaforme (Telegram, IRC, Whatsapp, Slack e molte altre ancora). Qui la cosa in realtà é un pò più complicata e cambia molto sia da piattaforma a piattaforma che da bridge a bridge. Risulta tutto più chiaro leggendo l’articolo appena linkato, ma in soldoni la faccenda può esser spiegata così: i server Matrix, tra di loro, fanno una copia esatta della stanza, ma quando si collega Matrix ad una piattaforma diversa, vuoi per le caratteristiche della piattaforma, vuoi per il modo in cui questo collegamento viene gestito, le versioni delle stanze che stanno su queste piattaforme non sono sempre una copia esatta di quella che si vede su Matrix. Per esempio: collegando una stanza Matrix ad una piattaforma social che permette messaggi di al massimo 500 caratteri, tutti i messaggi più lunghi verrebbero trattati in modo particolare, ad esempio con dei link al server Matrix da cui si erano generati (server che, potrebbe non esserci più).

MIRRORING

Una pratica di sicurezza può ad esempio essere quella di creare per sé un secondo account su un server Matrix diverso da quello solitamente utilizzato esplicitamente con lo scopo di generare una copia “di backup” delle proprie stanze più importanti. Questo secondo account potrebbe essere fatto entrare in quelle stanze cui si vuol esser certi di poter accedere sempre e comunque, magari concedendo a tale nuovo utente i permessi di amministratore, in modo tale da avere più possibilità di accedere e gestire la stanza, avendo cura di farvi accedere anche gli altri membri con degli account di riserva.

La pratica di clonare la stanza su più server si chiama mirroring (ovvero “specchiare”). La procedura per effettuarlo é abbastanza semplice, ma può cambiare a seconda del modo in cui si accede a Matrix, del software e device usato.

TUTORIAL

Il seguente tutorial é pensato per chi accede a Matrix utilizzando Riot da browser e presupponendo il seguente scenario: ho già un account sul server A su cui v’é una stanza privata (accessibile solo ai membri) che vorrei mirrorare per sicurezza. Prima di cominciare può essere utile ripassare la breve guida sui primi passi con Matrix / Riot.

1. ASSEGNARE UN INDIRIZZO ALLA STANZA

Alla stanza va innanzitutto assegnato un indirizzo locale che dovrà seguire questo formato: #nomestanza:nomeserver e va fatto nelle impostazioni della stanza stessa.

2. CREARE UN ACCOUNT SU ALTRO SERVER

Bisogna dunque scegliere un server Matrix diverso da quello che si usa abitualmente (ad esempio uno tra quelli in questa lista) e creare un nuovo account. Sul browser é possibile aprire due schede distinte loggandosi contemporaneamente ai due diversi server (che é un pò come avere due diversi profili Facebook aperti contemporaneamente).

3. INVITARE IL NUOVO ACCOUNT NELLA STANZA

A questo punto si torna all’account principale, si entra nella stanza in questione e si invita il nuovo account. Volendo, una volta inviato l’invito, si può già selezionare il nome dalla lista degli invitati e da lì impostarlo come amministratore della stanza.

4. ACCETTARE L’INVITO

Tornare quindi al nuovo account e da qui accettare l’invito alla stanza:

5. AGGIUNGERE UN SECONDO INDIRIZZO ALLA STANZA

A questo punto bisogna ripetere il primo punto, aggiungendo un nuovo indirizzo alla stanza, sempre con lo stesso formato #nomestanza:nomeserver

In questo modo la stanza si troverà ad avere due indirizzi (volendo anche più di due: non c’é un limite agli indirizzi assegnabili):

#nomestanza:nomeserver1

#nomestanza:nomeserver2

In realtà ogni server assegna già in automatico l’indirizzo alla stanza, ma si tratta di una stringa tipo “!isobjBnFgqYHjqJMF1b:nomeserver“. Quello é il vero indirizzo della stanza ma ovviamente é abbastanza ingestibile perché… vattelo a ricordare! Gli indirizzi inseriti nel punto 1 e 5 sono in realtà degli alias, ossia degli indirizzi “virtuali” che poi il server penserà a collegare a quello vero che gli ha assegnato. Creare gli alias servirà più avanti per gestire con più facilità la stanza e permettere ad altri di chiedere d’entrarci.

Fatto! Adesso la stanza é presente e sincronizzata su entrambi i server!

A questo punto, anche cascasse il server usato di solito, é comunque possibile chattare nella stanza accedendo con il nuovo account. Se anche gli altri utenti creassero un account di riserva, l’eventuale lavoro di gruppo svolto in una stanza potrebbe continuare anche nel caso di guasti, hackeraggi… o bombardamenti nucleari! 😉

[NB: la natura delle stanze, svincolata dai server ma anche dagli account utente, può avere anche un altro tipo di utilizzo: un utente che perdesse le credenziali del proprio account, potrebbe essere re-invitato in una stanza/conversazione con un account differente, senza perdere tutti i propri vecchi messaggi]

PS: Se però, si preferisse avere una stanza su un solo server ed impedire che vi accedano utenti registrati su server differenti, evitando così che la propria stanza venga clonata altrove, é sempre possibile creare stanze “non federate”. In questo modo le stanze non federate su matrix.blu saranno accessibili solo agli utenti di matrix.blu, e le stanze non federate di matrix.giallo saranno accessibili solo dagli utenti di matrix.giallo.