¿Cómo funciona?

Esta sección explicará la operación de CENO y Ouinet recorriendo una serie de escenarios. La terminología y los conceptos importantes para Ouinet serán introducidos (resaltados en negrita) y usados con posterioridad, por razones de eficiencia y para evitar confusiones.

Accediendo directamente al contenido

EL Navegador CENO es un ejemplo de una aplicación que usa la tecnología Ouinet para descargar y compartir contenido Web. Llamamos a tal aplicación un cliente Ouinet. Cuando usas tu cliente (ej., CENO) para intentar acceder a algún contenido X, alojado en un servidor Web (al que llamaremos servidor de origen de X), tu cliente intenta contactar al servidor de origen a través de Internet, directamente o bien vía alguna otra máquina configurada para contactar servidores Web de parte de otros (un así llamado servidor proxy), y luego solicita el contenido deseado. Esto no es diferente de la manera en que funciona cualquier navegador Web normal.

Nota técnica: De hecho, hay una pequeña sorpresa. Ya que el cliente actúa como un proxy HTTP ejecutándose en tu dispositivo, para que éste sea capaz de descifrar y actuar sobre solicitudes de contenido HTTPS, la aplicación que está usando al cliente (en este caso, la parte del navegador Web – como Firefox en CENO) necesita aceptar un certificado especial emitido por el cliente mismo (y usado solamente en tu dispositivo). El Navegador CENO se hace cargo de configurar este certificado para su uso privado, por lo que no necesitas preocuparte.

Sin embargo, estas rutas directas podrían no estar disponibles. Por ejemplo, tu proveedor de servicio de Internet (ISP) podría estar bloqueando el acceso al servidor de origen de X o al proxy, debido a una orden estatal (aún si otro tráfico está permitido). Como en el caso del usuario del cliente en la parte superior izquierda ilustrado a continuación, ambos intentos de alcanzar el contenido X (el pequeño documento cercano a su servidor de origen) fallarían para ti. Puede que también notes el nodo "inyector" en el diagrama. Explicaremos eso en un momento.

Figura: El cliente no puede alcanzar al contenido directamente

Con un navegador normal tu suerte se habría acabado. Sin embargo, con Ouinet puedes solicitarles a otros clientes sus copias del contenido X, en el caso que la tuvieran. Veamos cómo Ouinet realiza esta solicitud.

Buscando contenido compartido

El conjunto de todo el contenido almacenado por clientes Ouinet es llamado caché distribuida, esto es, un almacenamiento ubicado en múltiples lugares. ¿Pero cómo puede encontrar tu cliente qué otros clientes que forman la caché tienen el contenido deseado?

Cualquier navegador Web, para acceder al contenido X, necesita conocer su localizador de recursos uniforme (URL), que es la dirección en la barra de direcciones del navegador, ej.: https://example.com/foo/x. A partir de ese URL, un navegador normal inferiría que tiene que contactar al servidor Web llamado example.com usando el protocolo HTTP (el idioma usado para intercambiar recursos Web) sobre SSL/TLS (una capa de seguridad sobre TCP, las reglas de Internet para que los programas se comuniquen unos con otros), y solicitar el recurso /foo/x.

Ouinet busca al contenido de una manera diferente. Usa un índice parecido al de un libro: en el índice de la caché distribuida de Ouinet buscas al URL completo del contenido, y obtienes una lista de clientes que tienen una copia del mismo. El índice en sí mismo está distribuido, con los clientes haciéndose cargo de anunciar a otros qué contenido tienen. En realidad, solamente es anunciada una pista sobre cada URL, por lo que alguien espiando el tráfico de tu dispositivo no puede decir qué contenido tienes, pero alguien buscando un contenido particular puede seguir las pistas hacia tu cliente.

Nota técnica: Una manera en que es implementado el índice es usando la tabla de hash distribuida (DHT) de BitTorrent para obtener las direcciones (IP y puerto) de los clientes con el contenido. La DHT usa una función hash criptográfica para computar la clave de la tabla a partir del URL del contenido, y algunos otros parámetros como la clave del inyector (ver a continuación), por lo que varios índices pueden coexistir.

A su vez, el Navegador CENO no anuncia el URL de cada recurso único que contiene: ya que cualquier página moderna tiene decenas o cientos de componentes (imágenes, hojas de estilo, scripts…), eso crearía una gran cantidad de tráfico. Por lo tanto, los recursos son agrupados bajo el URL de la página que los referencia, y solo ese URL es anunciado. Esto se hace con la ayuda de una extensión ad hoc del navegador (descrita más adelante).

De los clientes que ofrecen algún contenido en particular sobre la caché distribuida se dice que están sembrándolo, o que son sus sembradores (estos términos vienen del mundo de la compartición de archivos P2P). Volviendo a nuestro escenario de ejemplo, hay dos clientes sembrando algún contenido. Desafortunadamente, uno está sembrando el contenido Y y el otro el contenido Z, por lo que tu cliente no encontraría entradas para el contenido X en el índice de la caché distribuida, como se ilustra abajo:

