IPFS, la nueva web resiliente

ElevenPaths    4 enero, 2019

Cuando analizamos detalladamente cómo funciona la entrega de contenido web en la actualidad, nos damos cuenta que las arquitecturas de estos servicios muchas veces son poco eficientes e inseguras. Mostramos algunos de los problemas y necesidades que nos podemos encontrar al respecto.

Cuando analizamos detalladamente cómo funciona la entrega de contenido web en la actualidad, nos damos cuenta que las arquitecturas de estos servicios muchas veces son poco eficientes e inseguras. En varios de nuestros talks ya hemos analizado diferentes amenazas y mecanismos de protección pero hoy, queremos hablar de algunos de los problemas y necesidades que nos podemos encontrar al respecto:

• Brindar alta disponibilidad: ¿Cómo conseguimos dotar  a nuestro contenido web de una alta disponibilidad  para los usuarios? Para resolver esto se realizan complejas arquitecturas tecnológicas que llegan incluso hasta protocolos de enrutamiento a nivel de los proveedores de comunicaciones. A pesar de ello no se consigue lograr el objetivo final, ya que no se cubren los casos de fallos en la aplicación o en la configuración del servidor web.

• Crecimiento en la cantidad de usuarios: Cada vez hay más usuarios y sus accesos se realizan desde múltiples dispositivos lo que hace que cada vez la cantidad de datos a entregar sea mayor. Otra vez caemos en lo mismo, la eficiencia en el proceso de entrega del contenido.

• Crecimiento en el tráfico: como nuestra cantidad de usuarios crece, también aumenta la cantidad de tráfico. Sumando esto a las nuevas tecnologías web y a las necesidades que los usuarios demandan de ellas, es necesario subir archivos cada vez más pesados a la web.

• Ciberataques y modificaciones no autorizadas (defacements): A nivel de aplicación web, si el servidor web es atacado y, por ejemplo, se borra todo el contenido, los usuarios no verían el contenido hasta que el administrador no restaure los datos desde una copia de respaldo y al mismo tiempo, se solucione la vulnerabilidad de la aplicación. Nos podría surgir entonces otra pregunta, ¿cómo sabemos que el archivo (página web) a la cual estamos haciendo un request es el original? ¿Y si alguien puso un código malicioso en ese archivo después de haberse subido al servidor?

• Privacidad y censura en Internet: El diseño del protocolo actual de navegación (HTTP) hace que la entrega de contenido web sea centralizado. Como comentábamos, el contenido siempre se entrega desde un servidor o punto central. Evidentemente, si alguien quisiera controlar el contenido y a quién se entrega, con un diseño centralizado le sería más fácil al ejercer un control sobre el contenido. Pero  entonces entraríamos en un tema de libertad de expresión y otras consecuencias que no son el alcance de este post, aunque haya una estrecha relación.

Las soluciones asociadas a estas problemáticas suelen ser costosas, complejas y sobre todo requieren una inversión en la operación de estos controles y el mantenimiento de los mismos:

  • Redundancia completa de la arquitectura de red, incluyendo, firewalls, servidores, controles de seguridad.
  • Redundancia a nivel de carrier.
  • Controles de integridad en el filesystem de los servidores web.
  • Controles de tráfico para identificar y bloquear ataques a las aplicaciones web.
  • Monitorización de seguridad.
  • Sistemas de replicación.
  • Sistemas de optimización del tráfico.
  • Desarrollo optimizado y seguro de software.

Para optimizar el tráfico y la entrega, podríamos pensar que, si estuviéramos suficientemente cerca de nuestro usuario, la entrega sería más rápida. Esto es así, pero lo difícil es estar cerca de todos nuestros usuarios al mismo tiempo. Por lo cual, la siguiente opción que podemos ver sería distribuir nuestra aplicación web y replicarla en diferentes servidores en Internet. Esto conseguiría que nuestros usuarios tuvieran un servidor más cercano a su ubicación lógica lo que hace que la velocidad de acceso también sea uno de los temas a tratar.

Profundizando un poco más, HTTP es un protocolo que está presente desde año 1991 lo que inevitable nos lleva a plantear que después de 25 años, sería un buen momento para pensar en cambiarlo. El protocolo HTTP hace que el Internet actual tenga una estructura principalmente centralizada, aunque también encontramos usos descentralizados, pero si pensamos en cambiar este protocolo, la estructura hacía la podríamos evolucionar tendería más a buscar una estructura distribuida como se aprecia en la imagen:

 

