Onion routing: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Passi di funzionamento del protocollo Onion Routing: Ho specificato con maggior chiarezza come si svolgono i passi per questo protocollo. |
No2 (discussione | contributi) m Corretto il collegamento Nodo (disambigua) con Nodo (telecomunicazioni) (DisamAssist) |
||
(17 versioni intermedie di 15 utenti non mostrate) | |||
Riga 1:
{{F|crittografia|arg2=sicurezza informatica|agosto 2016|}}
'''Onion routing''' è una tecnica di [[anonimizzazione]] delle comunicazioni in una [[rete di
Il mittente rimane anonimo perché ciascun intermediario conosce solo la posizione del nodo immediatamente precedente e di quello immediatamente successivo.
== Descrizione ==
=== 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'[[United States Intelligence Community|intelligence]] online degli Stati Uniti
Gli informatici [[Roger Dingledine]] e
Il Laboratorio Di Ricerca Navale degli Stati Uniti rilasciò il [[codice sorgente]] di TOR con licenza gratuita, mentre Dingledine, Mathewson e altri cinque sviluppatori fondarono nel 2006 l'organizzazione no-profit chiamata "The Tor Project", con il sostegno finanziario della [[Electronic Frontier Foundation]] e altre diverse organizzazioni.
=== Struttura e dati ===
[[File:Onion_diagram.svg|thumb|In questo esempio, il mittente (Source) manda i dati al Router A, il quale rimuove lo strato di crittografia (strato blu) al fine di scoprire verso quale Router deve spedire il dato (N.B. il Router A non sa se chi gli ha inviato il dato onion è un Router mittente o un Router intermediario). Il Router A invia il dato “sbucciato” di uno strato al Router B, il quale decripta il suo strato (strato verde) e invia il dato privato di un’altra “buccia” al Router C. Quest’ultimo rimuove lo strato di crittografia finale (strato rosso) e trasmette il dato originale al server di destinazione finale (Destination).]]
Un dato onion è quindi una [[struttura dati]] formata da un messaggio che è stato "avvolto" da strati di crittografia, uno successivo all'altro,
Il messaggio originale rimane evidentemente nascosto per tutto il tragitto che fa attraverso i nodi intermediari, nessun nodo intermediario è a conoscenza né del nodo sorgente né del nodo destinazione. Ciò permette quindi al nodo mittente di rimanere anonimo.<ref name="carella">{{Cita web|url=http://carminecarella.altervista.org/material/sicurezza/report.pdf
==Funzionamento generale
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
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 [[Tor (software)|Tor browser]] installato,
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]], né [[proxy]]
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
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.
Il browser Tor di Alice farà il [[download]] di questa informazione al fine di costruire una catena di nodi o circuito.
Di default Tor browser sceglie
Nella terminologia di Tor, i nodi prendono un particolare nome a seconda della loro posizione nel circuito: il primo nodo si chiama Guard Node (nodo di guardia) o Entry Node (nodo di ingresso), il secondo Middleman Node (nodo intermediario) e il terzo Exit Node (nodo di uscita).
Si faccia attenzione poiché l'Entry Node
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 [[Transport Layer Security|SSL/TLS]], ma ha usato [[HTTP]], le info dall'Exit Node al server di destinazione viaggiano in chiaro).
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
[[File:Wat_is_Tor_(The_onion_routing)%3F.png|thumb]]
Riga 49 ⟶ 50:
[[File:Tor-onion-network.png|thumb]]
==Funzionamento in particolare
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.
Riga 69 ⟶ 70:
===Formato delle celle===
I dati scambiati tra due entità all'interno di un sistema di Onion Routing prendono il nome di celle, esse hanno una grandezza fissa di 512 byte. Ogni cella è composta da 2 campi che hanno funzioni di controllo e dal [[Carico utile (informatica)|payload]] che contiene i dati trasmessi dall'applicazione.
[[File:Formato cella generica.png|thumb]]
Riga 124 ⟶ 125:
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
[[File:Passi di funzionamento.png|thumb]]
Riga 130 ⟶ 131:
# OP sceglie il nodo di uscita R2.
# OP calcola g^x1 (chiave pubblica di OP nello scambio DH) e lo invia a R1 nella cella CREATE cifrandolo con la chiave pubblica di R1.
# R1 decifra la cella CREATE con la propria chiave privata ottenendo g^x1.
# R1 calcola g^y1 (chiave pubblica di R1 nello scambio DH) e lo usa, assieme a g^x1 ed alla propria chiave privata dello scambio DH, per calcolare K1 (chiave di sessione fra OP e R1).
# R1 invia ad OP la cella CREATED contenente g^y1 e l'hash di K1 (in chiaro).
# OP calcola K1 (chiave di sessione fra OP e R1) da g^x1, g^y1 e dalla propria chiave privata dello scambio DH.
# OP calcola l'hash di K1 e lo confronta con l'hash ricevuto nel payload della cella CREATED.
# OP e R1 si sono scambiati in modo sicuro la chiave di sessione K1, poiché grazie all'algoritmo di Diffie-Hellman hanno autonomamente calcolato la stessa chiave K1, senza mai doverla scambiare lungo il canale di connessione, pertanto viene creato il circuito virtuale tra OP e R1.
Riga 140 ⟶ 141:
===Estensione del circuito===
# OP calcola g^x2 (chiave pubblica di OP nello scambio DH con R2) e invia a R1 la cella RELAY contenente nel payload, cifrato con K1, la specifica EXTEND, composta dall'indicazione che l'estensione va fatta verso R2
# R1 decifra con la chiave K1 il payload, capisce che si tratta di un EXTEND e che deve essere per R2, costruisce una cella CREATE per R2 e nel payload vi inserisce la parte cifrata da OP con la chiave pubblica di R2 (che per R1 è 'black box').
# R2 decifra la cella CREATE ricevuta, con la propria chiave privata ottenendo g^x2. Contestualmente crea l'abbinamento A1 tra il circuito che ha in essere con OP (c1) e il circuito che sta creando con R2 (
# R2 calcola g^y2 (chiave pubblica di R2 nello scambio DH con OP) e lo usa, assieme a g^x2 ed alla propria chiave privata dello stesso scambio DH, per calcolare K2 (chiave di sessione fra OP e R2).
# R2 invia ad R1 la cella CREATED contenente g^y2 e l'hash di K2 (in chiaro).
# R1 estrae il payload dalla cella CREATED e invia ad OP una cella RELAY contenente nel payload, cifrato con K1, la specifica EXTENDED, composta dal payload estratto (quello ricevuto da R2).
# OP decifra con la chiave K1 il payload, capisce che si tratta di EXTENDED e calcola K2 (chiave di sessione fra OP e R2) dal g^x2 che aveva calcolato al punto 1., da g^y2 e dalla propria chiave privata dello scambio DH con R2.
# OP calcola l'hash di K2 e lo confronta con l'hash ricevuto nel payload della cella EXTENDED.
#OP e R2 si sono scambiati in modo sicuro la chiave di sessione K2, nota solo a OP e a R2.
Riga 153 ⟶ 154:
# OP invia la cella RELAY cifrata con K1 e con K2 contenente BEGIN.
# R1 decifra il payload con la chiave K1 ottenendo una 'black box'. Avendo in
#R2 decifra il payload con la chiave K2, controlla che i campi della cella siano coerenti quindi ne processa il payload.
# R2 ricava IP e Porta dell’host verso il quale deve aprire una connessione TCP ed esegue l'handshake con la destinazione.
Riga 165 ⟶ 166:
Una volta che la connessione TCP viene stabilita i dati vengono veicolati sul circuito virtuale attraverso celle RELAY cifrate da OP con K1 e K2 e contenenti DATA con il tipo di richiesta (p.e. HTTP GET...).
==Debolezze del protocollo
===Timing analysis===
Riga 173 ⟶ 174:
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.
Per esempio, un computer che, nelle sue registrazioni di connessioni, ha un record in cui un utente che ha utilizzato quel PC, ha trasferito esattamente 51 KB di dati verso un PC sconosciuto al tempo t: se in un secondo PC si legge nei record che anch'esso ha trasferito esattamente 51KB di dati verso un particolare sito web, allora con molta probabilità si trattava di due nodi onion che stavano scambiandosi informazioni.
[[Garlic routing]] è una variante dell'Onion Routing associata alla rete [[I2P]], che crittografa più messaggi insieme al fine di rendere più difficile l'analisi del traffico da parte di eventuali attaccanti.
Riga 187 ⟶ 188:
<references/>
{{portale|
[[Categoria:Sicurezza informatica]]
|