|
FreeNet . Introduzione ed
architettura di rete
Introduzione
FreeNet è una rete peer-to-peer decisamente
diversa da tante altre e divesa perfino dalla rete di MUTE
di cui condivide l'alto grado di riservatezza ed anonimato garantito
agli utenti. La si può definire come un sistema distribuito
per la memorizzazione di informazioni pensata per proteggere
la riservatezza degli utenti e preservare la sopravvivenza della rete
stessa.
Funziona come una rete punto a punto
auto-gestita che mette in condivisione delle spazio disco tra
centinaia di migliaia di computer per creare un file system
virtuale collaborativo. Questa è una prima grande differenza
con gli altri client p2p che conosciamo. Ad esempio quando decidamo in
FreeNet di condividere sulla rete un file video di 300 Megabytes non lo
condividiamo conservandolo sul nostro hard disk ma FreeNet lo
dividerà in tanti piccoli pezzettini che invierà sulla rete
distribuendoli secondo algoritmi intelligenti sullo spazio disco di
centinaia di altri nodi. Lo spazio disco che noi mettiamo a
disposizione della rete viene utilizzato per la memorizzazione di altri
file che la rete stessa sceglie a seconda della necessità e di cui noi
non sciamo l'identità perché tali file vengono memorizzati
crittografati. Più avanti in questo articolo spiegheremo in dettaglio
tali meccanismi.
Al fine di aumentare la robustezza della rete
ed eliminarne i punti deboli più scontati FreeNet impiega
un'architettura completamente decentralizzata ed implementa
delle strategie per proteggere l'integrità dei dati e prevenire falle
nella privacy. Il sistema è anche capace di replicare o
cancellare files autonomamente sulla rete al file di
massimizzare l'efficienza di utilizzo dello spazio disco complessivo
disponibile in risposta alla domanda.
Nel progettare FreeNet ci si è concentrati sui
seguenti punti :
-
conservare l'anonimato per chi produce
dell'informazione ( condivide un'articolo, un file etc..), per chi la
richiede e per chi la trasporta sulla rete.
-
resistenza alla censura
-
alta disponibilità ed affidabilità
dell'informazione attraverso un meccanismo decentralizzato
-
sistema efficiente e scalabile, memorizzazione
ed instradamento adattativo dei dati
Proteggere la privacy per la creazione ed il
download dei files significa poco se non si proteggono i files stessi -
in particolare se non si evita che chi trasporta i files sulla rete non
sia soggetto ad attacchi o investigazioni di ogni genere. Per questo
motivo FreeNet rende difficilissimo capire esattamente quale computer
trasporta un determinato file. Il fatto che non si conosca dove sia
memorizzato effettivamente un dato file e un meccanismo di replicazione
ridondante dei dati rende estremamente difficile per i censori
distruggere files sulla rete.
FreeNet tuttavia non garantisce una
memorizzazioen permanente dei dati sulla rete. Poiché lo
spazio disco è finito esiste un compromesso tra pubblicare nuovi files
e conservare quelli vecchi. Per evitare che dati inutili
occupino tutto lo spazio provocando l'automatica cancellazione dei dati
esistenti FreeNet implementa una politica di memorizzazione
probabilistica. Ovviamente gli autori sperano che FreeNet attragga
sufficienti risorse da parte dei partecipanti in modo da conservare
indefinitamente la maggior parte dei files.
^Top^
Architettura di rete
Ogni utente di FreeNet è un nodo che offre
alla rete una desiderata quantità di spazio disco. Per aggiungere un
nuovo file alla rete l'utente invia un messaggio di inserimento
contenente il file ed il suo identificatore indipendente dalla
locazione in cui tale file verrà memorizzato. Questo identificatore si
chiama GUID ( Globally Unique Identifier ). Il file
verrà memorizzato su un insieme di nodi. Durante tutto il tempo in cui
il file resterà sulla rete ( ovvero fino a quando non verrà
automaticamente cancellato perché nessuno lo richiede più )
potrà migrare su un altro insieme di nodi oppure essere duplicato. Per
scaricare quel file un altro utente dovrà inviare alla rete un mesaggio
di download contenente il GUID del file. Quando la richiesta raggiunge
uno dei nodi dove è memorizzato quel file ( o parte di quel file ) i
dati vengono inviati indietro lungo la catena verso chi aveva inoltrato
la richiesta.
^Top^
Le chiavi GUID
Le chiavi GUID vengono calcolate
usando l'algoritmo sicuro SHA-1. La rete impiega due tipi
principali di chiavi : il content-hash key ( CHK )
usato per la memorizzazione dei dati ed il signed-subspace
key ( SSK ) pensato per un uso di più alto livello.
Content-hash
keys - E' la chiave che viene usata per la
memorizzazione dei dati a basso livello e viene generata calcolando un
codice hash in base ai contenuti. Questo processo fornisce ad ogni file
un identificatore assolutamente unico ( collisioni SHA-1 vengono
considerate quasi impossibili ) che può essere verificato molto
velocemente. I CHK fanno si che differenti copie dello stesso file
insererite da persone diverse sulla rete vengano automaticametne unite
perché ogni utente calcolerà la stessa chiave CHK per quel file.
Signed-subspace
keys - La signed-subspace key ( SSK ) crea uno
spazio per il nome del file che tutti possono leggere ma che solo il
proprietario originario di quel file ( ovvero che lo ha immesso sulla
rete per la prima volta ) può modificare. Supponiamo di voler dare un
nome ad un documentario sulla guerra in Vietnam. FreeNet creerà prima
una coppia di chiavi pubblica-privata che identifichi quel file. A
questo punto per inserire il file sulla rete occorrerà assegnargli un
testo descrittivo ovvero un nome. Quindi verrà creata la chiave SSK
estrapolandola con un algoritmo di hash dalla metà chiave pubblica e
dal nome che si è scelto di dare al file ...poi si concatenano queste
le due stringhe e si genera un nuovo hash. Firmare il file con la
chiave privata consente di verificare l'integrità del file poiché ogni
client che viene in possesso della SSK può verificarne la firma prima
di accettare il download.
-
Per scaricare un file quindi occorre avere la
chiave pubblica e la stringa descrittiva attribuita al file ( nome ).
Con queste due informazioni è possibile ricreare la chiave SSK.
-
Per aggiornare un file invece occorre anche la
chiave privata per generare una firma valida. Questo assicura che solo
il proprietario di quel file potrà modificarlo successivamente al
rilascio sulla rete.
Solitamente le chiavi SSK vengono utilizzate
per memorizzare files indiretti che contengono puntatori a chiavi CHK (
che identificano fisicamente il file sulla rete ) piuttosto che per
memorizzare direttamente files di dati. I Files indiretti combinano la
facilità di consultazione di cui necessita l'uomo ( attraverso il nome
file ) con la veloce verifica dell'integrità dei contenuti dei files
resa possibile dalla chiave CHK. Consentono inoltre di aggiornare i
dati conservando l'identità referenziale su FreeNet.
I files indiretti possono anche essere
usati per dividere i file grandi in tante parti più piccole
attribuendo ad ogni parte un CHK diverso, quindi creando un file
indiretto che punta a tutte le parti.
^Top^
Messaggi e Privacy
Freenet è stata progettata sin dall'inizio per
affrontare con successo attacchi ostili dall'interno e dall'esterno
volti a minare la privacy dei suoi utenti. Perciò rende
intenzionalmente complesso il modo con cui i vari nodi direzionano i
messaggi tra di loro e rende l'instradamento dei messaggi dinamico e
nascosto.
Come è facile immaginare queste considerazioni
hanno avuto l'effetto opposto di ostacolare l'implementazione di alcune
caratteristiche nell'instradamento dei messaggi che avrebbero potuto
migliorare il sistema.
In Freenet i messaggi invece di
viaggiare direttamente dal mittente al destinatario, viaggiano
nodo-a-nodo attraverso delle catene appunto di nodi. In tali
catene ogni collegamento è criptato, finché il messaggio raggiunge il
destinatario.
Poiché ogni nodo della catena conosce solo i
suoi vicini, i punti terminali di questca catena ( mittente e
destinatario ) potrebbero trovarsi ovunque tra migliaia di nodi, che
scambiano in continuazione messaggi indecifrabili. Nemmeno il nodo
immediatamente vicino al mittente può sapere e stabilire se il suo
predecessore è stato davvero lui a generare quel messaggio oppure sta
semplicemente facendolo transitare sulla rete da un nodo all'altro
lungo la catena di nodi. Allo stesso modo il nodo che precede il
destinatario non può dire ne stabilire se il suo successore sarà
proprio il destinatario o un semplice nodo che continuerà a far
transitare il messaggio.
^Top^
Instradamento
L'instradamento delle richieste verso i dati è
la parte più importante del sistema Freenet. Il metodo più semplice di
instradamento, usato da servizi come Napster, consiste nel mantenere un
indice centrale di files, cosi che gli utenti possano inviare le
richieste direttamente a chi possiede i files che cercano.
Sfortunatamente la centralizzazione crea un unico grande punto debole
che è facile da attaccare.
Per esempio supponiamo di volere
telefonare a Michael Jordan, il modo più semplice per avere il suo
numero di telefono potrebbe essere quello di consultare l'elenco
telefonico. Tuttavia poiché tale servizio è un sistema
centralizzato , l'accesso al numero di telefono che desideri potrebbe
essere facilmente bloccato se Jordan o qualcun altro decidesse di
rimuovere il suo numero dall'elenco o se la Telecom decidesse di non
distribuire più tale elenco telefonico.
I Sistemi come Gnutella inviano le richieste
ad un insieme di nodi connessi vicini entro un certo raggio. Usando
questo metodo tu chiederesti ai tuoi amici se conoscono il numero di
Jordan, faresti chiedere agli amici dei tuoi amici e così via. Dopo
pochi passi migliaia di persone staranno cercando il numero di Jordan.
Questo processo spreca molte risorse e non è scalabile.
Freenet evita entrambi questi problemi. Ogni
nodo invia le richieste al nodo che pensa sia più vicino all'obiettivo.
Potresti iniziare a cercare Jordan chiedendo ad un amico che una volta
giocava a basketball, per esempio, il quale potrebbe a sua volta
passare la voce ad un allenatore, il quale potrebbe chiedere ad un
talent scout, che potrebbe chiedere all'agente di Jordan che infine
potrebbe metterti in contatto con l'uomo che cerchi.
^Top^
Richiesta
dei file
Ogni nodo mantiene un tabella di
instradamento ( routing table ) che elenca gli indirizzi
degli altri nodi e le chiavi GUID che pensa tali nodi possano avere.
Quando un nodo riceve una richiesta, analizza per prima cosa il suo
spazio disco per vedere se eventualmente trova li il file. Se lo trova
allora lo invia indietro al nodo dal quale a ricevuto la richiesta
affiancandoci un TAG che lo identifica come possessore di quell file.
Altrimenti il nodo invia la richiesta al nodo che nella sua tabella ha
la chiave più simile a quella cercata. Se la richiesta ha successo ogni
nodo nella catena lascia passare il file indietro verso il
destinatario. Inoltre in dipendenza dalla sua distanza dal mittente
ogni nodo potrebbe anche conservare sul proprio spazio una copia di
quel file.
Per nascondere l'identità del possessore dei
dati i nodi occasionalmente alterano i messaggi di risposta, fingendo
di essere loro i possessori del file. Con richieste successive si
riuscirà di nuovo a trovare i dati perché i nodi conservano la vera
identità del possessore del file nella loro tabella di instradamento e
quindi si riuscirà a indirizzare la richiesta nella direzione giusta.
Le tabelle di instradamento non vengono mai rivelate agli altri nodi.
Se un nodo ( mittente ) invia la
richiesta ad un altro nodo (destinatario ) che è già nella catena il
messaggio viene inviato indietro il messaggio ed il nodo
mittente seleziona un altro nodo cui inviare il messaggio in base alla
chiave più simile a quella richiesta successiva nella sua tabella di
instradamento. Se un nodo esaurisce tutti i candidati nella tabella a
cui chiedere restituisce un messaggio di fallimento al nodo precedente
nella catena, che quindi prova con la sua seconda possibilità nella
tabella di instradamento..e così via.

