Vista general
Esta página contiene una introducción a la terminología y funcionamiento de los túneles I2P, con enlaces a páginas más técnicas, detalles y especificaciones.
Como se ha explicado brevemente en el class="marksource tag">/es/docs/how/intro">introductionclass="marksource tag">, I2P construye "túneles" virtuales -class="marksource newline" title="New line"> caminos temporales y unidireccionales a través de una secuencia de ruters. Estos class="marksource newline" title="New line"> túneles estan clasificados como túneles de entrada (sonde todo class="marksource newline" title="New line"> va hacia el creador del túnel) o túneles de salida class="marksource newline" title="New line"> (donde el creador del túnel envía los mensajes lejos de él). Cuando Alice class="marksource newline" title="New line"> quiere enviar un mensaje a Bob, ella (normalmente) lo envía a uno de lass="marksource newline" title="New line"> sus túneles de salida ya existentes con las instrucciones para el punto final de ese túnel class="marksource newline" title="New line"> para que sea enviado al ruter gateway hasta los túneles de entrada de Bob class="marksource newline" title="New line">, que por turnos lo llevarán hasta Bob.
A: Gateway de salida (Alice) B: Participante de salida C: Punto final de salida D: Puerta de salida de entrada E: Participante de entrada F: Punto final de entrada (Bob)
Vocabulario de los túneles
- Túnel puerta de salida, gateway - el primer ruter en un túnel. Para los túneles de entrada, este es el mencionado en el LeaseSet publicado en la base de datos de la red. Para los túneles de salida, la gateway es el ruter original (ej, A y D arriba)
- Túnel punto final, endpoint - el último ruter en un túnel (ej, C y F arriba)
- Túnel participante - todos los ruters en un túnel excepto la puerta de salida o el punto final (ej, B y E arriba)
- Túnel de n-saltos - un túnel con un número específico de saltos entre routers I2P, ej.:
- Túnel de 0 saltos - un túnel donde la puerta de salida, gateway, es también el punto final, endpoint.
- Túnel de 1 salto - un túnel donde la puerta de salida habla directamente con el punto final.
- Túnel de 2 (o más) saltos - un túnel donde hay al menos un túnel intermedio participante, (el diagrama de arriba incluye dos túneles de 2 saltos - uno de salida desde Alice, uno de entrada hacia Bob)
- ID del túnel - Un entero de 4 bytes diferente para cada salto en un túnel, y único a lo largo de todos los túneles en un ruter. Elegido aleatoriamente por el creador del túnel.
Infomación de la construcción del túnel
A los ruters con los tres roles (puerta de salida, participante, punto final) le son dadas diferentes piezas de información en el mensaje de creación de túnel inicial para poder lleva a cabo sus tareas:
- El túnel puerta de salida obtiene:
- Clave de cifrado de túnel - una clave privada AES para cifrar los mensajes, y las instrucciones para el siguiente salto.
- Clave IV del túnel - Una clave privada AES para cifrar doblemente el IV hasta el siguiente salto.
- Clave de repuesta - Una clave privada AES para cifrar la respuesta a la petición de construcción del túnel.
- IV de respuesta - El IV para cifrar la respuesta de la petición de construcción del túnel.
- ID del túnel - In entero de 4 bytes (sólo para las puertas de salida de entrada)
- Siguiente salto - Cual es el siguiente ruter en el camino (a no ser que sea un túnel de 0 saltos, y la puerta de salida sea también el punto final)
- ID del túnel siguiente - La ID del túnel en el siguiente salto
- Todos los túneles intermedios participantes obtienen:
- Clave de cifrado de túnel - una clave privada AES para cifrar los mensajes, y las instrucciones para el siguiente salto.
- Clave IV del túnel - Una clave privada AES para cifrar doblemente el IV hasta el siguiente salto.
- Clave de repuesta - Una clave privada AES para cifrar la respuesta a la petición de construcción del túnel.
- IV de respuesta - El IV para cifrar la respuesta de la petición de construcción del túnel.
- ID del túnel - Un entero de 4 bytes
- Siguiente salto - cuál es el siguiente ruter en el camino
- ID del túnel siguiente - La ID del túnel en el siguiente salto
- El túnel punto final obtiene:
- Una clave de cifrado de túnel - una clave privada AES para cifrar los mensajes e instrucciones para el punto final (para sí mismo)
- Una clave IV de túnel - una clave privada AES para cifrar dos veces el IV para el punto final (en sí mismo)
- IV de respuesta - una clave privada AES para cifrar la respuesta para la petición de construcción del túnel (sólo para los puntos finales de salida)
- IV de respuesta - el IV para cifrar la respuesta para la petición de construcción del túnel (sólo para los puntos finales de salida)
- ID del túnel - Un entero de 4 bytes (sólo para los puntos finales de salida)
- Ruter de respuesta - para enviar la respuesta a través de la puerta de salida del túnel de entrada (sólo puntos finales de salida)
- ID del túnel de respuesta - El ID del túnel del ruter de respuesta (sólo para puntos finales de salida)
Los detalles están en las especificaciones de creación de túneles.
Agrupación de túneles
Varios túneles pueden ser agrupados en un "grupo de túneles" para algún fin en particular como se describe en las especificaciones de túneles. Los grupos de túneles usados por el ruter mismo se llaman "túneles exploratorios". Los grupos de túneles usados por las aplicaciones se llaman "túneles cliente".
Tamaño del túnel
Como se menciona arriba, a cada una de los solicitudes de cliente a las que sus routers proporcionan túneles, incluyen al menos un cierto número de saltos. La decisión acerca del número de routers a tener en los túneles de entrada y salida del cliente, tiene un efecto importante en la latencia, la eficiencia, la fiabilidad, y el anonimato proporcionados por I2P - cuantos más pares (`peers`) tengan que atravesar los mensajes, más tardarán en llegar allí y más probable será que uno de esos routers falle prematuramente. Cuantos menos routers en un túnel, más fácil es para un adversario montar ataques de análisis de tráfico y socavar el anonimato de alguien. Las longitudes de los túneles se especifican por los clientes a través de las opciones I2CP. El número máximo de saltos en un túnel es 7.
Túneles de 0-saltos
Sin routers remotos en un túnel, el usuario tiene una denegabilidad plausible muy básica (ya que ninguno de nosotros sabe con seguridad si el par que les envió el mensaje no estaba simplemente reenviándolo al formar parte del túnel). Sin embargo, sería realmente fácil montar un ataque de análisis estadístico y observar que los mensajes apuntando a un destino específico siempre son enviados a través de una única pasarela (`gateway`). El análisis estadístico contra túneles de salida de 0-saltos son más complejos, pero podrían mostrar una información similar (aunque sería ligeramente más difícil de montar).
Túneles de 1-salto
Con sólo un router remoto en un túnel, el usuario tiene tanto denegabilidad plausible como anonimato básico, siempre que no se esté enfrentando a un adversario interno (como se describe en el modelo de amenaza). Sin embargo, si el adversario está ejecutando un número suficiente de routers de forma que el único router remoto del túnel sea con frecuencia uno de aquellos comprometidos, será capaz de montar el ataque de análisis estadístico de tráfico descrito anteriormente.
Túneles de 2-saltos
Con dos o más routers remotos en un túnel, los costes de montar el ataque de análisis de tráfico aumentan, ya que muchos routers remotos tendrían que estar comprometidos para montarlo.
Túneles de 3 (o más)-saltos
Para reducir la susceptibilidad a algunos ataques, se recomiendan 3 o más saltos para el mayor nivel de protección. Además, estudios recientes concluyen que más de 3 saltos no proporcionan protección adicional.
Longitudes predeterminadas de los túneles
El router usa túneles de 2-saltos de forma predeterminada para sus túneles exploratorios. Las configuraciones por defecto de los túneles de cliente son establecidas por la aplicación usando las opciones I2CP. La mayoría de las aplicaciones usa 2 o 3 saltos como su configuración por defecto.
Comprobación de túneles
Todos los túneles son probados periódicamente por sus creadores mediante la transmisión de un DeliveryStatusMessage (mensaje de estado de entrega) sobre un túnel de salida, ligado a otro túnel de entrada (probando ambos túneles a la vez). Si falla un número concreto de pruebas consecutivas, se marca como no funcional. Si se usó para un túnel de entrada de cliente, se crea un nuevo LeaseSet (grupo de túneles hacia un destino). Además, los fallos en las pruebas de túneles se reflejan en el ratio de capacidad en el perfil del par (`peer`).
Creación de túneles
La creación de túneles se realiza mediante el enrutamiento garlic (ajo) de un mensaje de construcción de túnel hacia un router, requiriendole que participe en el túnel (proporcionándole toda la información necesaria, como la anteriormente descrita, junto con un certificado, que ahora mismo es un certificado 'null' (vacío), pero que soportará hashcash (un sistema de prueba de trabajo) u otros certificados no-gratuitos cuando sea necesario). Ese router reenvía el mensaje al siguiente salto en el túnel. Los detalles están en las especificaciones de creación de túneles.
Tunnel encryption
El cifrado multi-capa es realizado por el cifrado garlic (ajo) de los mensajes de túnel. Los detalles están en la especificación de túneles. El IV (vector de inicialización) de cada salto está cifrado con una clave aparte, como se explica allí.
Trabajo futuro
- Podrían usarse otras técnicas de evaluación de túneles, tales como la envoltura garlic (`ajo`) de un número de pruebas en forma de dientes (`cloves`, del ajo), comprobando separadamente a los participantes individuales en los túneles, etc.
- Cambiar a configuración predeterminada de túneles de 3-saltos.
- En una versión de un futuro lejano, opciones especificando las configuraciones de depositado, mezclado y generación de datos de relleno criptográficamente descartables,`chaff,` podrían ser implementadas.
- En una versión de un futuro lejano, límites en la cantidad y tamaño de los mensajes permitidos durante la vida del túnel podrían ser implementados (ej. no más de 300 mensajes o 1 MB por minuto).