Onion routing: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m formattazioni e un'etichetta |
m Bot, replaced: Categoria:Sicurezza in rete → Categoria:Sicurezza di rete |
||
Riga 4:
==Sviluppo e implementazione==
L'Onion routing è stato sviluppato a metà degli anni ‘90 presso il Laboratorio di Ricerca Navale degli Stati Uniti ([[U.S. Naval Research Laboratory]]), da parte di [[Paul Syverson]], [[Michael G. Reed]] e [[David Goldschlag]], per proteggere l'[[
Gli informatici [[Roger Dingledine]] e [[Nick Mathewson]] si incontrarono a Syverson nel 2002 per sviluppare quella che sarebbe diventata la più grande e nota implementazione dell'onion routing: The Onion Router o, in forma abbreviata, [[Tor (software)|TOR]].
Riga 10:
==Struttura e dati==
In questo esempio il nodo origine invia una onion al [[router]] A, ovvero un dato coperto da diversi strati di [[crittografia]], il router A rimuove uno strato di crittografia e scopre in questo modo qual è il nodo successivo a cui deve essere inviato il dato, e da quale nodo proveniva la cipolla. Il router A così invia la cipolla, privata di uno strato, al router B, il quale decripta (cioè "sbuccia") un altro strato di crittografia, quindi il router B a sua volta invia la cipolla, privata di un secondo strato, al router C. Il router C rimuove lo strato di crittografia finale e trasmette quindi il dato al nodo destinatario.
Riga 19 ⟶ 18:
==Funzionamento generale del protocollo Onion==
Per creare e trasmettere un dato cipolla, il nodo mittente seleziona un insieme di nodi intermediari da una lista nodi che gli viene fornita da un nodo "Directory". I nodi intermediari selezionati, sono quindi disposti lungo un percorso, chiamato catena ("chain") o circuito ("circuit"), attraverso questa catena viene trasmesso il dato cipolla. Per conservare l'anonimato del nodo mittente, nessun nodo del circuito è in grado di dire se il nodo a lui precedente è anch'esso un nodo intermediario o se si tratta proprio del nodo mittente.
Analogamente, nessun nodo del circuito è in grado di dire attraverso quanti nodi il dato cipolla passerà prima di arrivare al nodo destinazione, chiamato anche Exit Node (nodo di uscita), inoltre nessun nodo del circuito è in grado di sapere quale posizione della catena occupa.
Si ipotizzi che Alice sia il [[PC]], con [[
Il computer di Alice deve ovviamente avere una [[scheda di rete]] installata, un [[sistema operativo]] (non importa quale sia il tipo) e un [[browser]].
Quindi si supponga che il server di Destinazione attraverso il quale Alice sta tentando di accedere sia un semplice [[server web|web server]] senza [[Virtual Private Network|VPN]], [[proxy]], e senza nessuna infrastruttura di tipo Tor all'interno di esso;
Come si può notare, con una configurazione del genere, chiunque stia tentando di [[Sniffing|ascoltare il traffico]] in uscita dal computer di Alice può sapere a quale server Alice sta facendo la richiesta, chi ha fatto la richiesta, a chi è rivolta la richiesta. Per questo motivo, al fine di nascondere il mittente della request (Alice), viene installato su Alice [[
Una delle caratteristiche del browser Tor è che, attraverso il suo utilizzo, si garantisce all'utente il completo anonimato. Ovviamente se l'utente comincia ad effettuare pagamenti su internet utilizzando la propria carta di credito, o se utilizza i propri dati personali (es. carta d'identità, patente di guida, codice fiscale etc.) il grado di anonimato si riduce drasticamente, allo stesso modo se ci si registra in qualche sito internet con le proprie [[Account|credenziali]].
Per prima cosa Alice, che è il nodo mittente, attraverso Tor browser, contatta i nodi Tor chiamati nodi di Directory. Questi nodi di Directory non sono altro che server ridondanti e di fiducia messi a punto da chi ha progettato il protocollo Onion, i quali forniscono la lista di tutti i nodi Tor presenti in rete.
Riga 39 ⟶ 37:
Si faccia attenzione poiché l'Entry Node, non è il nodo mittente (Alice), ma è il nodo immediatamente successivo, allo stesso modo l'Exit Node, non è il server di destinazione della request di Alice, ma è il nodo immediatamente precedente a tale server.
La scelta dei nodi di una catena viene effettuata dal browser Tor di Alice in base alle informazioni ricevute dal directory server: ogni nodo Tor quando si registra presso le directory invia il proprio indirizzo IP e una serie di caratteristiche.
Gli Exit Nodes sono i più importanti: i dati che escono da questi nodi potrebbero non essere protetti da crittografia (se ad esempio Alice non ha effettuato una chiamata in [[HTTPS]], o protetta da [[
Parimenti, i Guard Nodes vincono questo status quando hanno servito la rete Tor per un lungo periodo: sono nodi fidati a cui possiamo affidare il primo passo per entrare nella rete.
Tutti i rimanenti nodi sono considerati nodi intermediari. Il perché di queste scelte e di questa classificazione si può spiegare brevemente dicendo che sono il primo e l'ultimo nodo della catena rappresentano i punti deboli attraverso cui è possibile attaccare il protocollo.<ref name="carella"/>
Riga 52 ⟶ 50:
==Funzionamento in particolare del protocollo onion==
Ogni nodo che compone la rete prende il nome di ONION ROUTER (OR) mentre ogni [[Host]] che usufruisce di tale rete per veicolare anonimamente le proprie comunicazioni su internet prende il nome di ONION PROXY (OP). Riferendosi all'esempio precedente OP è Alice.
Quando un client desidera comunicare tramite questo sistema sceglie un percorso composto da diversi OR (N.B. se uso [[
La stessa operazione viene eseguita per i restanti OR sul percorso fino a che i dati non arrivano a destinazione. I dati vengono inviati in celle di lunghezza fissa al fine di impedire qualsiasi correlazione tra la lunghezza dei dati inviati e la loro natura.
===Autenticazione OP-OR e autenticazione OR-OR===
Prima di iniziare qualsiasi connessione il client OP si connette al directory server e scarica la lista dei nodi OR disponibili e delle [[
Il client OP può verificare la validità della chiave di identificazione fornita dal nodo ORx con quella scaricata dal directory server e rifiutare la connessione nel caso quest’ultima dovesse risultare [[
Due nodi OR invece eseguono una [[Autenticazione|mutua autenticazione]] utilizzando una procedura simile a quella descritta in precedenza: Un nodo ORx deve rifiutare una connessione a/da un ORy la cui chiave di identificazione non dovesse risultare valida o il cui certificato sia malformato o
mancante.
Riga 67 ⟶ 64:
===Trasmissione dei dati===
Una volta stabilita una connessione [[
dati e la natura del traffico stesso. La connessione TLS tra OP-OR oppure OR-OR non è permanente, una delle due parti coinvolte nella comunicazione può interrompere la connessione se non transitano dati per un tempo pari al KeepalivePeriod che di default vale 5 minuti.<ref name="carella"/>
Riga 75 ⟶ 72:
[[File:Formato cella generica.png|thumb]]
* CircID: Serve ad indicare a quale circuito virtuale è associata la cella, infatti ogni nuova connessione effettuata da un’applicazione del client OP può essere instradata tramite un percorso di nodi OR differente.
* Command: In base al valore della cella Command si definisce la tipologia della cella. Contiene il valore relativo ad uno dei comandi supportati dalle specifiche del protocollo e può assumere i seguenti valori:
Riga 85 ⟶ 81:
# DESTROY (Chiude un circuito)
# CREATE_FAST (Crea un circuito)
# CREATED_FAST (Conferma Creazione)
* Payload: Contiene i dati che devono essere trasmessi all’altro nodo, ma il suo contenuto può variare a seconda del Command, infatti:
Riga 102 ⟶ 98:
====La cella CREATE====
Il client OP crea il circuito in maniera incrementale, un nodo alla volta. Per creare un nuovo circuito il client OP sceglie un percorso casuale tra i nodi OR disponibili e invia una cella CREATE al primo nodo, il payload della cella conterrà la prima parte dell'[[handshake]] [[
Nel caso più semplice, ovvero se la lunghezza dei dati della cella è minore della lunghezza della [[chiave pubblica]] del nodo OR, la cella CREATE viene criptata con la chiave pubblica di OR.
Riga 112 ⟶ 108:
====Le celle RELAY====
A differenza delle celle CREATE e CREATED che sono scambiate tra nodi tra loro adiacenti, le celle RELAY sono utilizzate per veicolare flussi di dati e messaggi di controllo attraverso un circuito composto da più nodi.
=====La cella RELAY EXTEND=====
Per estendere il circuito di un ulteriore nodo il client OP invia una cella relay EXTEND che istruisce l'ultimo nodo OR ad inviare una cella CREATE per estendere il circuito verso il nodo OR desiderato.
=====La cella RELAY EXTENDED=====
Riga 125 ⟶ 121:
Nel payload di questa cella sono presenti, l’hostname o l’[[indirizzo IP]] nel formato [[IPv4]] o [[IPv6]] e la porta dell’[[Host]] a cui si desidera connettere (facendo riferimento all'esempio precedente si tratta di indirizzo e porta del server web di destinazione).
La cella RELAY BEGIN viene instradata lungo il circuito e viene processata dal nodo OR di uscita (Exit Node) che apre una nuova connessione [[
Se la connessione TCP va a buon fine il nodo OR di uscita invia una cella RELAY_CONNECTED al client OP che lo informa dell'avvenuta connessione.<ref name="carella"/>
==Passi di funzionamento del protocollo Onion Routing==
[[File:Passi di funzionamento.png|thumb]]
Riga 178 ⟶ 173:
==Debolezze del protocollo Onion==
===Timing analysis===
Una delle ragioni per cui le connessioni via Internet sono considerate anonime è dovuta alla capacità dei [[Internet Service Provider|service provider]] di internet di tracciare e registrare le connessioni tra i computer e quindi tra i nodi. Per esempio, quando una persona visita un particolare sito web, i propri dati possono essere messi al sicuro utilizzando una connessione HTTPS in modo tale che dati sensibili come password, e-mail, o altri dati personali non siano visibili da un utente esterno, ma rimane una registrazione della connessione stessa: in essa si vedono data e ora della connessione e la quantità di dati trasferiti.
Onion Routing crea e oscura il percorso che la [[
Chi analizza il traffico, opera proprio in questa maniera: si analizzano i records delle connessioni in un potenziale nodo mittente, cioè si prende un PC sospetto di essere un nodo mittente, si analizzano i suoi records , e si prova a fare il match di ora e data dei trasferimenti fra i record del potenziale nodo mittente, e un potenziale nodo destinatario.
Riga 193 ⟶ 187:
Anche se il messaggio inviato viene trasmesso incapsulato da diversi strati di crittografia, il lavoro dell'Exit node, essendo il nodo intermediario finale della catena, è quello di decifrare lo strato di crittografia più esterno e consegnare il messaggio al nodo destinatario.
Un Exit node compromesso sarebbe quindi in grado di acquisire i dati "grezzi" trasmessi, cioè [[password]], messaggi privati, numeri di carte di credito etc.
Le vulnerabilità dell'Exit node sono simili alle vulnerabilità delle [[Wi-Fi#
==Note==
Riga 204 ⟶ 198:
[[Categoria:Sicurezza informatica]]
[[Categoria:Crittografia]]
[[Categoria:Sicurezza
|