In figura è rappresentata una tipica
sequenza di ricerca. L'utente avvia la ricerca al nodo A e la spedisce
a B, che la spedisce a C. Il nodo C non è capace di contattare altri
nodi e risponde a B con un messaggio 'richiesta fallita' . Il nodo B
allora prova con la sua seconda scelta, E, che invia il messaggio al
nodo F. il nodo F a sua volta invia il messaggio a B che rileva un loop
( ovvero arrivo di un messaggio di richiesta ad un nodo dal quale quel
messaggio è già passato ) e rispedisce il messaggio dietro. Incapace di
contattere altri nodi, il nodo F rispedisce ancora indietro il
messaggio ad E, che spedisce il messaggio di richiesta alla sua seconda
scelta nella tabella di instradamaneto, D. D trova il file sul suo hard
disk. A questo punto D invia il file dietro attraverso E quindi B fino
a farlo giungere al nodo A dal quale era partita la richiesta. Lungo il
percorso E,B ed A possono anche conservare una copia nel proprio spazio
disco di questo file.
Con questo meccanismo una ricerca successiva
dello stesso files tenderà a seguire lo stesso percorso ed una copia
del file salvata localmente potrà soddisfare la richiesta prima di
quella precedente. Richieste successive di chiavi simili salteranno da
un nodo ad un altro fino ad arrivare ad uno che in passato ha visto
passare dei dati simili. I nodi che rispondono in maniera positiva alle
richieste saranno aggiunti a più tabelle di instradamento e
quindi saranno contattati più spesso degli altri.
^Top^
Crittografia dei dati
Per ragioni politiche o legali chi mantiene un
nodo su Freenet potrebbe non voler conoscere i contenuti del suo spazio
disco. Freenet infatti cripta tutti i dati che sono memorizzati
localmente e che viaggiano sulla rete. Nessuno può effettivamente
sapere cosa il nostro nodo sta condividendo ed ha memorizzato nel data
store. Solo gli utenti che medante ricerca e download richiedono di
scaricare quei determinati files potranno leggerli ed usufruirne
decriptandoli ( ovviamente non potranno mai sapere da chi li hanno
presi ). Dal punto di vista di un nodo di Freenet il 'data store'
consiste solo di GUIDs casuali collegate a dati incomprensibili.
^Top^
Connessione alla rete
Per connettersi alla rete un nuovo nodo genera
per prima cosa un coppia di chiavi pubblica-privata per se stesso.
Questa coppia serve per identificare logicamente quel nodo e viene
usata per verificare l'indirizzo fisico di riferimento.
A questo punto il nodo invia un messaggio di
annuncio comprensivo della chiave pubblica ed il suo reale indirizzo
fisico ad un nodo esistente che può individuare in diversi modi come ad
esempio attraverso gli elenchi di nodi presenti sul WEB. Il nodo
ricevente l'annuncio si annota le informazioni identificative del nuovo
nodo ed invia l'annuncio anche ad altri nodi scelti in maniera casuale
nella sua tabella di instradamento. L'annuncio si continua a propagare.
^Top^
Evoluzione dell'
instradamento
Man mano che vengono processate più richieste,
l'instradamento della rete dovrebbe diventare più performante. Le
tabelle di instradamento dei Nodi dovrebbero specializzarsi a gestire
gruppi di chiavi simili poiché ogni nodo riceverà soprattutto richieste
di chiavi che sono simili alle chiavi alle quali è associato nelle
tabelle di instradamento degli altri nodi. Quando quelle richiete hanno
successo i nodi imparano qualcosa su nodi precedentemente sconosciuti
che possono rispondere positivamente a determinate chiavi e creano per
loro nuovi campi nelle tabelle di instradamento.
Anche lo spazio disco dei nodi dovrebbe
specializzarsi a memorizzare gruppi di files con chiavi simili. poiché
l'inserimento sulla rete segue lo stesso meccanismo del download,
chiavi simili tendono a raggrupparsi nei vari nodi lungo il percorso.
L'effetto combinato del raggruppamento nelle
tavole di routing e dei data store dovrebbe migliorare l'efficacia di
richieste future in un ciclo che si corrobora automaticamente.
^Top^
Gestione dello spazio disco
Per incoraggiare la partecipazione, Freenet
non impone nessun limite circa la quantità di dati che è possibile
inserire sulla rete. Poiché però lo spazio disco a disposizione è
finito il sistema di tanto in tanto deve decidere quali files mantenere
e quali no. Attualmente nell'allocare lo spazio disco si da priorità ai
file più popolari ovvero quelli che vengono richiesti più
frequentemente. Ogni nodo ordina i file nel proprio spazio
disco in base alla data dell'ultima richiesta, e quando arriva un nuovo
file che non può essere inserito perché non c'è più spazio disponibile,
il nodo cancella i file meno richiesti per fare spazio.
Le informazioni nelle tabelle di instradamento
vengono mantenute anche dopo la cencellazine dei files. Il nodo così
potrà rispondere a successive richieste per quel fie che ha cancellato
usando la sua tabella di instradamento per indirizzare la
richiesta verso il nodo che ha distribuito per primo quel file e che
potrebbe essere in grando di servirne attualmente una copia.
La distribuzione dei files è perciò
determinata da due fattori dominanti : crescita delle domanda
e cancellazione files. Il meccanismo di routing
crea automaticamente più copie in un'area della rete dove un file viene
richiesto. Questo migliora il tempo di risposta ed evita il
sovraccarico che potrebbe verificarsi nel caso in cui ci fosse un
repentino ed imprevisto aumento nella popolarità di un file. I files
che non sono richiesti in un' altra regione della rete vengono
cancellati.
^Top^

|