El encaminamiento cebolla o enrutamiento cebolla, en inglés onion routing, fue introducido por David M. Goldshlag, Michael Reed y Paul SyversonD. Goldschlag, M. Reed y P. Syverson. "Hiding Routing Informations", In proceedings of the First International Workshop on Information Hiding, 1996, LNC vol 1174 pp. 137-150 aplicando las ideas de las redes de mezclado de David Chaum a los sistemas de encaminamiento, para conseguir redes que preserven la privacidad (tanto del mensaje en si como de los interlocutores) de forma transparente a las entidades que se comunican. De esta forma podemos tener infraestructuras para comunicaciones privadas sobre una red pública.

Con este sistema las comunicaciones pueden ser bidireccionales, casi en tiempo real y pueden ser usadas para tráfico orientado a conexión o no.

A las redes que utilizan esta forma de encaminamiento se las llama redes cebolla (en inglés onion networks). Ejemplos de este tipo de redes, algunas de las cuales nunca han sido implementadas, son Freedom Network, Onion Routing, MixMaster, Babel, Mixminion, Zach Brown's Onion, PipeNet, IronKey, MorphMix, Tarzan y Tor, la más importante red que usa esta tecnología y que actualmente está desplegada en internet.

Objetivo El objetivo principal para el que se diseñó el encaminamiento cebolla es separar la identificación del enrutado de los mensajes y por tanto perseguir el enrutado anónimo (en inglés anonymous routing). Para enrutar no es necesario tener en todo momento identificado tanto el origen como el destino de la comunicación. Cuando hablamos de 'identidad' nos referimos a cualquier dato que ayude identificar a un individuo. Por ejemplo la dirección IP ayuda a identificar ya que a través de ella se puede obtener información como el usuario particular u organización a la que estaba asignada esa IP en ese momento o el país desde el que se envía el mensaje.Paul Syverson, "A peel of Onion", ACSAC'11. Orlando, Florida USA. Diciembre de 2011

Para tener una buena protección de la identidad de los interlocutores, es necesario que la ruta de nodos por los que pasa el mensaje para ir desde el origen al destino, sea impredecible a priori y se oculte todo lo posible. Por esta razón se persigue que cada entidad solo conozca la entidad desde la que recibe el mensaje y la entidad a la que tiene que enviar el mensaje. Esto se puede aplicar no solo a los nodos enrutado sino también a las propias entidades que se comunican. El destino no tiene que saber la identidad del que se quiere comunicar con él. El origen de la comunicación puede no saber la identidad de la entidad con la que se quiere comunicar, son los definidos como servicios ocultos (en inglés hidden services). Los servicios ocultos no son soportados por la mayoría de sistemas de encaminamiento de cebolla. Sin embargo sí hay sistemas que los soportan como Tor.

Observar que para ocultar la ruta no es necesario confiar en todos los nodos de la ruta, teóricamente (si los nodos tuvieran un comportamiento ideal) con que hubiera un solo nodo confiable no comprometido, la privacidad de los interlocutores estaría garantizada debido a que sería imposible establecer correspondencia entre los mensajes que le llegan y los que salen de él.

Para que sea efectiva la protección de la identidad es necesario que se preserve la confidencialidad de la propia información que el origen quiere enviar al destino. Si no se hiciera, un simple análisis de tráfico podría identificar cual es el recorrido que hace cada mensaje desde el origen al destino.

Observar que el enrutado anónimo no asegura el que la entidad origen sea desconocida para la entidad destino. Esto se debe a que los protocolos de nivel superior pueden transmitir información sobre la identidad. Por ejemplo un servicio web puede usar cookies o simplemente pedir que nos identifiquemos. Cuando queremos un anonimato a nivel de aplicación es bueno configurar el cliente adecuadamente y protegernos usando proxys que modifican los contenidos en este sentido. Por ejemplo para conseguir más privacidad cuando navegamos por la web es recomendable configurar el navegador adecuadamente (ej. deshabilitando cookies, no permitiendo plugins Java o deshabilitando el historial) y redirigir el tráfico hacia un proxy web intermedio (Ej. privoxy o polipo) que nos filtre contenido que puede ser aprovechado para violar nuestra privacidad (ej. cookies o cabeceras HTTP que puedan ser usadas para identificar).

Implementación thumb|right|350px|Estructura de la transmisión de los datos con encaminamiento cebolla. El encaminamiento cebolla aprovecha la idea de Chaum de esconder la relación entre el origen y el destino de una información encapsulando los mensajes en capas de criptografía de clave pública. Aplicando esta idea para implementar un modo de encaminamiento, lo que hacemos es transmitir mensajes con distintas capas de cifrado (por ese ligero parecido resultante y coincidente con ese interior enrollado del bulbo con un diagrama de la explicación de su viaje, a éstas redes se les conoce como 'de cebolla') sobre un camino compuesto por nodos de mezclado (mixes) convertidos ahora en routers (enrutador de cebolla) donde cada enrutador del camino lo que hace es descifrar ('pela' una capa de la cebolla), transmitir y reordenar los mensajes antes de transmitir al siguiente enrutador.

Cuando un enrutador descifra una capa obtiene una cabecera que puede interpretar y un fragmento cifrado (siguiente capa de la cebolla). A continuación el enrutador envía el fragmento cifrado al próximo salto de acuerdo al contenido de la cabecera y el estado interno del propio enrutador.

