@freenetlogo.png Cos'è Freenet? Freenet: • Rete peer-to-peer decentralizzata • Protocollo di rete Perchè Freenet? • Rispettare la libertà di espressione • Resistere alla censura • Proteggere l'anonimato # --- cenni storici, decidere se tenere tutto o tagliare Cenni Storici • Ideata da Ian Clarke nel 1999 • Fondazione nel 2001, paper di Clarke • Nel paper, le basi di Freenet Anonimato → Decentralizzazione Idea: • Dividere i dati in blocchi • Cifrarli • Distribuirli a tutti nodi della rete Risultato: • Nodi formano una cache distribuita • Impossibile il client-server Dal 2001: sviluppo continuo • Cross-Platform • Implementazione in Java • Necessita solo di una JVM 2008: Freenet 0.7 • Riscrittura estensiva • Opennet • Darknet # espandere il punto su TCP, magari togliere da qui e parlarne alla fine • Supporta TCP e UDP Stato attuale: • FProxy: interfaccia web • Supporto a OpenJDK # --- Fine cenni storici, inizio architettura Architettura Freenet → Rete di nodi Tutti i nodi sono uguali • No gerarchie • No central points of failure Contenuti: associati a chiavi → Key Based Routing Storage: condiviso in rete → Decentralized Storage Comunicazione: solo con nodi vicini → Small World Network # --- KBR Key Based Routing Tre tipi di chiavi: • KSK (Keyword Signed Key) • SSK (Subspace Signed Key) • CHK (Content Hash Key) Le chiavi sono ottenute applicando hash functions (DSA, SHA256) KSK non più utilizzata (poco sicura) SSK (DSA): • Chiave asimmetrica (Pub/Priv) • Indentifica un namespace Un namespace → Un utente Files associati a: • Stringa descrittiva • Namespace dell'uploader SSK: Sequenza di cifratura 1. Hash (pubkey) 2. Hash (descrizione) 3. XOR tra i due hash, 4. Hash (result) 5. Firma del file (chiave privata) → Risultato: File Key CHK (SHA256): • Hash diretto del file • Chiave pseudo-unica • Utili per file statici (pdf, mp3, ...) Upload di Files Un utente rende pubbliche: • Stringa descrittiva • Public namespace key File caricati → Immutabili Update tramite indirezione: → Sia CHK che SSK Indirezione: • File inserito sotto CHK • CHK salvata in un file indiretto • File indiretto inserito sotto SSK Indirezione: Ottenere un file Il file viene ottenuto in due step: 1. SSK → CHK 2. CHK → File Routing Routing Table: (Forwarding Table) • Salvata in ogni nodo • Associa chiavi e nodi • Permette routing dinamico Richieste Una richiesta e' formata da: • Hops-To-Live (HTL) • ID pseudo-unico, casuale Passaggio delle richieste: catena di Proxy Requests Ogni nodo decide dove indirizzare la richiesta (simile a IP) Invio di una richiesta: (utente) 1. Ottieni File Key 2. Invia richiesta al nodo Ricezione di una richiesta: (nodo) 1. File presente in storage? Si: ritorna risultato all'upstream No: forward della richiesta Request Forwarding • Richiesta mandata al nodo piu' vicino a quello cercato Vicinanza: • Distanza lessicografica dalla File Key cercata @./friends-nodes.png Nodo piu' vicino → Nodo contenente la chiave piu' vicina a quella cercata Risultato di una richiesta: • Data not found / HTL expired → failure • Data found → success → data cached (per ogni nodo) Il risultato e' restituito lungo la catena di nodi che ha mandato la richiesta (Upstream) @./requestseq.png # -------------------------- Routing Adattivo Analisi: Routing Adattivo Routing Adattivo: • Richieste per chiavi vicine mandate verso stessi nodi Routing Adattivo: • Replica trasparente di dati piu' richiesti Routing adattivo: • Favorisce i nodi che rispondono con successo a piu' richieste, guadagnando entry nella Forwarding Table Routing adattivo: • Si creano link diretti alle sorgenti dei dati # ----------------------- DDS Decentralized Data Storage Ogni nodo condivide spazio locale Lo spazio condiviso e' dedicato esclusivamente al data storage Local storage → LRU Cache (Least Recently Used) LRU Cache: • Ordina i dati salvati in maniera decrescente in base al ricevimento delle richieste Significa: • I file piu' richiesti in cima alla lista Problema: Come gestire una cache piena? Soluzione: • Drop-Tail approach Drop-Tail: • Files meno richiesti eliminati dallo storage, • Entry corrispondenti rimangono nella Forwarding Table Mantenere le entry → Evitare la perdita di file poco richiesti (Probabilita' che vengano salvati in cache di nuovo) Vantaggi: • Performance migliora nel tempo • Update di files trasparente File Update: • Files "vecchi" rimpiazzati da files aggiornati in automatico • Files "vecchi" ma ancora in uso sono preservati dalle richieste Data Encryption Necessita': • Operatori di nodi non devono conoscere i dati salvati Soluzione: File Encryption File Encryption: • Utilizza chiavi (SSK, CHK) • Utente puo' conoscere solo la File Key (Invertire l'hash e' complesso) • Dictionary attack puo' avere successo ma e' estremamente costoso Freenet: Protocollo Protocollo: • P2P adattivo (rete di nodi) • Packet-oriented • Self-contained messages Ogni messaggio contiene un ID della transazione → Insert, request sono tracciabili Trasporto: Grande flessibilita', principalmente: • TCP • UDP I nodi che utilizzano connessioni persistenti (TCP) possono mandare piu' di un messaggio sulla stessa connessione Naming Prefix: Utilizza ARK (Address Resolution Keys) • Chiavi SSK aggiornate all'indirizzo corrente del nodo (semplifica la mobilita') # ----------------------- SWN Small World Network Il mondo è piccolo @./darknet_peers.png ?