HomePage .:.   Forum .:.

P2P Sicuro

ANts P2P
FreeNet
MUTE

P2P Classico

Azureus / Vuze
BitTorrent
Direct Connect
eDonkey2000
eMule

eMule Plus

IRC

Shareaza

SoulSeek
Tribler
 
Guide
Guide ed articoli

GrabIt

PeerGuardian 2
 

P2P Download

Software P2P

 

.: Siti Partners :.

WinMX Italia

P2PForum.it

eMule-italia.it

edonkey2000.it

aresgalaxy.it

limewire.it

Software per P2P

 

 

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.

  • Per eseguire un aggiornamento il proprietario di quel file ne inserisce prima una nuova versione a cui verrà attribuito un nuovo CHK proprio perché  il nuovo file è fisicamente diverso dal vecchio. Quindi aggiorna l'SSK in modo da farlo puntare alla nuova versione.

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^