Tor es una red que implementa una técnica llamada Onion Routing (enrutado cebolla en castellano), diseñada para proteger las comunicaciones en la Marina de los Estados Unidos. La idea es cambiar el modo de enrutado tradicional de Internet para garantizar el anonimato y la privacidad de los datos.

El enrutado tradicional que usamos para conectarnos a servidores en Internet es directo. Por ejemplo, si quieres leer una web tu ordenador se conecta de forma directa a sus servidores. La ruta es relativamente sencilla: de tu ordenador a tu router, de ahí a los enrutadores de tu ISP (proveedor de Internet) y después directos a los servidores de la web que estás visitando.

Lo malo es que si alguien intercepta los paquetes de datos en un punto intermedio sabrá perfectamente de dónde vienen y a dónde van. Incluso aunque se cifren los datos de cada paquete en las páginas HTTPS, las cabeceras de este no se cifran, y los campos del remitente y destinatario (entre otros) siguen siendo visibles.

Ahí es donde entra el Onion Routing, que consiste en enviar los datos por un camino no directo utilizando diferentes nodos. Primero, el ordenador A, que quiere enviar el mensaje a B, calcula una ruta más o menos aleatoria al destino pasando por varios nodos intermedios. Después, consigue las claves públicas de todos ellos usando un directorio de nodos.

image.png

Mediante cifrado asimétrico, el ordenador A cifra el mensaje como una cebolla: por capas. Primero cifrará el mensaje con la clave pública del último nodo de la ruta, para que solo él lo pueda descifrar. Además del mensaje, incluye (también cifradas) instrucciones para llegar al destino, B. Todo este paquete, junto con las instrucciones para llegar al último nodo de la lista, se cifra de nuevo para que solo lo pueda descifrar el penúltimo nodo de la ruta.

El proceso se repite hasta que acabamos con todos los nodos de la ruta. Con esto ya tenemos el paquete de datos listo, así que toca enviarlo. El ordenador A conecta con el primer nodo de la ruta y le envía el paquete. Este nodo lo descifra, y sigue las instrucciones que ha descifrado para enviar el resto del paquete al nodo siguiente. Este descifrará de nuevo y volverá a enviar al siguiente, y así sucesivamente. Los datos llegarán finalmente al nodo de salida, que enviará el mensaje a su destino.

Este método proporciona muchísima más seguridad y privacidad, ya que solo el primero y el último nodo saben de dónde viene o a dónde va el mensaje. Pero tampoco es un método infalible, ya que analizando los tiempos a los que se reciben y envían los paquetes en cada nodo podría llegar a saberse, con mucho tiempo y dedicación, qué ordenadores se están comunicando.