Idea primigenia En el encaminamiento cebolla se persigue que cada nodo intermedio (enrutador) conozca solo lo que es estrictamente necesario: La dirección de la entidad que le envía el mensaje y la dirección a la que tiene que redirigir el mensaje. Los mensajes que se intercambian los routers no tienen que proporcionar ninguna información adicional. De esta forma ningún enrutador intermedio sabrá quien es el emisor ni el destinatario de la comunicación. Por ser el último enrutador de la ruta el que directamente se comunica con el destinatario, este será el único que sabrá quien es el destinatario y el contenido del mensaje original que tenía que entregar.Marc O'Morain et all,"Onion Routing for Anonymous Communications "

Para conseguir este objetivo la idea original era seguir el siguiente esquema: El emisor origen de la comunicación establece una conexión de inicialización con un proxy de aplicación (en inglés Application Proxy) que convierte los mensajes del protocolo específico de la aplicación a un formato genérico que pueda ser manejado por los routers. A continuación el proxy de aplicación envía los mensajes a un Onion Proxy (se le suele llamar nodo OP), el cual decide la ruta hacia el destino y construye la estructura de datos que se va a enviar al siguiente nodo y a la que se llama onion ('cebolla' en inglés) o onion forward ('cebolla hacia adelante', para indicar el sentido de la comunicación). La estructura de datos tiene una capa cifrada por cada enrutador que vaya a formar parte del circuito. Si representa el cifrado usando la clave pública PK, representa el descifrado usando la clave privada y el onion proxy inicial decide que se va a usar la ruta <4,3,5> de routers, entonces el paquete que se envía al siguiente enrutador puede ser representado por: . La estructura de datos es enviada por el onion proxy al entry funnel (punto de entrada al canal). El cual es un onion enrutador (nodo OR) usado como punto de entrada a la red de encaminadores de la red cebolla. Este enrutador descifra el paquete (pela su capa de la 'cebolla') y obtiene la dirección del siguiente nodo OR en el camino del mensaje. A continuación el entry funnel coge el resto del mensaje y lo manda al siguiente onion router. Así se continúa hasta llegar al onion router que actúa como nodo de salida al que llama exit funnel. Este nodo descifra y obtiene el mensaje que originalmente produjo el proxy de aplicación. Este mensaje se envía a la dirección destino especificada. Cuando el receptor envía una respuesta a un mensaje particular, el exit funnel lo convierte al protocolo genérico, lo cifra con su clave privada y lo envía de vuelta al onion router del que le vino el mensaje original. Cada onion router opera de forma similar cifrando la respuesta y lo envía de vuelta obteniendo una estructura de datos, a la que se llama reply onion o onion forward, que tiene la siguiente estructura:

El mensaje llega al onion proxy el cual descifra usando las claves públicas de los onion routers que escogió como camino del mensaje original.

Problemas Actualmente hacer que los sistemas que usan encaminamiento cebolla sean seguros es un área de investigación en activo. Se están desarrollando muchos estudios de mejoras, pero se siguen teniendo puntos débiles que hay que subsanar. Aunque no hay propuesta definitiva se han desarrollado una serie de técnicas que han demostrado ser efectivas para mejorar las prestaciones y el grado de seguridad.

Confusión entre paquetes de entrada y de salida en los routers Si analizamos el tráfico de entrada y salida de cada enrutador podemos llegar a establecer una correspondencia y establecer qué paquete de salida se corresponde con cierto paquete de entrada. Aplicando este análisis a todos los routers podemos llegar a establecer quien se está comunicando con quien. Para evitar que se pueda llegar a este tipo de conclusiones se pueden tomar distintas estrategias: Introducir retardos artificiales en el tiempo de proceso de los mensajes en los routers Introducir tráfico de relleno, esto es, paquetes que tienen información inútil y que su única función es confundir al posible atacante. Hacer que el tráfico se realice a través de mensajes de tamaño fijo. A estos paquetes se les suele llamar células. Si los mensajes que circulan por la red no son de tamaño fijo nos podríamos basar en este tamaño para hacer conjeturas sobre que paquete de entrada se corresponde con qué paquete de salida.B V V Sri Raj Dutt et all,"Implementation of Onion Routing" Hacer que los paquetes, en lugar de viajar en solitario, viajen agrupados y junto a ellos viaje información de relleno e información de control (por ejemplo instrucciones para los retardos en los nodos). Todo ello se encapsula en un paquete cifrado. A esta forma de encaminamiento se la conoce como encaminamiento de ajo. Este sistema lo usan por ejemplo I2P o Perfect Dark.Bassam Zantout y Ramzi A. Haraty,"I2P Data Communication System", Lebanese American University, ICN 2011

Proxy de aplicación En este sistema se requiere un proxy de aplicación para cada protocolo de aplicación soportado. Esto conlleva mucho trabajo y provoca que algunos proxys no sean escritos nunca y por tanto algunas aplicaciones nunca sean soportadas. Por este motivo, en posteriores diseños de redes que usan encaminamiento o enrutación cebolla (Ej. TOR), se suele usar un protocolo como interfaz genérico (Ej. SOCKS) de forma que toda aplicación con soporte en ese protocolo genérico puede usar la red cebolla para realizar comunicaciones anónimas sin necesidad de modificaciones adicionales. Ese protocolo genérico tiene que dar soporte a distintos protocolos y al final los múltiples posibles protocolos de entrada se convierten en uno solo. Por ejemplo el protocolo SOCKS permite tener por debajo cualquier tipo de tráfico TCP/IP.

Posible reinyección de mensajes