I2P (Invisible Internet Project) es una solución que asegura las comunicaciones entre varios puntos en entornos poco fiables, dando un alto grado de anonimato y ofreciendo servicios de cifrado en cada extremo de la comunicación y en todos los nodos que intervienen en ella. I2P es el resultado de años de esfuerzo por parte de desarrolladores alrededor del mundo con una única intensión: Crear una red en la que cualquiera pudiera comunicarse libremente sin censuras, de forma segura y sobre todo, anónima.

I2P, al igual que cualquier otra red de este tipo, no garantiza el anonimato a un 100% dado que puede ser una tarea prácticamente imposible delimitar todos los posibles ataques que puede sufrir la privacidad de un usuario, sin embargo todos los esfuerzos de esta red están enfocados en dificultar dichos ataques, de tal forma que si alguien desea descubrir la identidad real de un usuario utilizando I2P, tendrá un trabajo considerable por delante y aun así es probable que no consiga resultados positivos para él.

El funcionamiento de I2P es similar al funcionamiento de otras redes como TOR, donde el trafico es enrutado por varios puntos de la red utilizando  cada uno de los extremos de la comunicación (cadenas de proxy), además en I2P no existen nodos “confiables” como en TOR y sus autoridades de directorio, toda la red es completamente descentralizada. No obstante, aunque tenga similitudes con redes tan conocidas como TOR, I2P no intenta mejorar el anonimato de un usuario ocultando las partes que participan en la comunicación, no se oculta el emisor ni el destinatario, I2P esta diseñado para que los participantes se comuniquen entre ellos de forma anónima, esto quiere decir, que aquellos nodos que se encuentren dentro de dicha red, podrán comunicarse entre si, sin embargo aquellos que no hagan parte de dicha de red, no tendrán acceso al contenido de la comunicación entre dos o más entidades. Un ejemplo de esto son los servicios que se ejecutan en el interior de dicha red, por ejemplo existen servidores web, proxies HTTP, servidores SSH, etc. es importante notar que la habilidad de los usuarios de utilizar estos servicios es crucial, dado que, como se encuentran en ejecución dentro de la red I2P, ante cualquier entidad externa, se trata de una entidad anónima.

I2P es una red orientada al mensaje, donde cada mensaje es enrutado a su correspondiente destino, el uso de esta red por parte de los usuarios normalmente se lleva a cabo por medio de las aplicaciones diseñadas para tratar con I2P y rara vez se utiliza de forma directa, es así como aplicaciones como “eepsites” (servidores web dentro de I2P), I2PSnark (un cliente para BitTorrent), I2PTunnel (servicios para enrutar flujo TCP/IP para aplicaciones comunes como IRC o SSH) entre otras, ayudan a sus usuarios a interactuar con I2P casi que de forma “transparente”.

Anteriormente se ha mencionado que en las entidades que hacen parte de la red I2P, no existe tal cosa como una técnica de “ocultación” del origen de la petición a su destino final, tal como ocurre con TOR, en su lugar tanto el destinatario como el emisor se “conocen”, la razón de esto, como ya se ha dicho, es debido a que I2P es una red que se enfoca en el concepto de “mensaje”, donde las entidades (personas localizadas en cualquier punto geográfico) se comunican en ambientes hostiles proporcionando un buen nivel de anonimato, ya que el trafico de todas las personas que se comunican allí es mezclado y “difuminado” dando suficiente cobertura tanto a personas que requieren un nivel de anonimato alto (cuyo adversario tiene una buena cantidad de recursos para encontrar a alguien) como aquellas que no tienen requerimientos tan exigentes (cuyo adversario es una entidad débil), los mensajes de quienes tienen altos requerimientos de anonimato y aquellos que no tienen tales exigencias, son esencialmente indistinguibles de los demás, lo que permite cubrir estas necesidades utilizando la misma red.

FUNCIONAMIENTO DE I2P

Una de las principales diferencias entre I2P y TOR es que I2P se enfoca en el intercambio de mensajes entre diferentes usuarios de la red sin ocultar el origen de la petición al destino (tal como lo hace TOR), además de proporcionar un mecanismo de cifrado múltiple en cada uno de los nodos por los aque pasan los mensajes. Ahora bien existen algunos términos que deben tenerse en cuenta para comprende el funcionamiento de I2P a un nivel técnico, la siguiente imagen enseña el procedimiento habitual que utilizan dos entidades para entablar comunicaciones