Figura: Contenido no encontrado en la caché distribuida

Afortunadamente, Ouinet ofrece una manera de descargar tal contenido, y aún más, hacerlo disponible a otros clientes en la caché distribuida. Por favor, sigue leyendo para aprender cómo.

Compartiendo contenido nuevo

Proxys en esteroides

En Ouinet, hay clases especiales de servidores proxy, llamados inyectores, que están (con suerte) en el lado libre de Internet, e intentan con todas sus fuerzas permanecer alcanzables a pesar de las medidas de bloqueo:

  • En primer lugar, las conexiones entre clientes e inyectores están cifradas (usando SSL/TLS estándar, como en HTTPS) para evitar que los atacantes espiando el tráfico web identifiquen a los inyectores.Dicho sea de paso, los certificados de los inyectores vienen en conjunto con el Navegador CENO, permitiéndole detectar a los atacantes que están intentando hacerse pasar por inyectores.

  • Si el cifrado no fuera suficiente, las conexiones a inyectores pueden usar técnicas especiales de ofuscación (como I2P y los Transportes Conectables de Tor), para hacer a la identificación aún más dificultosa.

  • Aún si un inyector fuera identificado y el acceso a él fuera bloqueado por tu ISP, hay varios de ellos, y no importa a cuál contacta tu cliente por la Internet.

    • Algunos o todos los inyectores podrían ser bloqueados, pero el conjunto de inyectores puede variar a través del tiempo (añadiéndose nuevos).Tu cliente no necesita saber sus direcciones de Internet con anticipación; en vez de eso, reliza una búsqueda en el enjambre de inyectores (otro término de la compartición de archivos P2P), un índice distribuido de entrada única similar al índice de la caché distribuida, el cual suministra las direcciones de los inyectores disponibles en este momento.

    • Finalmente, aún si tu cliente no fuera capaz de alcanzar ningún inyector, algunos otros clientes podrían. Cuando un cliente es capaz de alcanzar un inyector y cree que es alcanzable por otros clientes, se transforma en un cliente puente, y agrega su propia dirección de Internet al enjambre de puentes, otro índice distribuido de entrada única.Por lo que tu cliente puede buscar tal dirección, conectar al puente tras ella, y decirle que establezca otra conexión a un inyector de su parte, creando un túnel entre tu cliente y el inyector. Luego, una conexión puede ser establecida entre ellos dentro del túnel.

    Por favor ten en cuenta que, ya que las conexiones cliente a inyector están cifradas, los puentes no son capaces de ver la información fluyendo entre ellos.

Un inyector puede comportarse como un servidor proxy normal (aunque extra disponible), y esto es efectivamente lo que hacen actualmente los clientes Ouinet (incluyendo al Navegador CENO) cuando tratan de acceder contenido a través de un proxy. En este caso, el inyector tampoco verá información real fluyendo entre tu cliente y el servidor de origen (a menos que en sí misma sea una conexión HTTP común, no cifrada).

Pero existen otras herramientas que te permiten alcanzar proxys en condiciones severas de interferencia de red, entonces, ¿qué tienen de especial los inyectores Ouinet?

Confiando en el contenido compartido

Bien, el punto es que un inyector no solo descarga contenido de parte de tu cliente, también te permite compartir ese contenido con otros con posterioridad, aún cuando no haya más acceso al inyector o a la mayoría de Internet.

Tu podrías, por supuesto, descargar una página desde tu navegador y copiar los archivos resultantes para otras personas, lo cual estaría bien si se conocieran entre todos. ¿Pero qué pasa si recibiste tales archivos de una persona desconocida? ¿Cómo puedes estar seguro que el contenido realmente vino del sitio web del que dice ser, que fuera descargado en una cierta fecha o que la información en ellos no fue manipulada?

Queremos que el uso de CENO y Ouinet se expanda y provea tanto contenido para tantas personas como sea posible, por lo que queremos que seas capaz de recibir contenido de personas que no conoces. Para lograr que aceptes tal contenido, Ouinet usa la firma de contenido: tu cliente está configurado para confiar en el contenido que está firmado usando una clave especial propia de los inyectores. En cualquier momento en que un cliente le dice a un inyector que descargue algún contenido Web para compartir, el inyector lo obtiene desde el servidor de origen, usa la clave para firmarlo, y retorna el contenido firmado al cliente.

Nota técnica: De hecho, el inyector firma bloques individuales de datos en la medida en que llegan, por lo que aún si la conexión es cortada a la mitad mientras se está descargando un archivo grande, los datos descargados aún pueden ser compartidos por el cliente que los recibió.

