InterPlanetary File System

Sistema de archivos interplanetario

Blockchain 13 de abr. de 2022

Hoy vengo a hablaros de IPFS, un proyecto el cual conozco desde hace tiempo y me gusta mucho por el sinfin de propositos que se le puede dar. Lo conocí gracias a la difunta FileNation que era como un Wetransfer  de la blockchain creado por mi amiguete alexsicart (Alex Sicart Ramos) (github.com)

El IPFS es un protocolo de almacenamiento de archivos distribuido. Permite que las servidores de todo el mundo almacenen y sirvan archivos como parte de una red gigante de igual a igual (P2P o peer to peer).

IPFS

Debe su nombre a las siglas de la frase en inglés, Interplanetary File System, que en español significa, Sistema de Archivos Interplanetario, y que en realidad es, un avanzado Sistema de Archivos con Tecnología P2P y Blockchain.

Cualquier servidor, en cualquier parte del mundo, puede descargar el software IPFS y comenzar a alojar y servir archivos. Si alguien ejecuta IPFS en su PC y carga un archivo en la red de IPFS, ese archivo puede ser visto y descargado por cualquier otra persona en el mundo que también esté ejecutando IPFS mediante P2P.

IPFS, podría complementar o sustituir al actual Protocolo de Transferencia de Hipertexto (HTTP). Por lo tanto, IPFS pretende transformar el actual comportamiento de Internet basado en servidores centralizados en una web totalmente distribuida bajo Tecnología P2P y Blockchain.

IPFS: Sistema de Archivos Interplanetarios
IPFS

En su página web oficial hay mucha información útil sobre dicha tecnología, también en su sitio oficial en GitHub.

Funcionamiento de IPFS

IPFS Bloque

Cuando agrega un archivo a IPFS, su archivo se divide en trozos más pequeños, se hashea criptográficamente y se le da una huella digital única llamada identificador de contenido (CID). Este CID actúa como un registro permanente de su archivo tal como existe en ese momento.

IPFS Busqueda de Bloque

Cuando otros nodos buscan su archivo, preguntan a sus nodos pares quién está almacenando el contenido al que hace referencia el CID del archivo. Cuando ven o descargan su archivo, almacenan en caché una copia y se convierten en otro proveedor de su contenido hasta que se borra su caché.

IPFS Nodo CID

Un nodo puede anclar contenido para mantenerlo (y proporcionarlo) para siempre, o descartar contenido que no ha utilizado en un tiempo para ahorrar espacio. Esto significa que cada nodo de la red almacena solo el contenido que le interesa, además de cierta información de indexación que ayuda a averiguar qué nodo está almacenando qué.

IPFS Pinning

Si agrega una nueva versión de su archivo a IPFS, su hash criptográfico es diferente, por lo que obtiene un nuevo CID. Esto significa que los archivos almacenados en IPFS son resistentes a la manipulación y la censura: cualquier cambio en un archivo no sobrescribe el original, y los fragmentos comunes en los archivos se pueden reutilizar para minimizar los costos de almacenamiento.

IPFS Archivo

Sin embargo, esto no significa que deba recordar una larga cadena de CID: IPFS puede encontrar la última versión de su archivo utilizando el sistema de nomenclatura descentralizado IPNS, y DNSLink se puede usar para asignar CID a nombres DNS legibles por humanos.

Instalación Nodo IPFS

En mi caso, voy a cubrir como crear un nodo en Windows Server, ya que yo tengo un servidor Windows Server 2022. Hace tiempo lo hice también en Ubuntu server y no es nada complicado siguiendo la documentación.

La topologia que voy a describir es:

  • Nuestro navegador con IPFS Companion "cliente"
  • Servidor donde tenemos IPFS Desktop "servidor".

Si no tenemos un servidor donde instalarlo, todo se puede hacer en el mismo equipo perfectamente y hacer unicamente referencia en las configuraciones localhost

  1. Lo primero que necesitamos es irnos a IPFS.io y descargarnos IPFS Desktop.

  2. Una vez instalado, IPFS Desktop se nos abrirá una ventana como esta:

  1. En nuestro navegador, recomiendo instalar en vuestro navegador IPFS Companion..

  2. Volvemos al servidor y nos vamos a la sección de Setting y en la sección de IPFS Configs tendremos que realizar algunos cambios:

    • En la sección Access-Control-Allow-Origin habilitar la IP del servidor donde lo teneis instalado X.X.X.X:8080 y X.X.X.X:9091 para que poder acceder de forma remota desde el cliente. X.X.X.X es la IP de vuestro servidor.

    • En la sección Addresses definir tambien "API": "/ip4/X.X.X.X/tcp/5001". X.X.X.X es la IP de vuestro servidor.

    • Cambiar la opción "AcceleratedDHTClient": False, a "AcceleratedDHTClient": true, en la sección experimental para una mejor visibilidad a otros peers.

    • Con esto deberia funcionar. Sin embargo, a veces nuestro nodo no es visible de forma externa a los Peers por lo que viene bien revisar la sección Announce y AppendAnnounce donde publicas tu IP publica o si tienes un DDNS asociado (como es mi caso) a tu IP pública. Mi fichero de configuración es el siguiente para que sirva de ejemplo.

  3. En el IPFS Companionde nuestro navegador definimos la configuración para la conexión con nuestro servidor IPFS. Siendo X.X.X.X:808 y X.X.X.X:909 las IP's del servidor al que nos conectamos.

Test de Configuración:

Una vez tenemos el nodo funcionando, para comprobar si todo esta correcto os recomiendo subir un fichero desde el WEBUI del IPFS Companion a vuestro Servidor.

Una vez tenemos el CID del fichero subido podemos comprobar si es visible aquí IPFS Check poniendo el Peer ID de nuestro servidor (que encontramos en la página principal del WEBUI del servidor) y el CID del fichero. Abajo un ejemplo de mi servidor y un fichero que tengo alojado.

IPFS Check

Con todo esto hecho ya podemos distribuir nuestro fichero mediante su CID como vinculo a traves de cualquiera de los Public Gateways que podemos encontrar aquí:

https://ipfs.github.io/public-gateway-checker/

Haciendo que nuestro CIDpueda ser descargado desde muchos gateways como:

Espero que os haya funcionado y os haya gustado! La verdad a mi me resulta muy interesante, ya que plantea escenarios muy interesantes para la ciberseguridad. La distribución de malware de forma descentralizada y el bypaseo de politicas de URL filtering utilizando cloudflare son cosas que se me ocurren entre ellas.

Cualquier duda podeis pasaros por los comentarios!

via GIPHY

Etiquetas

Adel de la Llave Ramadan

Soy Adel, me defino como una persona que disfruta del aprendizaje constante, excesivamente curiosa y apasionada por la ciberseguridad. ¡Espero que encuentres cosas útiles en mi página web!