En la imagen anterior, se enseñan los elementos que normalmente se encuentran en una red I2P, en primer lugar, se encuentra el “NODO X” que en este caso actúa en primera instancia como emisor del mensaje, dicho mensaje es entregado a su destino que es el “NODO Z” este a su vez, siguiendo el mismo mecanismo actúa como emisor para responder al mensaje enviado por el “NODO X” Ahora bien, como se ha dicho toda la información viaja cifrada por una serie de Routers que son todos los nodos que se indican con las letras de la A(x) a la F(x), no obstante el color de dichos routers indican la dirección y el papel que juegan en la conexión, para dejarlo más claro, es necesario declarar en primera instancia los términos relacionados con los túneles creados en I2P:

Inbound Tunnel: Se trata del túnel entrante, encargado de recibir mensajes y enrutarlos al emisor.

Outbound Tunnel: Se trata del túnel saliente, encargado de enviar mensajes y enrutarlos al receptor.

Tunnel Gateway: Se trata del primer router en el túnel, el cual recibe peticiones de salida y entrada dependiendo del tipo de túnel, Para los túneles de Salida (Outbound) el gateway es el router de origen.

Tunnel Endpoint: El ultimo router en el túnel, es el encargado de hacer la entrega efectiva del mensaje

Tunnel Paticipant: Todos los demás routers que se encargan de retransmitir el mensaje hasta llegar al EndPoint.

Tunnel ID: Cada router tiene un identificador único que es un entero de 4 bytes generado aleatoriamente por el creador del túnel.

N-Hop Tunnel: Un túnel con un numero especifico de routers en su estructura interna, por ejemplo:

0-Hop Tunnel: Se trata de un túnel con un solo router, el cual actúa como gateway y como EndPoint.

1-Hop Tunnel: Se trata de un túnel con un gateway y un único EndPoint

2-Hop Tunnel: Se trata de un túnel con un gateway un participant y un EndPoint

n-Hop Tunnel: Se trata de un túnel con un gateway, “n” participants y un EndPoint.

Dada la terminología, se puede identificar cada una de las partes indicadas en la imagen anterior, separando cada uno de los túneles que poseen las dos entidades que se comunican:

OUTBOUND TUNNEL NODO X

Ao: Outbound Gateway el cual es el primer router en recibir los mensajes de salida (outbound) de “NODO X”

Bo: Outbound Participant el cual es el punto intermedio entre el gateway y el endpoint de salida (Outbound).

Co: Outbound EndPoint se trata del nodo de salida, encargado de enviar los mensajes del “NODO X” al Inbound Gateway del “NODO Z” (Di).

INBOUND TUNNEL NODO X

Ci: Inbound Gateway se trata del nodo encargado de recibir el mensaje enviado desde el Outbound EndPoint del “NODO Z” (Do).

Bi: Inbound Participant se trata del nodo intermedio entre el gateway y el endpoint de entrada (Inbound)

Ai: Inbound EndPoint se trata del nodo final encargado de entregar los mensajes provenientes, en este caso concreto de “NODO Z”.

OUTBOUND TUNNEL NODO Z

Do: Outbound EndPoint se trata del nodo encargado de enviar mensajes desde el “NODO Z” hacia el Inbound Gateway del “NODO X” (Ci).

Eo: Outbound Participant se trata del nodo intermedio entre el gateway y el endpoint de salida (Outbound)

Fo: Outbound Gateway el cual es el primer router en recibir los mensajes de salida (outbound) de “NODO Z”

INBOUND TUNNEL NODO Z

Di: Inbound Gateway se trata del nodo encargado de recibir el mensaje enviado desde el Outbound EndPoint del “NODO X” (Co).

Ei: Inbound Participant se trata del nodo intermedio entre el gateway y en endpoint de entrada (Inbound)

Fi: Inbound EndPoint se trata del nodo final encargado de entregar los mensajes provenientes, en este caso concreto de “NODO X”.

