Perché un nodo di uscita Tor può decodificare i dati, ma non il nodo di ingresso?

33

Me -> Node A -> Node B -> Node C -> destination

La documentazione su Tor afferma sempre che solo il nodo di uscita C può vedere dati di testo normale. Com'è possibile senza che io parli direttamente con il Nodo C?

Se ho alcuni dati di testo normale e voglio inviarlo crittografato al nodo A, di solito faccio uno scambio di chiavi Diffie-Hellman e inviamo i dati. Ma con questo schema, il nodo A potrebbe decodificare i dati.

Se il Nodo C stava in qualche modo condividendo la sua chiave pubblica con me, non poteva Nodo B o Nodo A MITM la chiave?

In che modo esattamente Tor gestisce la sua PKI? Quali chiavi vengono utilizzate per crittografare i dati dove?

    
posta Petey B 28.05.2013 - 17:22
fonte

3 risposte

57

Tor utilizza un metodo di routing chiamato Routing delle cipolle . Proprio come una cipolla, ogni messaggio (il nucleo della cipolla) è coperto da strati di crittografia. attribuzione dell'immagine

Il tuo messaggio viene crittografato più volte prima che lasci il tuo dispositivo. Il nodo A può solo decifrare (pelare) il livello A, in base al quale vedrebbe l'indirizzo del nodo successivo. Dopo che il pacchetto raggiunge il nodo successivo, può solo decrittografare (pelare) il livello B e così via. Per ogni livello, si utilizza la chiave pubblica del rispettivo nodo, quindi solo quel nodo esatto può decifrare il livello con la propria chiave privata.

Quando il messaggio raggiunge il nodo di uscita, tutti i livelli sono stati decrittografati e il messaggio è ora in chiaro (potrebbe anche essere crittografato se comunichi con il server in SSL).

    
risposta data 28.05.2013 - 17:31
fonte
17

TOR utilizza il principio del routing della cipolla. Diciamo che ci sono 3 nodi TOR A, B e C coinvolti (selezionati casualmente dal client) e il messaggio è m. Assumiamo che le chiavi pubbliche corrispondenti di questi nodi siano Pa, Pb e Pc.

Il messaggio viene crittografato ripetutamente dal client iniziando con la chiave pubblica del nodo di uscita (Pc) seguito da Pb e nel termine Pa (Onion Routing).

Data received by node A: Pa(Pb(Pc(m))) 
Data received by node B: Pb(Pc(m)) 
Data received by node C: Pc(m)  

I dati vengono decodificati su ciascun nodo utilizzando la corrispondente chiave privata. Dopo la decrittografia, ogni nodo riceve alcune informazioni in chiaro su dove inoltrare i dati rimanenti. Questo assicura che nessun singolo nodo conosca l'intero percorso . Ogni nodo conosce solo il nodo precedente e quello successivo.

P.S. C'è un ottimo articolo su TOR nel nostro blog di comunità, ma in qualche modo non riesco a trovarlo. Se qualcuno trova il link, aggiungilo alla risposta.

    
risposta data 28.05.2013 - 18:04
fonte
1

Ci sono due domande diverse qui:
1- come possiamo inviare i dati e come decodificare i nodi ogni livello di crittografia?
2- come otteniamo i dati dal nodo di uscita?
Per quanto riguarda la prima domanda, posso dire che non esiste una crittografia a chiave pubblica per l'invio di dati a destinazione, ma segreti condivisi. Prima di questo dovresti sapere abbastanza su DH .
Passaggi DH:

  1. Alice and Bob agree on a finite cyclic group G and a generating element g in G. (This is usually done long before the rest of the protocol; g is assumed to be known by all attackers.) We will write the group G multiplicatively.
  2. Alice picks a random natural number a and sends g^a to Bob.
  3. Bob picks a random natural number b and sends g^b to Alice.
  4. Alice computes (g^b)^a.
  5. Bob computes (g^a)^b.

Dopo questi passaggi Alice e Bob hanno un segreto condiviso e nessuno sa di questo segreto condiviso.

Tor Steps:

  1. OP (onion proxy o source) invia g ^ a a Node1 (onion router). (ma crittografato dalla chiave pubblica del Node1)
  2. Node1 decrittografa i dati con la chiave privata e quindi invia g ^ b a OP. (in chiaro, perché se la chiave pubblica dell'OP è nota alle OR, allora dov'è la privacy !!).
  3. Ora OP e Nodo1 hanno un segreto condiviso. [ad es. SS1 = OP & Node1 = 2].
  4. OP invia g ^ a al Nodo1 che il Nodo1 dovrebbe inviare al Nodo 2. ('a' è un nuovo numero casuale)
    OP crittografa g ^ a con Node2 Public Key e crittografa i dati (en (g ^ a) e Node2 address) con SS1.
  5. Nodo1 decrittografa i dati con SS1 e ottiene l'indirizzo Nodo2 e invia i rimanenti codificati g ^ a al Nodo2.
  6. Nodo2 decrittografa i dati con la sua chiave privata, quindi invia nuovamente g ^ b al nodo1 (testo in chiaro)
  7. Nodo1 crittografa g ^ b con SS1 e invia a OP.
  8. OP decodifica i dati con SS1.
  9. Ora OP e Nodo2 hanno un segreto condiviso che il Nodo1 non conosce. [ad es. SS2 = OP & Nodo2 = 5].

Questo sarà continuato fino al completamento del circuito. Ora l'OP può inviare la richiesta di destinazione attraverso i nodi con (SS1, SS2, ...). l'ultima richiesta di invio dovrebbe essere come questa:

Da OP a Nodo1 = > encryptSS1 (invia a Node2, encryptSS2 (invia a destinazione, "ciao server"))

E sulla seconda risposta alla domanda, dovrebbe essere così:

  1. Dest to Node2 = > "Ciao cliente"
  2. Nodo2 a Nodo1 = > encryptSS2 ("Ciao cliente")
  3. Nodo1 a OP = > encryptSS1 (encryptSS2 ("ciao client"))
  4. OP decryptSS1 (decryptSS2 (dati)).

Dai un'occhiata a un'immagine in questa pagina:
Routing di cipolla - pikneek

    
risposta data 23.12.2014 - 16:44
fonte

Leggi altre domande sui tag