Evolución del protocolo en Internet imagen

Una de las tecnologías disruptivas que está creciendo más y más, es el Blockchain, y específicamente con Ethereum surgió el concepto de aplicación distribuida (DAPP). Esta aplicación en realidad estaba más distribuida en su backend que en su front. Es decir, la ventaja que nos daba una DAPP es que podemos poner toda su lógica en programas que se encuentran en el blockchain llamados contratos inteligentes, y los datos también en el blockchain.

De esta manera con un simple HTML y un código en JavaScript podríamos hacer llamadas a los contratos inteligentes, siendo entonces que en una DAPP no importa donde resida este HTML ni tampoco si el mismo es alterado, porque en la medida que se haga la llamada al contrato inteligente, sería la única forma de agregar datos al blockchain o cambiar los estados en los contratos. Sin embargo, no está resuelto el tema de cómo distribuimos nuestra aplicación por diversos servidores.

Porque este parece uno de los caminos que nos podría ayudar en la solución de las problemáticas que comentábamos antes. De estas necesidade, de los avances logrados con blockchain (específicamente con el árbol de Merkle) y de protocolos como el de Git para mantener un control de versiones, nace IPFS. Os comentamos revisar este post en el cual se detalla todo el funcionamiento del blockchain y donde encontrarás más información sobre el árbol de Merkle.

IPFS (InterPlanetary File System), es un protocolo de hipermedia p2p (peer to peer). Es similar a HTTP pero con la combinación de otros sistemas como BitTorrent, Kodemila, Git y árbol de Merkle en una arquitectura de DAG (Directed Acyclic Graph) como la utilizada en IoTA. De esta forma crea un subsistema distribuido de Internet.
 

Funcionamiento de IPFS InterPlanetary File System imagen

¿Cómo funciona el IPFS?

IPFS Stack imagen

IPFS es un protocolo de código abierto desarrollado originariamente por Protocol Labs. Actualmente muchos programadores en Internet colaboran con el desarrollo de este proyecto que utiliza una tabla de hash distribuida (distributed hash table – DTH). En esta estructura almacena la información en forma de pares clave/valor. La DTH se distribuye por la red para que los nodos puedan buscar y acceder de forma eficiente a la información.

Las principales ventajas que le brinda la DTH son:

    • Descentralización.
    • Tolerancia a fallos.
  • Escalabilidad.
Los nodos no requieren una coordinación central y el sistema puede funcionar en forma confiable incluso si algún nodo se cae o deja la red. Estos componentes dotan a esta red de la resiliencia que las estructuras centralizadas de cliente-servidor.
 
 
Otro componente de IPFS es el intercambio de los bloques, los cuales se realizan por medio de un protocolo basado en el popular sistema de intercambio de archivos BitTorrent. Este protocolo se llama BitSwap, el cual funciona como una especie de marketplace para todo tipo de datos. En la actualidad, Filecoin es un ejemplo de la implementación de un marketplace de almacenamiento tipo p2p construido con IPFS. 
 
 
El DAG de Merkle, (el otro componente), es una mezcla de un DAG y el árbol de Merkle. Esta estructura asegura que todos los bloques intercambios en la red p2p son correctos, no están dañados ni han sido alterados. Esta verificación se realiza organizando los bloques de datos utilizando funciones criptográficas de hash.
 

funciones criptográficas imagen

 
Además de esto, IPFS utiliza un sistema de archivos auto certificado (Self-certifying File System – SFS). El SFS es un sistema de archivos el cual no requiere permisos especiales para compartir los datos. Es auto certificado ya que los datos enviados al cliente se autentican directamente por el nombre del archivo, el cual además está firmado por el servidor.
 
 
De esta forma crea el InterPlanetary Name Space (IPNS). El IPNS es un SFS con una estructura de llave pública (PKI), la cual es utilizada para certificar los objetos de todos los usuarios en la red. Así, cada objeto en la red posee un único identificador, lo cual es igual para el nodo. Cada nodo posee un par de llaves, pública y privada, y un identificador, el cual es un hash de su llave pública. Los nodos utilizan su llave privada para firmar cada dato que publican en la red, y los clientes pueden verificar su autenticidad e integridad con la llave pública del nodo emisor.
 
 
IPFS es un nuevo protocolo de www, el cual podemos comenzar a utilizarlo para la entrega de nuestro contenido web, de forma segura y logrando resiliencia frente a diversas ciberamenazas.
 
 
¡Os invitamos a utilizarlo y a enviar vuestros comentarios y preguntas!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *