mercoledì 28 novembre 2012

RetroShare e la condivisione Friend-to-Friend

Oggi tornerò a parlare di condivisione files, dedicandomi a un programma dalla storia abbastanza curiosa: RetroShare. RetroShare è un programma open-source, disponibile per i principali sistemi operativi (Windows, Macintosh e diverse distribuzioni di Linux), che funziona come piattaforma decentralizzata per la comunicazione e lo scambio di files. Detta in altri termini, con RetroShare potete scambiare files, in modo simile a quanto avviene con eMule o Torrent, ma potete anche chattare con gli amici o costruire un forum di discussione. Il che non sarebbe niente di particolare, dato che si può fare in molti altri modi, anche più semplici; la particolarità sta nel fatto che tutte le comunicazioni sono criptate. Come si autodefinisce nel suo sito, RetroShare è progettato per offrire un Secure Social Network, cioè un ambiente in cui ciò che decidi di condividere coi tuoi amici sarà davvero condiviso soltanto coi tuoi amici e inaccessibile ad altri. Ma vediamo più in dettaglio.
La condivisione di files, in un sistema peer-to-peer (P2P), avviene in forma uguale tra un numero imprecisato di sconosciuti: io inserisco un file in una rete P2P, come eMule, e chiunque potrà raggiungere quel file e scaricarlo. Inoltre, se sono presenti più copie di uno stesso file, sarà possibile scaricarne frammenti da ogni copia disponibile, così da velocizzare l’operazione. E fin qui niente di nuovo, perché chiunque abbia mai usato eMule (o Torrent) ne conosce anche, almeno in forma approssimativa, il funzionamento. Questo sistema introduce vari problemi di sicurezza, perché è relativamente facile localizzare chi stia scaricando cosa: ogni utente è collegato in modo diretto alla fonte da cui scarica e questo rende possibile localizzare l’indirizzo IP dell’utente in questione.
RetroShare passa da un sistema peer-to-peer a un sistema friend-to-friend: i files non sono più condivisi indiscriminatamente con chiunque, ma solo con una ristretta cerchia di persone, ossia quelli che io ho scelto come “amici”. Nella sua forma più semplice, dunque, possono utilizzare RetroShare per creare una ristretta cerchia di amici e scambiare con loro il materiale che voglio, attraverso canali criptati: organizziamo la nostra piccola comunità, ci scambiamo files in modo sicuro e protetto e tanti saluti al resto del mondo.
Esiste però anche una forma più “sociale”, basata sugli “amici di amici”, che porta RetroShare molto più vicino a eMule e Torrent, pur mantenendo un sistema friend-to-friend. Per spiegare meglio questa forma sociale, vediamo come funziona la ricerca di un file. Quando cerco un file, per prima cosa RetroShare guarderà tra i miei amici: se uno di loro lo possiede e lo ha messo in condivisione, allora lo riceverò da lui e la ricerca è finita. Se non lo possiede, RetroShare guarderà tra tutti gli amici di quell'amico  poi guarderà tra gli amici degli amici dell’amico, e così via, fino a che il file non è stato trovato o, in caso di risultati negativi, fino a che la ricerca non si fermerà per essersi spinta oltre una certa distanza. Una volta localizzato il file, non sarà trasferito direttamente a me, ma mi arriverà “saltellando” da un amico all'altro  seguendo la catena di amici che porta da me al file: in questo modo, il “distributore” del file non vedrà il destinatario, ma solo il suo amico più diretto.
Esempio concreto. Pincopallino possiede il file che mi interessa, ma non è un mio amico diretto. Il file sarà quindi trasferito a Tizio, che è amico di Pincopallino; Tizio lo trasferirà al suo amico Caio; Caio lo trasferirà al suo amico Sempronio; Sempronio è un mio amico, così lo trasferirà direttamente a me. In tutto questo giro, io non vedrò mai Pincopallino e Pincopallino non vedrà mai me, proprio come non vedremo le varie tappe intermedie. Ogni scambio avverrà poi attraverso un tunnel criptato, che collega i due amici tra cui lo scambio si verifica. Come è facile da intuire, questo percorso è molto più lento rispetto al normale peer-to-peer, ma ha il vantaggio di essere molto più sicuro: sta dunque agli utenti decidere tra la velocità e la sicurezza.
Gli amici sono persone di cui ti fidi e sono stabiliti attraverso uno scambio di “certificati di identità”. Quando utilizziamo RetroShare per la prima volta, ci sarà richiesto di generare una nostra identità, che si accompagna a due chiavi, utilizzate per gestire le connessioni criptate: l’aggiunta di un amico avviene mandandogli il mio certificato, per identificarmi, e lui potrà accettarla inviandomi a sua volta il suo certificato. In questo modo, entrambi potremo verificare l’identità dell’altro. Una cosa da tenere presente è che i miei amici sapranno sempre chi sono, per cui è opportuno che gli amici siano davvero amici, cioè persone fidate: l’essenza di RetroShare è questa, uno scambio protetto tra persone fidate.
Quale sarebbe la curiosità della storia di RetroShare, cui accennavo all'inizio? RetroShare è in vita da diversi anni e finora è stato ignorato da tutti o quasi: il suo stesso sviluppo è ancora alla versione 0.5.4c, cioè ancora piuttosto lontano da una versione stabile e definitiva. Dall'inizio dell’anno in corso, però, pare che la gente si sia accorta della sua esistenza e il suo utilizzo è aumentato di parecchio nel giro di pochi mesi. Staremo a vedere i successivi sviluppi.

