Oggi voglio parlarvi di GNU Jami, un programma di messaggistica istantanea sviluppato da Savoir-Faire Linux, una associazione senza scopo di lucro canadese.
Si tratta di una programma che appartiene alla lista dei progetti ad alta priorità della Free Software Foundation e fa parte del mitico progetto GNU. Supporta molte delle funzioni richieste in una chat moderna: ovvero le chiamate, le video chiamate, più dispositivi per utente, condivisone della posizione in tempo reale, messaggi vocali, messaggi video, invio di file, conferenze e condivisione dello schermo. Tra le molte funzioni, manca purtroppo la possibilità di formare chat di gruppo e la sincronizzazione dei messaggi tra più dispositivi. Per fortuna, però, gli sviluppatori di Jami hanno già in programma di aggiungere anche queste funzioni grazie allo sviluppo di Swarm, un sistema basato sul protocollo di sincronizzazione di git.
Comunque sia, Jami ha qualcosa che gli altri non hanno: è peer to peer.
Questo significa niente server, niente cloud, niente rischi di sicurezza lato server, niente rischio di vendita dei propri dati personali. Non sono richiesti numeri di telefono, carte di credito o indirizzi email. Manco a dirlo, tutte le comunicazioni sono criptate “end to end”.
Vediamo un po’ più nel dettaglio come funziona.
In pratica un account Jami è un file che viene creato sul nostro dispositivo e questo significa che è possibile “registrarsi” offline. In questo file viene salvata una chiave crittografica generata casualmente e un identificativo, una lunga stringa casuale di caratteri alfanumerici. Fatto ciò possiamo creare il nostro profilo, costituito da un avatar, un nome utente e una password opzionale. Il nome utente viene salvato, insieme al nostro identificativo, sulla blockchain ethereum, in modo che rimanga riservato per noi e permettendo agli altri di trovarci tramite nome utente, piuttosto che tramite identificativo. La password invece serve per criptare il file dell’account, per aumentare la sicurezza in caso di compromissione del dispositivo su cui usiamo Jami. Quest’ultimo passaggio è quello che più si avvicina ad una registrazione classica ad un servizio.
Visto che l’ho citato spiego brevemente che cos’é la blockchain ethereum. È come un grande database distribuito che mantiene le informazioni in modo che non possano essere alterate o eliminate una volta inserite. Dato che nesssuno controlla il server centrale, perché appunto non c’è il server centrale, viene da chiedersi cosa succede se qualcuno tenta di alterare queste informazioni che dovrebbero restare immutabili. La garanzia di ciò viene dalla maggioranza di consensi che decide cos’è vero e cosa no. Affinché un attore malevolo riesca ad alterare la blockchain è necessario che si affermi una nuova maggioranza che approva la blockchain modificata. La maggioranza è determinata da chi ha più potenza di calcolo e perciò viene ritenuto abbastanza difficile modificare una blockchain.
A questo punto Jami è pronto a farci comunicare con chiunque. Resta solo da stabilire una connessione con altri utilizzatori di Jami. Per far ciò ci serve di sapere l’indirizzo IP dei nostri contatti. Ecco che entra in scena openDHT. openDHT dove DHT sta per Distributed Hash Table o tabella di hash distribuita, è una tecnologia usata anche in bittorrent e altri sistemi di file sharing e consente di distribuire informazioni ai vari nodi partecipanti senza bisogno di server centrali. Nel caso di Jami la DHT contiene le associazioni identificativo, indirizzo IP. Appena Jami ottiene queste informazioni dalla DHT, si collega direttamente agli indirizzi IP dei nostri contatti e possiamo iniziare a messaggiare.
In realtà non è proprio corretto dire che non ci sono server. Alcuni server, infatti, sono necessari per migliorare l’esperienza utente:
- server di avvio di openDHT, è opzionale, ma consigliato per un avvio rapido. Serve per ottenere un elenco iniziale di indirizzi IP di utenti Jami per avviare openDHT.
- proxy openDHT, fa da punto di appoggio per i dispositivi mobili, per evitare che consumino batteria e dati. È totalmente opzionale, ma consigliato sui dispositivi mobili per i motivi che ho scritto prima.
- server STUN, qualora la propria rete si trovi dietro ad un NAT o firewall, fornisce informazioni per poter stabilire una connessione dirette da/per gli altri peer.
- server TURN, quando non sono possibili connessioni dirette al nostro Jami, TURN fa da intermediario (di roba comunque criptata).
Tutti i server presenti sono opzionali e non strettamente necessari al funzionamento di Jami. Chiunque può ospitare i propri server di appoggio. Nonostante siano presenti questi server, nessuno dispone di informazioni circa l’utente. Non ci sono server che sanno i tuoi contatti, i tuoi file, i tuoi messaggi. Sono solo server di ausilio. L’intera funzionalità è garantita da questa architettura p2p. Ad esempio, sulla mia rete funziona meglio senza server STUN e TURN, dato che posso aprire le porte del router tramite UPnP.
Jami è estremamente resiliente, in quanto può funzionare anche senza accesso ad Internet, basta essere collegati alla stessa rete e la conversazione può continuare. Inoltre per utilizzarla non c’è bisogno di mantenere il proprio server. Il semplice fatto di aver installato l’app ci consente di poter chattare con i nostri contatti in modo privato e sicuro. Questo sempre se i nostri contatti siano raggiungibili, perché anche Jami ha i suoi punti deboli. Le reti moderne basate su IPv4, risentono del fatto che ci sia un componente interposto tra la rete locale e internet, ovvero il NAT (Network Address translation) che, se non correttamente configurato (manualmente o automaticamente mediante UPnP, STUN e simili), impedisce effettivamente tutte le connessioni dirette in ingresso verso i nostri dispositivi. D’altra parte la tecnica del NAT, è un trucco che è stato adottato per risolvere il problema della carenza di indirizzi IP pubblici. Passando al protocollo IPv6, ci sarebbero più indirizzi che atomi nell’universo conosciuto, pertanto il motivo dell’esistenza del NAT verrebbe meno, e quindi si direbbe addio una volta per tutte a questi problemi di irraggiungibilità.
Il futuro di Jami sembra brillante e i progressi fatti in questi ultimi anni sono fenomenali. Sul blog degli sviluppatori di Jami ci sono molti articoli tradotti anche in italiano, dove viene delineato il futuro di questo progetto, tra i quali l’annuncio di Swarm. Mi aspetto grandi cose da questo sistema. Resta da vedere se prenderà piede. Io intanto ho fatto la mia parte.
Il vostro informatico di fiducia,
alla prossima.