IPFS, la nueva web resiliente
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.
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.
¿Cómo funciona el IPFS?
Las principales ventajas que le brinda la DTH son:
- Descentralización.
- Tolerancia a fallos.
- Escalabilidad.