Rischi legali?

Come avviene per qualsiasi sistema di scambio protetto, anche RetroShare può essere utilizzato per scambiare materiale più o meno illegale. A questo proposito, è bene segnalare quanto avvenuto di recente ad Amburgo, dove una sentenza alquanto discutibile ha evidenziato i rischi legali che si possono correre, utilizzando questi programmi. Qui potete trovare la storia completa, coi link alle ingiunzioni del tribunale (in tedesco) e a dibattiti in merito alla legittimità dell’ingiunzione stessa (sempre in tedesco). Non essendo io un esperto di diritto, men che meno tedesco, lascerò ad altri il compito di valutare il tipo di impatto che potrà avere questa ingiunzione.

venerdì 23 novembre 2012

Chat di Facebook: bloccare le notifiche di lettura


Una delle nuove funzioni introdotte nella chat di Facebook, con le modifiche che si sono verificate quest’anno, è la notifica di avvenuta lettura, cioè quella simpatica scritta che compare nella parte bassa di una finestra della chat e ci avvisa che Tizio ha visualizzato il nostro messaggio alla tal ora. Una funzione più o meno apprezzata, a seconda dei punti di vista: c’è chi la considera comoda, perché permette di sapere se un messaggio sia stato letto o meno, c’è chi la considera invasiva della propria privacy, perché impedisce di ignorare persone importune, c’è chi semplicemente la ignora, e così via. qualunque sia la posizione a riguardo di questa funzione, un dato rimane comune: utilizzando solo le normali impostazioni di Facebook, non è possibile disattivarla. È possibile invece disattivarla, entro certi limiti e non senza effetti collaterali, utilizzando soluzioni alternative: vediamo quali.
Prima di tutto, uno sguardo a come funziona il meccanismo di notifica, cercando di utilizzare termini comprensibili anche a normali esseri umani e senza addentrarci troppo nelle complicazioni della struttura di una pagina web. Qualche passo su questa strada, però, lo dovremo compiere.
Quando noi “facciamo qualcosa” in una pagina web, come ad esempio cliccare un pulsante, passare il puntatore del mouse su una figura, oppure scrivere in un form, la pagina riceve un segnale che la avvisa della nostra azione. Questo segnale si chiama “evento”. Ogni azione genera un tipo di evento diverso: ad alcuni di questi eventi la pagina è programmata per rispondere in un determinato modo, mentre altri eventi saranno ignorati. Se clicchiamo un pulsante, ad esempio, di solito succederà qualcosa nella pagina (un video si avvia, si apre un pop-up, eseguiamo il login a un sito, eccetera), mentre solo in alcuni casi una immagine reagirà alla presenza del mouse (per esempio mostrando una didascalia). La risposta agli eventi, di solito, è controllata attraverso il JavaScript.
Come si applica tutto ciò al caso della chat di Facebook? Si applica in questo modo. Quando noi visualizziamo un nuovo messaggio, generiamo un evento. Questo evento è spedito al server, il quale provvederà a mostrare una notifica di avvenuta lettura nella chat del mittente. Se vogliamo impedire che la notifica sia inviata, dunque, ciò che dobbiamo fare è intercettare l’evento prima che sia spedito al server; in altri termini, dobbiamo bloccare la funzione che, nella nostra pagina, si attiva al nostro evento (lettura del messaggio) e lo spedisce al server.
Quando leggiamo un messaggio, la nostra pagina cerca di segnalare l’avvenuta lettura a quest’altra pagina:
facebook.com/ajax/mercury/change_read_status.php
Che cosa faccia questa pagina, potete capirlo da soli, leggendone il nome: “change_read_status”. Quando riceve una chiamata, la pagina cambia lo stato del messaggio da cui è partita la chiamata (ossia l’evento) e il messaggio passa da “non letto” a “letto”; di conseguenza, la persona che aveva spedito il messaggio riceverà a propria volta un avviso, che descrive l’avvenuto cambiamento, e nella parte bassa della sua chat una scritta lo avviserà che noi abbiamo letto il suo messaggio.
Siccome alla base di tutto c’è l’indirizzo che ho segnalato poco sopra, praticamente tutti i sistemi per bloccare le notifiche partono da quello. Una soluzione molto rudimentale consiste nel bloccare direttamente l’indirizzo facebook.com/ajax/mercury/change_read_status.php, per esempio inserendolo nella lista delle pagina da bloccare, se abbiamo installato un programma per bloccare le pubblicità, come AdBlock Plus e simili. Questa soluzione può funzionare con qualsiasi browser, a patto che ci sia un sistema per bloccare specifici indirizzi. Come effetto collaterale, però, tutti i nostri messaggi continueranno ad apparire come “non letti”, almeno fino a che non risponderemo; il che è normale, visto che abbiamo la pagina che ne cambia lo stato.
FB unseen è una estensione per Google Chrome, che fa praticamente la stessa cosa, ma in forma più elegante e con alcune opzioni supplementari, per cercare di limitare gli effetti collaterali. Quando però apriamo l’intera conversazione con una persona, i messaggi saranno segnati come “letti” e il mittente riceverà di conseguenza la notifica di lettura avvenuta. Per adesso. Lo sviluppatore di questa estensione ci ha lavorato più volte, anche per inseguire i cambiamenti che Facebook continua a fare, per non so quale sarà lo stato dell’estensione, quando la scaricherete: alcune falle potrebbero essere state tappate, altre si potrebbero essere aperte.
Per gli utenti di Firefox, che hanno installato l’estensione Greasemonkey, è disponibile un altro script, che fa sempre più o meno la stessa cosa: Facebook Stealth. In questo caso, a essere bloccati son sia gli eventi di avvenuta lettura, sia gli eventi di scrittura in corso. Almeno in teoria, perché poi rimane sempre l’eterna lotta degli sviluppatori contro Facebook, che cambia di continuo e rende difficile mantenere aggiornate tutte le funzioni di uno script. A ogni modo, finché funziona dovrebbe permettere di bloccare anche gli avvisi di “Tizio sta scrivendo”, tanto per abbondare.