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:
- 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.
- Alice picks a random natural number a and sends g^a to Bob.
- Bob picks a random natural number b and sends g^b to Alice.
- Alice computes (g^b)^a.
- Bob computes (g^a)^b.
Dopo questi passaggi Alice e Bob hanno un segreto condiviso e nessuno sa di questo segreto condiviso.
Tor Steps:
- OP (onion proxy o source) invia g ^ a a Node1 (onion router). (ma crittografato dalla chiave pubblica del Node1)
- 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 !!).
- Ora OP e Nodo1 hanno un segreto condiviso. [ad es. SS1 = OP & Node1 = 2].
- 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.
- Nodo1 decrittografa i dati con SS1 e ottiene l'indirizzo Nodo2 e invia i rimanenti codificati g ^ a al Nodo2.
- Nodo2 decrittografa i dati con la sua chiave privata, quindi invia nuovamente g ^ b al nodo1 (testo in chiaro)
- Nodo1 crittografa g ^ b con SS1 e invia a OP.
- OP decodifica i dati con SS1.
- 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ì:
- Dest to Node2 = > "Ciao cliente"
- Nodo2 a Nodo1 = > encryptSS2 ("Ciao cliente")
- Nodo1 a OP = > encryptSS1 (encryptSS2 ("ciao client"))
- OP decryptSS1 (decryptSS2 (dati)).
Dai un'occhiata a un'immagine in questa pagina:
Routing di cipolla - pikneek