Filosofía

DFS (Distributed File System) es un sistema de almacenamiento distribuido orientado a aplicaciones.

La idea es sencilla: Los archivos te pertenecen y deben estar bajo tu control.

La idea es parecida a WebDAV, pero ambos sistemas persiguen objetivos distintos.

  • WebDAV está pensado para proporcionar al usuario acceso remoto a sus archivos.
  • DFS está pensado para proporcionar a una aplicación acceso a los archivos que el usuario decide compartir con ella.

El objetivo es darle la vuelta al hecho instaurado de que el proveedor de la aplicación (SaaS) se hace dueño de facto de los datos y de su flujo.

Mientras que en WebDAV o cualquier sistema propietario eres tú quien se autentica frente al almacenamiento, en DFS es la aplicación la que se empareja con un espacio de trabajo concreto al que tú le das permiso.

Esto permite que las aplicaciones trabajen directamente sobre archivos que permanecen bajo tu control sin necesidad de transferir la propiedad del almacenamiento a terceros.

Además, el servidor de la aplicación no necesita acceder a tus archivos ni conocer las credenciales de tu almacenamiento. El emparejamiento se realiza entre la aplicación creada en el navegador y tu DFS, y posteriormente la comunicación se realiza mediante credenciales temporales.

Por poner un ejemplo sencillo:

Para abrir un documento en tu editor de textos no existe ningún motivo técnico para que el desarrollador del editor sea propietario o controle ese documento. 

Tampoco existe esa verdad de que solo a través del servidor del SaaS se puede acceder a un repositorio FTP, WebDAV, S3, NFS, sshfs... 

Un espacio de trabajo está respaldado por un directorio local, pero este puede estar montado sobre archivos remotos en cualquier sistema.

 

Y ya que hacemos un sistema de ficheros nuevo, ¿por qué no...?

Compartición, colaboración y publicación:

Cuando los archivos son gestionados por una aplicación, compartir, colaborar y publicar depende de las capacidades que haya decidido implementar el SaaS.

DFS separa ambas responsabilidades.

Las aplicaciones trabajan con los archivos, pero no los gestionan. Los gestionas tú.

Cada espacio de trabajo puede configurarse como público o privado y eres tú quien decide cómo utilizarlo y con quién compartirlo.

Esto permite compartir carpetas entre equipos de trabajo, mantener repositorios privados o publicar contenido para acceso público utilizando exactamente el mismo mecanismo.

Una empresa puede publicar documentación técnica de sus productos. Una universidad puede compartir modelos o bibliotecas. Un investigador puede distribuir sus trabajos. Cada organización mantiene sus propios archivos y decide qué compartir.

DFS desacopla la gestión de archivos de la aplicación.

Llevado más allá, podrías tener tus publicaciones de redes sociales en tu DFS y las diferentes SaaS serían competencia para ver quien las indexa mejor, pero habría verdadera competencia por no existir un propietario de facto de los datos.

Dependencias:

Trabajar conectado a Internet y seguir dependiendo de archivos de una única ubicación (tu ordenador o servidor de la aplicación) resulta cada vez más anacrónico.

Hace años que utilizamos enlaces para acceder a páginas, servicios y recursos distribuidos por toda la red.

DFS usa esta idea básica de Internet.

Igual que tú puedes compartir archivos, también puedes utilizar los que otras personas, empresas o instituciones han decidido publicar.

Además del enlace directo, DFS incorpora un sistema de dependencias que permite declarar dependencias entre repositorios.

Las dependencias son recursivas. Si una biblioteca depende de otros repositorios, éstos serán descubiertos automáticamente por la aplicación.

Por ejemplo:

Mi DFS
   └─ Biblioteca B
          └─ Biblioteca C

El resultado es un modelo más parecido a Internet que a un disco USB: cada organización mantiene sus propios archivos, los publica cuando lo considera oportuno y los demás proyectos pueden utilizarlos directamente desde su origen.

Continuidad de trabajo

Otro elemento que debe soportar el sistema de archivos para desacoplarse de la aplicación es la propia sesión de archivos abiertos.

Esto permite recuperar el entorno de trabajo incluso después de cerrar la aplicación, reiniciar el navegador o cambiar de equipo sin consultar a la aplicación.

El sistema distingue entre archivos que estás editando (sesión activa) y archivos que solo has incluido como dependencia. Estos segundos pueden cachearse sin riesgo, porque no cambian durante la edición.

Autenticación y seguridad

DFS utiliza un sistema de emparejamiento entre la aplicación y el espacio de trabajo.

Partimos de que el usuario conoce el token (identificador del espacio de trabajo) y la contraseña de acceso de su DFS.

El sistema consta de cuatro fases:

1.- Emparejamiento:

Se utiliza la contraseña de la aplicación para generar:

hash_base = hash(token + pass_app)

Utilizando la contraseña del DFS, este hash_base se almacena en el propio DFS.

A partir de este momento la contraseña del DFS deja de ser necesaria y no vuelve a circular por la red.

La aplicación olvida tanto la pass_app como el hash_base. No guarda nada en su almacenamiento local.

Si hemos hecho el emparejamiento por consola, no hay circulación alguna. Solamente hemos guardado hash_base en el DFS.

2.- Inicio de sesión en la aplicación:

La aplicación genera una credencial temporal:

hash_temporal = hash(hash(token + pass_app) + expires)

* recuerda que hash_base=hash(token + pass_app)

donde expires es la fecha de expiración de la sesión.

hash_temporal es lo que sí se guarda en el navegador durante toda la sesión.

3.- Acceso en el DFS

El DFS recibe en todas las comunicaciones el hash_temporal.

El DFS reconstruye localmente el hash_temporal a partir del hash_base almacenado. La operación será válida únicamente si:

  • La fecha de expiración no ha sido superada.
  • El hash no ha sido revocado.
  • El hash reconstruido coincide con el recibido.

4.- Revocación:

Si el usuario cierra la sesión en la aplicación, solicita la revocación del hash_temporal. A partir de ese momento dicho hash pasa a formar parte de una lista negra temporal y deja de ser válido inmediatamente, aunque todavía no haya expirado.

Sin entrar en más detalle, también se crea "nonce" y fecha de creación para evitar la creación de hashes futuros.

Esto significa que una credencial interceptada sólo puede utilizarse durante un tiempo limitado y puede ser invalidada explícitamente por el usuario en cualquier momento la cerrar la sesión.

La seguridad del sistema queda así bajo el control del usuario. Mientras la sesión permanece abierta, las credenciales temporales son válidas. Al cerrar la sesión, dejan de serlo.

Ni la aplicación ni terceros reciben en ningún momento las credenciales necesarias para acceder directamente al DFS.

La operación de emparejamiento puede realizarse tanto desde la propia aplicación como desde el DFS. Su único objetivo es generar el hash_base y almacenarlo en el DFS.