# Freenet

Hyphanet (Freenet sino al 2023) è una rete decentralizzata, creata per resistere alla censura, per permettere la pubblicazione e la fruizione di qualsiasi tipo di informazione.
Freenet è software libero distribuito con GNU General Public License; essendo scritto in Java può funzionare su Microsoft Windows, GNU/Linux, macOS e su tutti i sistemi operativi dotati di Java Virtual Machine.

## Storia

Freenet è un'implementazione del sistema descritto da Ian Clarke nel 1999 all'interno del documento Freenet: A Distributed Anonymous Information Storage and Retrieval System. La versione 0.1 venne pubblicata nel marzo del 2000.
Ad oggi, conoscere con esattezza l'impatto di Freenet all'interno di nazioni che operano una forte censura sui cittadini è difficile per via del funzionamento interno di Freenet. In Cina il gruppo Freenet-China ha tradotto Freenet in cinese e lo sta distribuendo tramite CD e dischetti.

## Caratteristiche

Per sua natura, Freenet è una rete che elimina per chiunque la possibilità di imporre la sua scala di valore sugli altri; in pratica, a nessuno è permesso di decidere cosa sia accettabile. La tolleranza verso le opinioni altrui è fortemente incoraggiata, agli utenti è richiesto di non prestare attenzione ai contenuti che non approvano.
Per funzionare utilizza le risorse informatiche dei suoi utenti (banda passante, spazio su disco rigido). Freenet è stata costruita pensando ad anonimato e sicurezza, non alla velocità di trasmissione. Questa caratteristica la rende poco indicata per lo scambio di file di grosse dimensioni (come filmati e file audio). Inoltre all'interno di Freenet è possibile utilizzare servizi simili al Web e alle BBS.
Freenet è da sempre al centro di discussioni e critiche. La maggior parte di queste contesta il fatto che la stessa tecnologia che permette ai suoi utenti di comunicare le proprie idee senza che si possa risalire all'identità di chi le ha pubblicate o di chi le ha lette, può anche essere usata per pubblicare materiale illecito. In ogni caso Freenet è stata progettata per resistere alle deformazioni: i contenuti che non vengono letti per un lungo periodo scadono e scompaiono.

## Specifiche tecniche

La rete Freenet è progettata per essere resistente; per questo i processi di funzionamento interni lavorano tutti coperti da anonimato e sono decentralizzati su tutta la rete. Il sistema non ha server centrali e non è soggetto a controlli né da privati né da organizzazioni. Nemmeno l'ideatore di Freenet ha alcun controllo sul sistema. La rete è stata progettata in modo tale che le informazioni vengano crittografate e replicate su molti diversi nodi in continuo cambiamento in tutto il mondo. È estremamente difficile per un attaccante capire quali nodi stiano rendendo disponibile un determinato file in un certo momento e gli stessi tenutari dei nodi non sanno mai cosa stanno distribuendo. Questo li mette al sicuro da eventuali reati di detenzione.
Lo scopo di Freenet è immagazzinare documenti e permetterne la lettura attraverso indirizzi univoci (altrimenti detti "chiavi") in modo simile a quanto accade sul web tramite il protocollo HTTP. La rete è costituita da un gran numero di nodi che si scambiano informazioni: ogni nodo comunica con i limitrofi attraverso il protocollo di Freenet; non esiste una divisione tra client e server su Freenet: tutti i partecipanti agiscono in entrambi i modi, permettendo sia di effettuare richieste di informazioni ad altri nodi sia di inviare documenti in risposta alle richieste altrui.
Il protocollo di Freenet è stato progettato per essere usato su reti topograficamente complesse, in modo simile all'Internet Protocol. Ogni nodo conosce soltanto i nodi che può raggiungere direttamente (il suo "vicinato") e ogni nuovo nodo può essere "il vicino" di un altro, perché non esiste una struttura gerarchica. Ogni documento (o altri messaggi, come le richieste di documenti) viene trasmesso da nodo a nodo fino a raggiungere la destinazione; questi nodi non sanno se stanno trasmettendo verso chi ha effettuato la richiesta o semplicemente verso un altro nodo intermedio, né se il nodo precedente è la sorgente del documento. Tutto questo è stato progettato intenzionalmente, per aumentare il grado di anonimato sia di chi pubblichi sia di chi legga. Ogni nodo mantiene una tabella dove associa i documenti immagazzinati con le chiavi di ricerca, per poter gestire la cache ed una tabella con le informazioni sui nodi limitrofi, per poter gestire il routing.
La richiesta di documenti viene indirizzata sempre verso il nodo che può rispondere più in fretta, per diminuire i ritardi di trasmissione. Invece, l'inserimento di documenti segue un metodo diverso da quello classico: prima di inviare il documento il nodo deve assicurarsi di potergli assegnare una chiave libera, quindi prima cerca una chiave e dopo vi assegna il documento, immettendolo in rete.
Inizialmente, ogni nodo non ha informazioni sulle caratteristiche dei suoi vicini. Questo significa che l'indirizzamento delle richieste sarà in gran parte casuale; dato che nodi diversi hanno diversi tipi di regole casuali, invieranno richieste di chiavi uguali verso nodi diversi. Quindi i dati presenti in Freenet poco dopo la partenza saranno distribuiti in modo casuale. Con il passare del tempo e l'inserimento da parte di uno stesso nodo di più documenti, le informazioni cominceranno ad organizzarsi autonomamente. Il risultato è che la rete si auto organizza all'interno di una struttura distribuita dove i nodi tendono a organizzare i dati a seconda delle chiavi. Con ogni probabilità ogni documento verrà replicato molte volte all'interno della rete, a seconda di quanto viene richiesto.
Freenet usa due tipi di chiavi: le Content Hash Key (CHK) e le Signed Subspace Key (SSK).
Una chiave CHK è un hash SHA-1 del documento: confrontando chiave e documento, il nodo può controllare se la trasmissione è avvenuta correttamente. Questo tipo di chiave viene usato per le trasmissioni di dati e per la loro lettura. Un nodo malevolo che volesse modificare i dati all'interno di un documento verrebbe immediatamente scoperto dal nodo successivo, grazie al controllo della chiave.
Le chiavi SSK sono basate sul concetto di crittografia asimmetrica, in particolare sul sistema Digital Signature Algorithm (DSA). I documenti inseriti con questo tipo di chiave vengono firmati dagli autori, in modo che tutti possano verificare l'integrità del documento che leggono. Le chiavi possono essere usate per creare uno pseudonimo all'interno di Freenet mantenendo l'anonimato, e permettono l'aggiornamento dei documenti solo da parte di chi li ha inseriti. Le chiavi KSK, sottocategoria delle SSK, vengono generate a partire da una frase chiave: i documenti segnati con questo tipo di chiave possono essere ottenuti e decriptati se e solo se si è a conoscenza della frase chiave.