Diferentes inyectores podrían tener diferentes claves, por lo que puedes elegir en qué inyectores confiar. Imagínatelo así: podrías confiar en un documento firmado por un notario público de tu país, sin importar quién te lo dió (nacional o extranjero), mientras que no te sería requerido aceptar un documento firmado por un notario de otro país. El Navegador CENO ya está configurado para confiar en un conjunto de inyectores administrados por eQualitie.

Nota técnica: Los inyectores usan un par de claves pública/privada para crear firmas Ed25519; las claves públicas son suficientemente pequeñas para permitir ser enviadas junto con las firmas, y codificadas como 64 caracteres hexadecimales o 52 caracteres Base32. Es más, podrían ser intercambiadas sobre el teléfono o escritas en un pedazo de papel.

Inyección de contenido

Recuerda que en nuestro escenario de ejemplo tu cliente ya había intentado descargar el contenido X directamente del servidor de origen y desde otros clientes, sin resultados. El cliente juega su última carta Ouinet e intenta contactar a un inyector confiable para obtener una copia firmada del contenido, que pueda compartir con otros clientes.

En la figura de abajo puedes ver un posible resultado de esa operación: el cliente intenta primero contactar al inyector directamente (ej.: usando una dirección de Internet que obtuvo del enjambre de inyectores), pero, tristemente, ya está bloqueada por tu ISP; afortunadamente, el enjambre de puentes muestra las direcciones de Internet de otros dos clientes que aún son capaces de alcanzar a un inyector. Tu cliente abre un túnel al inyector a través de uno de estos clientes, por lo que el inyector obtiene la solicitud para el contenido X desde tu cliente, y se lo solicita a su servidor de origen.

Figura: El cliente alcanza al inyector

A medida que el contenido X es recibido por el inyector, lo firma con su clave, añade la firma al contenido y lo envía hacia tu cliente a través del túnel por el que arribó (digamos, a través del cliente que está más allá del bloqueo). Una vez que el contenido alcanza a tu cliente, hace tres cosas:

  1. Te lo entrega (en el caso de CENO, muestra el contenido en el navegador).
  2. Guarda el contenido en tu dispositivo para su ulterior sembrado a otros clientes. Permanecerá allí por un periodo de tiempo configurable, o hasta que decidas limpiar todo el contenido almacenado.
  3. Anuncia en el índice de la caché distribuida que está en posesión de una copia de ese contenido, de manera que otros clientes puedan encontrarlo.

La operación combinada completa de descarga, firmado, almacenamiento y anuncio es lo que llamamos inyección de contenido, como se muestra en la figura de abajo.

Figura: El cliente recibe contenido firmado del inyector

Por favor nota que el mecanismo descrito arriba aún requiere que exista alguna ruta a través del bloqueo y hacia el resto de Internet. Pero a veces, esa ruta también faltará: piensa acerca de desconexiones internacionales completas, desastres naturales, o simplemente, congestión excesiva de las pocas rutas existentes (debido a que todos están intentando usarlas). Aquí es donde entra en juego el poder real de la caché distribuida.

Imaginémonos que después de que descargaste el contenido X desde el inyector, un desastre deja a tu región aislada del mundo. Resulta que el contenido X se vuelve especialmente relevante, ya que describe algunas maneras en las cuales puedes ayudar a tu comunidad en tal situación.

En ese momento, una segunda persona usando el Navegador CENO también intenta obtener ese contenido. El acceso al servidor de origen o a cualquier cosa más allá de tu región es imposible, por lo que CENO comprueba el índice de la caché distribuida por ese contenido, y encuentra que tu dispositivo está sembrándolo. CENO obtiene tu dirección de Internet del índice, se conecta a él y solicita el contenido como se muestra abajo.

Figura: El cliente recibe contenido firmado desde otro cliente

Ahora que un segundo dispositivo también tiene una copia del contenido X, anuncia esto en el índice de la caché distribuida, transformándose entonces en un sembrador. Si una tercera persona interesada en ese contenido usa al Navegador CENO para descargarlo, CENO ahora verá dos direcciones en el índice para el contenido: tu dispositivo y el del segundo usuario. Si el contenido es pesado (ej.: un vídeo), este tercer dispositivo podría intentar obtener la mitad del mismo desde cada uno de los otros dispositivos (como se muestra abajo), acelerando entonces la descarga y reduciendo el tráfico que usan.

Figura: El cliente recibe contenido firmado desde múltiples clientes

Finalmente, la situación podría tornarse aún peor, y toda la infraestructura de red comercial y estatal podría apagarse. En este caso, Ouinet y el Navegador CENO también tienen algún soporte para compartición de contenido de dispositivo a dispositivo entre dos clientes que están en la misma red local (ej.: conectados al mismo punto de acceso Wi-Fi), aún si la red no tiene acceso a otras.