GNUnet è un framework libero per le reti peer-to-peer. È stato progettato per offrire un protocollo peer-to-peer anonimo sicuro e la politica di sicurezza del suo protocollo prevede un livello di sicurezza denominato "paranoico".[3]

GNUnet
software
Logo
Logo
GNUnet con interfaccia grafica GTK+
GNUnet con interfaccia grafica GTK+
GNUnet con interfaccia grafica GTK+
GenerePeer-to-peer anonimo, Friend to Friend
SviluppatoreProgetto GNU
Data prima versione2001 novembre 05; 22 anni fa
Ultima versione0.21.1 (15 marzo 2024)
Ultima beta0.11.0pre66 (2018 giugno 06; 5 anni fa[1])
Sistema operativoufficiale: Sistemi operativi software liberi (GNU/Linux, FreeBSD, NetBSD, OpenBSD); non ufficiale: Altri sistemi operativi (OS X, Windows)
LinguaggioC
ToolkitGTK
LicenzaGNU AGPLv3 o successiva[2]
(licenza libera)
Linguaspagnolo, inglese, russo, tedesco, francese
Sito webgnunet.org/

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[4], BSD[5], macOS[6], Solaris e Microsoft Windows[7]. 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

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.[8] 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.[9][10] 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.[11]

Anonimato modifica

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

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

  Lo stesso argomento in dettaglio: 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

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

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

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

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.[12] 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

Le ultime versioni del framework implementano anche un modulo sperimentale per la chat.[13] Parallelamente, i programmatori di PSYC (il framework su cui si basa anche il modulo di notifica multiprotocollo di Wikipedia) hanno annunciato di voler fondere il loro framework all'interno della rete GNUNet,[14] offrendo così al protocollo GNUnet uno dei sistemi di messaggistica più complessi e strutturati in circolazione.

Note modifica

  1. ^ Sito web di download GNUnet, su gnunet.org. URL consultato il 16 giugno 2018 (archiviato dall'url originale il 12 giugno 2018).
  2. ^ license notice placed at the top in one of the source files of the project's repository, probably in each of its source files, su gnunet.org. URL consultato l'8 giugno 2018.
    «GNUnet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.»
  3. ^ (EN) GNUnet comparato ad altre applicazioni di file-sharing Archiviato il 22 ottobre 2012 in Internet Archive.
  4. ^ (EN) GNUnet - ArchWiki
  5. ^ (EN) FreeBSD.net: gnunet Archiviato il 14 luglio 2014 in Internet Archive.
  6. ^ (EN) Build instructions for Microsoft Windows Platforms - GNUNet Archiviato il 14 luglio 2014 in Internet Archive.
  7. ^ (EN) Build instructions for Microsoft Windows Platforms - GNUNet Archiviato il 14 luglio 2014 in Internet Archive.
  8. ^ (EN) Video: The GNU Name System and the Future of Social Networking with GNUnet Archiviato il 14 luglio 2014 in Internet Archive. [ podcast Archiviato il 14 luglio 2014 in Internet Archive. | slides Archiviato il 14 luglio 2014 in Internet Archive. ]
  9. ^ (EN) Developer Handbook Archiviato il 30 aprile 2013 in Internet Archive.
  10. ^ (EN) GNUnet C Tutorial Archiviato il 1º maggio 2013 in Internet Archive.
  11. ^ (EN) GNUnet Philosophy
  12. ^ (EN) Gabor X Toth, Design of a Social Messaging System Using Stateful Multicast, Università di Amsterdam, 2013. URL consultato il 18 febbraio 2014 (archiviato dall'url originale il 22 febbraio 2014).
  13. ^ (EN) Polled GNUnet Chat Archiviato il 12 marzo 2012 in Internet Archive.
  14. ^ (EN) PSYC2

Voci correlate modifica

Altri progetti modifica

Collegamenti esterni modifica