UniTO/anno2/YearI/FirstSem/CR/seminario/presentation/presMARP.md
Francesco Mecca 5e286062f8 MCAD 2019
2018-11-22 13:09:11 +01:00

471 lines
14 KiB
Markdown

<!--DIRECTIVES-->
<!--
$theme: gaia
-->
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/freenetlogo.png)
# Freenet
---
<!--page_number: true-->
<!--
template: invert
-->
## Cos'è Freenet?
Freenet è una **rete peer-to-peer decentralizzata**, progettata per:
* Resistere alla censura
* Proteggere l'**anonimato**
* Rispettare la libertà di espressione
---
## Cenni Storici
* Fondazione: **paper** di Ian Clarke, 2001
Il paper contiene le basi del protocollo Freenet, tuttora in sviluppo continuo.
Dal 2008 [**Freenet 0.7**] è divisa in **Opennet** e **Darknet**, supporta l'implementazione **open source** di JDK [**OpenJDK**] e supporta sia su TCP che su UDP a livello di trasporto.
---
## Punti Chiave
* Anonimato per **produttori e consumatori** di informazioni
* **Resistenza** a tentativi di terze parti di **negare accesso** ai contenuti
* Proteggere l' **anonimità dei dati salvati nei nodi**
* Implementare **archiviazione e routing** in maniera **dinamica** ed **efficiente**
* **Decentralizzare** tutte le funzioni della rete
---
<!--
template: default
-->
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/freenetlogo.png)
# Architettura
---
<!--
template: invert
-->
## Freenet = Rete di Nodi
Freenet è un network P2P **adattivo**, costituito da nodi che effettuano richieste ad altri nodi per salvare e ottenere **data files**.
* Tutti i nodi sono **uguali** e comunicano **solo con i nodi prossimi**
* Ogni nodo mantiene uno **spazio di archiviazione locale** che **condivide** con gli altri nodi
* I data files sono indicizzati da **chiavi indipendenti dalla localizzazione** *[location-independent keys]*
---
## Indirizzi
Gli indirizzi dei nodi sono composti da:
* Metodo di trasporto
* Identificatore di trasporto specifico *[IP + porta]*
Anonimato e modifica di indirizzi si ottengono con le **Address Resolution Keys** (o **Updatable Subspace Keys**), contenenti l'**indirizzo corrente** del nodo.
Le ARK permettono di superare alcuni firewalls, NAT e blocchi su IP.
USK@<...key...>/path/to/webpage
---
---
## Richieste
* Richiesta = **payload di un self-contained message**
* Richiesta = **Ricerca di una chiave**
corrispondente al data file da ottenere tra i nodi della rete. *[Key-Based Routing]*
La procedura di richiesta avviene come una
**catena di proxy requests** divisa in step.
Ogni nodo **decide dove indirizzare la richiesta** durante lo step successivo.
---
## Struttura di un messaggio
* **ID** pseudo-unico e **casuale**, che permette ai nodi di evitare i loop di richieste.
* Numero di **Hops-To-Live** *[HTL]*, simili al Time-To-Live di IP ma basati sul numero di hop. Servono ad **evitare catene di richieste infinite**.
* **Profondità**, incrementata ad ogni hop.
* **Payload** della richiesta / risposta.
Il processo di passaggio delle richieste continua finchè la richiesta non è soddisfatta o gli HTL si esauriscono.
---
## Struttura di un messaggio
![message](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/msg-structure.jpg)
---
<!--
template: default
-->
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/freenetlogo.png)
# Key-Based
# Routing
---
<!--
template: invert
-->
## Chiavi e Ricerche
In Freenet, i files sono identificati da **chiavi binarie**:
* **Keyword-Signed-Key** *[KSK]*
* **Signed-Subspace-Key** *[SSK]*
* **Content-Hash-Key** *[CHK]*
Le chiavi sono ottenute utilizzando funzioni di hash tra cui *DSA* e *SHA*.
---
## Keyword Signed Key
La chiave più basica utilizzata da Freenet, derivata da **una stringa di testo scelta dall'utente** al momento del **file upload** in rete.
La stringa è usata come input per ottenere una **coppia di chiavi asimmetriche**, di cui:
* La **pubblica** viene passata alla funzione di hash, ottenendo la **file key**
* La **privata** è utilizzata per firmare il file, provvedendo un **minimo controllo di integrità**.
---
### KSK
#### Analisi
* Un sistema simile è soggetto a **dictionary attacks** contro la chiave privata, dato che **ogni nodo può ottenere una lista di stringhe descrittive**.
Per questo il file è anche cifrato utilizzando la stringa descrittiva come chiave.
* Le chiavi KSK **non sono uniche**, per questo motivo **sono state abbandonate** in funzione delle SSK.
---
## Signed Subspace Key
Evoluzione di KSK.
* Abilita i **personal namespaces**, identificati da una **coppia di chiavi asimmetriche**
* Stringa descrittiva e chiave pubblica del namespace sono passate alla funzione di hash **indipendentemente**
* Sui due hash ottenuti: **bit-by-bit XOR** -> **file key**
* La chiave privata è utilizzata per firmare il file
---
![ssk](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/ssk.jpg)
---
### SSK
#### Analisi
* Migliora KSK in quanto **la file key è generata da una coppia di chiavi casuali**
Per ottenere un file, un nodo deve conoscere:
* Stringa descrittiva
* Public Subspace Key
In aggiunta, ogni utente ha un **namespace** unico e gestibile.
---
## Content Hask Key
Hash diretto del file, ottenendo una
**file key pseudo-unica**.
I file sono successivamente cifrati con una ***encryption key*** generata casualmente.
Per ottenere il file sono necessarie sia la file key che l'*encryption key*, che **non è mai salvata col file** ma solo pubblicata con la sua file key.
---
![chk](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/chk.jpg)
---
### Updatable Subspace Key
Le chiavi CHK sono utilizzate **in parallelo** con le SSK, per implementare l'**indirezione**:
* Inserire il file sotto la sua CHK
* Inserire la CHK in un **file indiretto** contenuto in una SSK
* La **file key** è ottenuta in due step.
Questo permette l'**update** dei files caricati, mantenendo la stessa SSK.
CHK + SSK = USK
---
<!--
template: default
-->
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/freenetlogo.png)
# Decentralized
# Data
# Storage
---
<!--
template: invert
-->
## Gestione dei dati salvati
**Ogni nodo della rete condivide spazio locale**.
* Gestito come una **cache LRU**
*[Least Recently Used cache]*
* Contiene **dati** e **routing table** del nodo
* L'utente **non ha accesso diretto** ai file contenuti nel suo spazio locale *[data encryption]*
* La quantità di spazio condiviso è configurabile dall'utente
---
## LRU Cache
La **Least Recently Used** cache ordina i dati contenuti in base all'**ordine temporale decrescente** di ricevimento delle **richieste**. *[insert,retrieve,update]*
Questo significa che:
* I files **più richiesti** sono in cima alla coda.
* Se la capacità non è sufficiente per contenere un nuovo file, i file usati **meno recentemente** sono cancellati.
---
### LRU Cache - Esempio
La sequenza di accesso è *A,B,C,D,E,F*.
Il **rank** *[priorità]* dei files è il numero in parentesi.
![lru](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/Lru.png)
---
### LRU Cache: Note
* La cancellazione dei files utilizzati meno recentemente potrebbe rendere alcuni dati **non disponibili**
Per questo **le entry nella routing table** corrispondenti ai dati cancellati rimangono anche dopo la cancellazione.
* Il meccanismo di ***scadenza*** dei dati causa l'**aggiornamento** dei files vecchi, rimpiazzandoli con le nuove versioni in automatico.
---
### Data Encryption
È necessario che gli operatori dei nodi **non possano accedere** ai dati contenuti nello spazio locale.
Questo è garantito dalla **cifratura** dei files.
* I files sono divisi in **blocchi** distribuiti a diversi nodi
* È possibile conoscere la **file key** ma non la **encryption key** a priori
Questo consente la **plausible deniability** per gli operatori dei nodi.
---
## Ottenere un File
Utente manda la **file key** al proprio nodo. Ogni nodo, ricevuta una richiesta, controlla se la chiave è presente nel suo spazio locale.
* **No**: *forward* della richiesta al nodo contenente
**la chiave più vicina a quella cercata** della sua forwarding table
* **Sì**: **success**, file mandato ai nodi upstream, ognuno dei quali fa **caching** di esso.
* **HTL expired**: **failure** propagato verso l'upstream, la ricerca si ferma
---
## Ottenere un file
![fileret1](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/dataretrieval.jpg)
---
## Ottenere un file: Note
* Una richiesta successiva per lo stesso file **può essere soddisfatta dai nodi che hanno fatto caching**
* La forwarding table non deve diventare un elenco di file sorgenti:
Ogni nodo può decidere **arbitrariamente** di proclamarsi sorgente
* Se un nodo non può soddisfare una richiesta: messaggio di **failure** nella reply, il nodo upstream proverà con il secondo nodo più vicino *[backtracking]*
---
## Ottenere un file: Note
* La qualità del routing **migliora nel tempo**, dato che i nodi si specializzano nel localizzare
**set di chiavi simili**, e salvarli in **cluster**
* Il meccanismo **replica in maniera trasparente dati popolari** vicino ai nodi che li richiedono
* Un nodo che risponde con successo a più richieste riesce a scoprire una **maggiore parte della rete** (ma gli altri nodi non lo contattano più facilmente)
---
## Ottenere un file
![fileret2](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/requestseq.png)
---
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/friends-nodes.png)
# Small World
# Network
---
<!--
template: invert
-->
## Opennet e Darknet
Si può discriminare tra 2 tipi di reti P2P:
* **Light**: comunicazione con qualunque nodo
*[Gnutella, Distributed Hash Tables, Opennet]*
* **Dark**: comunicazione sono con nodi **fidati** il cui indirizzo è conosciuto a priori.
*[Friend-to-friend network: Waste, Darknet]*
Freenet è diviso in **Opennet** e **Darknet**, implementazioni light P2P e dark P2P del protocollo.
---
## Il fenomeno del mondo piccolo
Identifica un network i cui nodi condividono le informazioni **solo con altri nodi conosciuti**. *[fidati]*
Simile al principio dei **sei gradi di separazione** tra esseri umani, ma:
* In una rete di nodi la conoscenza è tradotta come vicinanza o similarità *[closeness]*.
**In uno Small World Network, peer simili hanno maggiore probabilità di essere connessi**.
---
## SWN Routing
* Peer vicini hanno maggiore probabilità di essere connessi
* Applicazione del **Greedy Routing:** è possibile comunicare con qualunque peer mandando i messaggi **al peer più vicino**, ogni step.
Questo principio è utilizzato sia da DHT che da Freenet per fare routing dei pacchetti.
---
## Il principio di Kleinberg
*L'efficacia del routing negli Small World Network dipende dalla proporzione tra le connessioni che hanno diversa lunghezza e la posizione dei nodi.* *[John Kleinberg, 2000]*
Significa:
**Il numero di connessioni con determinata lunghezza deve essere inversamente proporzionale alla lunghezza delle stesse**.
Permette:
Complessità dell'algoritmo greedy $O(\log^2N)$
---
## Posizione e Closeness
La posizione dei nodi **non può essere determinata direttamente** in un network anonimo come Darknet.
* Non si conoscono gli **indirizzi** dei nodi
* Non si conoscono le ***trusted connections*** dei nodi
* Le informazioni contenute dai nodi sono distribuite **caoticamente**, non essendoci un'autorità che assegna gli indirizzi.
Come si determina **quale nodo è più vicino al peer che devo contattare?**
---
## Ottimizzazione del Network
* Assegnare ID numerici **unici** e **casuali** ai nodi
* Posizionarli **casualmente** in un grafo, connettendoli alle loro ***trusted connections***
È un **reverse engineering** delle posizioni dei nodi in base alla loro connessioni. Fatto ciò:
* Ogni nodo **scambia la propria posizione con gli altri**, di modo da **minimizzare il prodotto delle lunghezze** degli edge del grafo *[connessioni]*
**La rete determina la miglior posizione dei nodi.**
---
## SWN: Conclusioni
* La rete ottimizza le posizioni dei nodi di modo da minimizzare la lunghezza delle connessioni
* La rete così generata permette di raggiungere **qualunque peer** in un numero ragionevole di steps
* La **vicinanza** tra peer è il **prodotto della lunghezza degli edge del grafo**
* L'algoritmo di routing Greedy funziona **se e solo se i nodi vicini hanno più probabilità di conoscersi**. Questo rende l'ottimizzazione del network necessaria.
---
## SWN: Simulazione
Si è simulata uno Small World Network con 3 algoritmi di ricerca:
* **Random** tra i nodi *[Random]*
* **Ideal Greedy Routing** (Kleinberg), i nodi sono già disposti in maniera ottima *[Good]*
* **Restored Greedy Routing**, i nodi sono riordinati da Darknet (2000 iterazioni per nodo). *[Restored]*
---
![success](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/successgraph.jpg)
*Numero di ricerche **successful** in $log_2^2N$ steps*.
---
![avg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/avglengthgraph.jpg)
*La lunghezza media delle **successful routes***.
---
<!--
template: default
-->
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/freenetlogo.png)
# Conclusioni
---
<!--
template: invert
-->
## Confronto di protocolli P2P
Freenet non è l'unico protocollo che tenta di proteggere l'anonimato dei suoi utenti.
A livello di userbase e maturità di progetto, si notano:
* **Tor**, basato sull'**Onion routing**
* **I2P**, basato sul **Garlic routing**
(variante dell'Onion routing)
Entrambi si identificano piu' come **proxy** che come rete decentralizzata, a differenza di Freenet.
---
## Freenet e Tor
||Freenet|Tor|
|:-:|:-:|:-|
|**Protocollo decentralizzato** |Sì |No\* |
|**Accesso a Internet (proxy)** |No |Sì|
|**Accesso a webserver anonimi** |No |Sì |
|**Salvataggio distribuito dei dati** |Sì |No |
|**Impossibilità di rimuovere i dati** |Sì |No |
|**È stato bloccato con successo** |No\*\*|Sì |
\* Tor necessita di una *directory authority* che gestisca gli *hidden services [webserver anonimi]*.
\*\* Relativo a Darknet
---
<!--
template: default
-->
![bg](/home/francesco/Desktop/UNITO/lezioni/YearI/FirstSem/CR/seminario/presentation/freenetlogo.png)
# Grazie per l'attenzione