The Onion Router, más conocido como TOR, es un proyecto open source que permite a los usuarios de Internet navegar de manera anónima. Se dice que el protocolo sobre el que funciona TOR proporciona anonimidad ya que nos asegura autenticidad, integridad y confidencialidad en los mensajes que enviemos por Internet.
TOR solo acepta conexiones TCP, y los datos se envían mediante el protocolo SOCKS, por lo que es necesario una aplicación que soporte la conversión del tráfico DNS y HTTP a SOCKS, que son los protocolos utilizados al navegar por Internet en la capa de aplicación. En caso de no tener una aplicación que lo soporte, se puede conseguir el mismo objetivo utilizando un proxy que realice este trabajo.
No es una red peer-to-peer, por lo que podemos diferenciar dos tipos de nodos: los usuarios y los encaminadores. Para hacer la explicación más clara pondremos un ejemplo donde la usuaria Alice envía un mensaje a Bob. En primer lugar, Alice tendrá que decidir la ruta de nodos tor encaminadores (onion routers) por la cual quiere llegar a Bob. Para que la comunicación sea prácticamente inquebrantable hará falta que en la ruta se pase por al menos tres routers tor. Como vemos en la siguiente imagen, Alice ha establecido los enlaces necesarios para llegar a Bob. Cada uno de estos enlaces se denomina circuito.
Para establecer estos circuitos de manera segura, Alice seguirá el siguiente procedimiento. En primer lugar, hablará con el primer router TOR para realizar el intercambio de las claves de cifrado con protocolos de compartición de clave seguros, como podría ser Diffie-Hellman. A continuación, Alice realizará el mismo proceso con los otros dos routers TOR. En este punto, la negociación de las claves de cifrado ha acabado y ya puede comenzar la comunicación.
Supongamos que Alice quiere enviar a Bob el siguiente mensaje: “¡Hola, Bob!”. Para ello, Alice cifra el mensaje con las claves del tercer onion router, además de añadir en ese cifrado el anterior y el siguiente nodo. Seguidamente, volverá a cifrar la misma información con las claves del segundo onion router, y finalmente volverá a hacerlo con las claves del primero. De este modo, el flujo del mensaje será el siguiente:
- Alice enviará el mensaje cifrado al primer onion router. Este router descifrará el mensaje y verá otro mensaje cifrado el cual no podrá descifrar ya que necesitaría las claves que se han compartido Alice y el segundo router tor. Y también verá de donde proviene el mensaje, que es Alice en este caso, y el siguiente nodo donde tiene que encaminar el mensaje, que es el segundo onion router mostrado en la imagen anterior.
- Cuando el primer onion router envíe el mensaje al segundo, éste lo descifrará y verá lo mismo que ha visto el primer router pero en relación al tercero. Es decir, verá un mensaje cifrado que solo puede descifrar el tercer onion router, un origen, que en este caso es el primer onion router, y un destino, el cual es el tercer onion router.
- Cuando el mensaje llegue al tercer router, ocurrirá lo mismo que en los dos anteriores y finalmente enviará el mensaje a Bob. Cabe destacar que cuando el mensaje pasa del tercer router a Bob, éste ya está en claro, ya que no se han aplicado más cifrados.
Como podemos ver, sea donde sea que se capture el paquete no se podrá modificar, proporcionandonos integridad. Tampoco se podrá suplantar el origen, garantizando autenticidad, y finalmente obtendremos confidencialidad gracias al cifrado que se aplica al mensaje.
La razón del nombre del proyecto, The Onion Router o el router cebolla, es debido a que se cifra el mensaje por capas, como si fuese una cebolla, y cada capa (router en este caso) solo tiene visibilidad de la siguiente capa y de la anterior. En la siguiente imagen se ilustra de manera clara cómo iría encapsulado un mensaje siguiendo el ejemplo explicado anteriormente.
Autor: Oscar Palomo