GNUnet

Da Wikipedia, l'enciclopedia libera.
GNUnet
Logo
GNUnet con interfaccia grafica GTK+

GNUnet con interfaccia grafica GTK+
Sviluppatore Progetto GNU
Ultima versione 0.10.1 (4 agosto 2014)
Sistema operativo Linux
Mac OS X
Microsoft Windows
BSD, Solaris
Linguaggio C
Genere Peer-to-peer
Licenza GPL
(Licenza libera)
Lingua Inglese. Localizzazione supportata.
Sito web gnunet.org

GNUnet è un framework libero e open source per le reti peer-to-peer. Esso offre il protocollo peer-to-peer anonimo più sicuro in circolazione e la politica di sicurezza del suo protocollo prevede un livello di sicurezza denominato "paranoico".[1]

Il software è scritto interamente in C, ma sono in corso tentativi di clonarne una versione in Java per incrementarne la portabilità. Il framework GNUnet, nella versione scritta in C funziona su GNU/Linux[2], BSD[3], Mac OS X[4], Solaris e Microsoft Windows[5]. La versione Java è invece per definizione compatibile con qualsiasi sistema operativo, purché dotato di Macchina virtuale Java.

GNUnet è parte ufficiale del Progetto GNU.

GNUnet con interfaccia grafica QT

Storia[modifica | modifica sorgente]

Il progetto nasce nel 2001, col principale obiettivo di creare una rete di file-sharing completamente anonima, resistente alla censura e che consentisse agli utenti di pubblicare e recuperare informazioni di ogni tipo. Si è trattato sin dall'inizio di un progetto molto complesso e ambizioso poiché intendeva riscrivere interamente tutti i passaggi client-server su cui si basa quello che comunemente viene chiamato Internet.[6] Ciò ha portato alla necessità di scrivere una notevole mole di codice.

Lo sviluppo avviene perlopiù in ambito universitario e accademico, il che se da una parte non ne rende l'evoluzione particolarmente rapida, dall'altra la rende estremamente rigorosa negli obiettivi, nella filosofia e nella documentazione.

Gli sviluppatori hanno sempre avuto particolarmente a cuore l'aspetto didattico e divulgativo, tanto che per ogni manciata di codice aggiunta ne viene subito divulgata la documentazione, in pieno spirito GNU. La sezione Developer Handbook del sito del progetto è tra i più approfonditi manuali di programmazione riguardanti un singolo progetto fortemente in fase di sviluppo che siano mai stati scritti.[7][8] Ciò indubbiamente si deve anche al fatto che tra le speranze dei programmatori c'è quella di rendere virale non solo l'utilizzo di GNUnet, ma anche il suo stesso sviluppo, concepito a tale scopo in forma modulare sin dal principio. Chiunque sposi la filosofia del progetto e mastichi un po' di linguaggio C è infatti fortemente incoraggiato ad estenderne il più possibile le funzionalità creando nuovi moduli o lavorando su quelli già esistenti.[9]

Anonimato[modifica | modifica sorgente]

La rete è rigorosamente decentralizzata (non esistono server privilegiati in senso assoluto). Ogni scambio di informazione è criptato "al volo" con alto livello di sicurezza e l'utente non ha modo di conoscere l'IP del nodo con cui sta condividendo informazioni, perché il tutto viene moderato da un nodo intermedio. Il nodo intermedio a sua volta può conoscere gli IP dei due nodi che si stanno scambiando informazioni (e questi il suo), ma non può scoprire cosa si stiano effettivamente scambiando, perché solo essi conoscono le chiavi per decriptarne il contenuto. Insomma in una rete GNUnet è possibile conoscere solamente o l'IP di un nodo o i dati che questo condivide.

File sharing[modifica | modifica sorgente]

Il servizio di file-sharing utilizza il protocollo anonimo GNUnet per smistare le richieste e le risposte. Per la ricerca di contenuti e di blocchi di dati sono utilizzati messaggi di richiesta ridondanti: a seconda della lettura da parte del nodo successivo i messaggi vengono infatti ulteriormente inoltrati a zero o a più nodi.

Quando un nodo è sotto stress abbassa le richieste da parte dei nodi vicini col più basso valore interno fiducia.

GNUnet offre inoltre un'opzione "topologia F2F" per restringere le connessioni solo agli utenti di fiducia. Con questa opzione gli amici degli utenti amici (e così via) possono a loro volta interagire e scambiare file direttamente con l'utente, ma mai utilizzando il suo indirizzo IP.

URI[modifica | modifica sorgente]

Exquisite-kfind.png Per approfondire, vedi GNUnet (protocollo).

GNUnet utilizza un Uniform Resource Identifier attualmente non approvato dallo IANA, la cui forma è cambiata diverse volte durante la storia del progetto. La notazione a cui si fa riferimento qui è quella adottata ufficialmente a partire dalla versione 0.7.0.

Gli URI del protocollo GNUnet consistono principalmente in due sezioni: il modulo e l'identificatore del modulo (id). Un tipico URI GNUnet presenta la seguente struttura gnunet://modulo/identificatore, dove modulo è il nome del modulo e identificatore è la stringa specifica del modulo.

