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:
- 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.
- Alice elige un número natural aleatorio a y envía g ^ a a Bob.
- Bob elige un número natural aleatorio b y envía g ^ b a Alice.
- Alice calcula (g ^ b) ^ a.
- Bob calcula (g ^ a) ^ b.
Después de estos pasos, Alice y Bob tienen un secreto compartido y nadie sabe acerca de este secreto compartido.
Pasos de Tor:
- OP (proxy o fuente de cebolla) envía g ^ a al Nodo1 (enrutador de cebolla) (pero encriptado por la clave pública de Nodo1)
- 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?).
- Ahora OP y Nodo1 tienen un secreto compartido. [por ejemplo: SS1 = OP & Nodo1 = 2].
- 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.
- Node1 descifra los datos con SS1 y obtiene la dirección de Node2, y envía los archivos cifrados restantes a Node2.
- Node2 descifra los datos con su clave privada y luego envía g ^ b a Node1 nuevamente (texto sin cifrar)
- El nodo1 encripta g ^ b con SS1 y lo envía a OP.
- OP descifra datos con SS1.
- 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í:
- Dest to Node2 = > "hola cliente"
- Nodo2 a Nodo1 = > encryptSS2 ("hello client")
- Nodo1 a OP = > encryptSS1 (encryptSS2 ("hello client"))
- OP decryptSS1 (decryptSS2 (data)).
Eche un vistazo a una imagen en esta página:
Enrutamiento de cebolla - pikneek