¿Por qué un nodo de salida Tor puede descifrar datos, pero no el nodo de entrada?

33

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

La documentación en Tor siempre indica que solo el nodo de salida C puede ver datos de texto sin formato. ¿Cómo es esto posible sin que yo hable directamente con Node C?

Si tengo algunos datos de texto sin formato, y quiero enviarlos encriptados al Nodo A, por lo general haría un intercambio de claves Diffie-Hellman y enviaría los datos. Pero con ese esquema, el nodo A podría descifrar los datos.

Si el Nodo C compartía de alguna manera su clave pública conmigo, ¿no podría Nodo B o Nodo A MITM la clave?

¿Cómo gestiona Tor exactamente su PKI? ¿Qué claves se utilizan para cifrar datos donde?

    
pregunta Petey B 28.05.2013 - 17:22
fuente

3 respuestas

57

Tor utiliza un método de enrutamiento llamado Enrutamiento de cebolla . Al igual que una cebolla, cada mensaje (el núcleo de la cebolla) está cubierto con capas de cifrado. atribución de imagen

Su mensaje se cifra varias veces antes de que salga de su dispositivo. El nodo A solo puede descifrar (pelar) la capa A, bajo la cual vería la dirección del siguiente nodo. Una vez que el paquete llega al siguiente nodo, solo puede descifrar (pelar) la capa B, y así sucesivamente. Para cada capa, utiliza la clave pública del nodo correspondiente, por lo que solo ese nodo exacto puede descifrar la capa con su propia clave privada.

Cuando el mensaje llega al nodo de salida, todas las capas se han descifrado y el mensaje ahora está en texto sin formato (también podría cifrarse si se está comunicando con el servidor bajo SSL).

    
respondido por el Adi 28.05.2013 - 17:31
fuente
17

TOR utiliza el principio de enrutamiento de cebolla. Digamos que hay 3 nodos TOR A, B y C involucrados (seleccionados aleatoriamente por el cliente) y el mensaje es m. Asumimos que las claves públicas correspondientes de estos nodos son Pa, Pb y Pc.

El mensaje se encripta repetidamente por el cliente comenzando con la clave pública del nodo de salida (PC) seguido de Pb y al final Pa (enrutamiento de cebolla).

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

Los datos se descifran en cada nodo utilizando su clave privada correspondiente. Después del descifrado, cada nodo obtiene información de texto sin formato sobre dónde reenviar los datos restantes. Esto garantiza que ningún nodo sepa la ruta completa . Cada nodo solo conoce el nodo anterior y el siguiente.

p.s. Hay un muy buen artículo sobre TOR en nuestro blog comunitario, pero de alguna manera no puedo encontrarlo. Si alguien encuentra el enlace, agréguelo a la respuesta.

    
respondido por el Shurmajee 28.05.2013 - 18:04
fuente
1

Hay dos preguntas diferentes aquí:
1- ¿Cómo enviamos datos y cómo los nodos descifran cada capa de encriptación?
2- ¿Cómo obtenemos los datos del nodo de salida?
Acerca de la primera pregunta, puedo decir que no hay cifrado de clave pública para enviar datos a destino, sino secretos compartidos. Antes de esto, debe saber lo suficiente acerca de DH .
Pasos DH:

  
  1. Alice y Bob acuerdan un grupo cíclico finito G y una generación   el elemento g en G. (Esto suele hacerse mucho antes del resto de la   protocolo; Se supone que g es conocido por todos los atacantes.   el grupo G multiplicativamente.
  2.   
  3. Alice elige un número natural aleatorio a y envía g ^ a a Bob.
  4.   
  5. Bob elige un número natural aleatorio b y envía g ^ b a Alice.
  6.   
  7. Alice calcula (g ^ b) ^ a.
  8.   
  9. Bob calcula (g ^ a) ^ b.
  10.   

Después de estos pasos, Alice y Bob tienen un secreto compartido y nadie sabe acerca de este secreto compartido.

Pasos de Tor:

  1. OP (proxy o fuente de cebolla) envía g ^ a al Nodo1 (enrutador de cebolla) (pero encriptado por la clave pública de Nodo1)
  2. El nodo1 descifra los datos con una clave privada y luego envía g ^ b a OP. (en texto claro. Porque si la clave pública de OP es conocida por las RUP, ¿dónde está la privacidad?).
  3. Ahora OP y Nodo1 tienen un secreto compartido. [por ejemplo: SS1 = OP & Nodo1 = 2].
  4. OP envía g ^ a al Nodo1, y Nodo1 debería enviarlo al Nodo 2. ('a' es un nuevo número aleatorio)
    OP encripta g ^ a con clave pública de Nodo2, y encripta datos (en (g ^ a) y dirección de Nodo2) con SS1.
  5. Node1 descifra los datos con SS1 y obtiene la dirección de Node2, y envía los archivos cifrados restantes a Node2.
  6. Node2 descifra los datos con su clave privada y luego envía g ^ b a Node1 nuevamente (texto sin cifrar)
  7. El nodo1 encripta g ^ b con SS1 y lo envía a OP.
  8. OP descifra datos con SS1.
  9. Ahora OP y Nodo2 tienen un Secreto compartido que Nodo1 no sabe. [por ejemplo: SS2 = OP & Nodo2 = 5].

Esto continuará hasta que el circuito complete.now OP pueda enviar solicitudes de destino a través de Nodos con (SS1, SS2, ...). La última solicitud de envío debe ser así:

OP a Nodo1 = > encryptSS1 (enviar a Nodo2, encryptSS2 (enviar a destino, "servidor de saludo"))

Y sobre la segunda pregunta, la respuesta debería ser así:

  1. Dest to Node2 = > "hola cliente"
  2. Nodo2 a Nodo1 = > encryptSS2 ("hello client")
  3. Nodo1 a OP = > encryptSS1 (encryptSS2 ("hello client"))
  4. OP decryptSS1 (decryptSS2 (data)).

Eche un vistazo a una imagen en esta página:
Enrutamiento de cebolla - pikneek

    
respondido por el Mohamad Rostami 23.12.2014 - 16:44
fuente

Lea otras preguntas en las etiquetas