Este es el funcionamiento básico de I2P, aunque se han omitido por simplicidad algunos conceptos sobre su funcionamiento relacionados con el cifrado de datos entre nodos y el registro de Inbound/Outbound Tunnels en la red, todo esto y más se ira desvelando en próximas entradas. A continuación se indica el proceso de instalación de I2P

INSTALANDO I2P

El proceso de instalación de I2P es sencillo, se requiere en primer lugar tener Java instalado en la máquina, con la versión 1.6 como mínimo, además también se necesita tener instalado apache ANT que puede ser obtenido desde http://ant.apache.org/bindownload.cgi, la guía de instalación y configuración de ANT se encuentra aquí: http://ant.apache.org/manual/index.html

Una vez se encuentra instalado ANT se procede a descargar I2P (descargar el tar-ball para mayor control) desde aquí: http://www.i2p2.de/download.html

Posteriormente descomprimir y ejecutar el siguiente comando con ant:

>ant pkg

Este comando intentará desempaquetar y compilar todas las clases Java del software, además de esto, también es importante anotar que I2P utiliza un servidor web Jetty, con lo cual, durante su instalación, pedirá confirmación por parte del usuario para descargar e instalar dicho servidor también.

Después de que el proceso de construcción termine, es necesario instalar el software con el siguiente comando:

>java -jar install.jar

De esta forma se ejecutará la interfaz gráfica de instalación que guiará al usuario por cada paso de la instalación, uno de dichos pasos es la selección del directorio de instalación el cual por defecto es “/usr/local/i2p” este directorio esta bien para instalar el sistema, sin embargo puede ser cambiado por cualquier otra localización.

Aunque hasta este punto I2P puede ser iniciado, es posible que antes de hacerlo por primera vez se desee cambiar las rutas de instalación de los ficheros de configuración y demás para hacer una instalación “portable” (es importante hacer esto antes de iniciar por primera vez I2P) en el caso de que no se cambien estas propiedades el valor por defecto de todos estos directorios será “~/.i2p”. Para comprender esto mejor, solo es necesario comprender que una instalación “portable” puede ser utilizada en cualquier sitio, ya que todos los ficheros de configuración se ubican en el mismo directorio de instalación, por defecto I2P ubica todos los ficheros de configuración propios de la instalación en un directorio que depende directamente, del usuario que ejecute el comando de arranque del sistema, por ende, cuando se lleva a cabo una instalación portable se cuenta con la ventaja de que se puede coger el directorio completo donde se ha instalado I2P y posteriormente llevarlo a otra máquina o ejecutarlo desde un dispositivo USB. Para hacer esto se deben editar dos ficheros que son: <DIR_INSTALL>/i2proute y <DIR_INSTALL>/wrapper.config y descomentar las secciones etiquetadas con “PORTABLE”

Por otro lado, no se recomienda utilizar el usuario ROOT para ejecutar I2P, en su lugar se recomienda utilizar un usuario con privilegios limitados, para estos casos, se puede editar el fichero <DIR_INSTALL>/i2proute y descomentar la opción RUN_AS_USER incluyendo el usuario con privilegios limitados.

Una vez aclarado los puntos anteriores se puede proceder a ejecutar I2P por primera vez

>sh i2prouter start

Starting I2P Service…

Waiting for I2P Service…..

running: PID:14506

Una vez hecho esto, el sistema intentará abrir el navegador web por defecto, enseñando la consola administrativa de I2P.

Por otro lado, si se desea instalar como servicio, solamente es necesario ejecutar el comando i2proute sin ningún parámetro, en cualquier caso, es posible establecer algunas opciones más al comando y estas son:

>sh i2prouter stop

Stopping I2P Service…

Stopped I2P Service.

>sh i2prouter restart

Stopping I2P Service…

I2P Service was not running.

Starting I2P Service…

Waiting for I2P Service…..

running: PID:15164

>sh i2prouter status

I2P Service is running: PID:15164, Wrapper:STARTED, Java:STARTED

Por el momento esto es todo, sin embargo en las próximas entradas de esta serie se profundizará mucho más sobre el uso de I2P y como beneficia al anonimato.