Il modulo ECRS[modifica | modifica sorgente]

I file condivisi tramite il protocollo GNUnet sono codificati in ECRS (An Encoding for Censorship-Resistant Sharing). L'identificatore del modulo ecrs consiste in una delle seguenti istruzioni: chk, sks, ksk o loc seguita da uno slash e da un valore specifico per ciascuna categoria.

  • chk identifica file, tipicamente: gnunet://ecrs/chk/[file hash, utilizzando 0-9A-V].[query hash, utilizzando 0-9A-V].[dimensione in byte]
  • sks identifica file all'interno dei namespaces, tipicamente: gnunet://ecrs/sks/NAMESPACE/IDENTIFICATORE
  • ksk identifica richieste di ricerca, tipicamente: gnunet://ecrs/ksk/KEYWORD[+KEYWORD]*
  • loc identifica un dato su una specifica macchina, tipicamente: gnunet://ecrs/loc/PEER/RICHIESTA.TIPO.KEYWORD.DIMENSIONE

Esempi[modifica | modifica sorgente]

Un tipico URI di file-sharing per GNUnet che punta a una specifica copia del testo della licenza GPL:

gnunet://ecrs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VH\
ORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3L\
KS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC\
6MVDL1K8GFKVBN69Q6T307U6O.17992

Un'altra tipologia di URI di file-sharing per GNUnet che punta più genericamente a tutti i risultati della ricerca della parola chiave "gpl":

gnunet://ecrs/ksk/gpl

GNU Name System[modifica | modifica sorgente]

GNUnet include un'implementazione di GNS (GNU Name System), un sostituto decentrato e resistente alla censura dell'attuale DNS. In GNS, ogni utente gestisce autonomamente e arbitrariamente la propria zona principale che verrà poi mappata nello spazio comune dei nomi DNS residenti sotto il dominio di primo livello .gnu. Gli utenti possono anche delegare sottodomini a zone gestite da altri utenti. La ricerca dei sottodomini gestiti da altri utenti viene eseguita utilizzando il modulo DHT di GNUnet.

Il problema principale di questo approccio è che non è possibile garantire l'univocità dei nomi a livello globale, il che richiede l'uso di proxy o altre soluzioni affini per soddisfare le molte esigenze delle vecchie applicazioni create per funzionare sotto DNS e non sotto GNS.

Per quanto riguarda gli altri domini di primo livello già esistenti (.com, .org, .it, etc.) GNS garantisce le stesse identiche funzionalità dell'attuale DNS.

Social API[modifica | modifica sorgente]

Nei primi giorni di settembre del 2013 Gabor X Toth pubblicò una tesi con la quale presentava il progetto di un servizio di messaggistica sociale per il framework peer-to-peer GNUnet in grado di offrire scalabilità, estensibilità e comunicazione cifrata end-to-end.[10] La scalabilità sarebbe stata ottenuta per mezzo della consegna multicast dei messaggi, mentre l'uso di PSYC (Protocol for SYnchronous Communication), che fornisce una chiamata di procedura remota dalla sintassi estensibile e che può evolvere nel tempo senza la necessità di dover aggiornare il software su tutti i nodi nella rete, avrebbe garantito forte estensibilità. Un'altra caratteristica chiave fornita dall'integrazione col framework PSYC sarebbero stati i canali multicast con le informazioni sullo stato, utilizzati per memorizzare, ad esempio, i profili utente. La comunicazione criptata end-to-end sarebbe stata garantita dal servizio mesh di GNUnet stesso, sul quale si sarebbero basati i canali multicast. Gli utenti e i luoghi sociali nel sistema avrebbero avuto identità criptata – identificati cioè dalla loro chiave pubblica – quindi il tutto sarebbe stato mappato in nomi umanamente memorizzabili per mezzo di GNS (GNU Name System), dove ogni pseudonimo possiede una zona che punta ai propri luoghi. Questo modulo trasformerebbe il framework GNUnet in una piattaforma di social networking decentralizzata, completa e fortemente anonima.

Chat[modifica | modifica sorgente]

Le ultime versioni del framework implementano anche un modulo sperimentale per la chat.[11]

Note[modifica | modifica sorgente]

  1. ^ (EN) GNUnet comparato ad altre applicazioni di file-sharing
  2. ^ (EN) GNUnet - ArchWiki
  3. ^ (EN) FreeBSD.net: gnunet
  4. ^ (EN) Build instructions for Microsoft Windows Platforms - GNUNet
  5. ^ (EN) Build instructions for Microsoft Windows Platforms - GNUNet
  6. ^ (EN) Video: The GNU Name System and the Future of Social Networking with GNUnet [ podcast | slides ]
  7. ^ (EN) Developer Handbook
  8. ^ (EN) GNUnet C Tutorial
  9. ^ (EN) GNUnet Philosophy
  10. ^ (EN) Gabor X Toth, Design of a Social Messaging System Using Stateful Multicast, Università di Amsterdam, 2013.
  11. ^ (EN) Polled GNUnet Chat

Voci correlate[modifica | modifica sorgente]

Collegamenti esterni[modifica | modifica sorgente]