Venti es un sistema de almacenamiento en red que almacena permanentemente bloques de datos. Un hash SHA-1 de 160 bits de los datos (denominado puntuación por Venti) actúa como la dirección de los datos. Esto impone una política de escritura única ya que no se puede encontrar ningún otro bloque de datos con la misma dirección: las direcciones de múltiples escrituras de los mismos datos son idénticas, por lo que los datos duplicados se identifican fácilmente y el bloque de datos se almacena solo una vez. Los bloques de datos no se pueden eliminar, lo que lo hace ideal para el almacenamiento permanente o de respaldo. Venti se usa normalmente con Fossil para proporcionar un sistema de archivos con instantáneas permanentes.
Historia
Venti fue diseñado e implementado por Sean Quinlan y Sean Dorward en Bell Labs . Apareció en la distribución de Plan 9 en 2002. Russ Cox ha continuado el desarrollo y ha vuelto a implementar la mayor parte del servidor, ha escrito una biblioteca para crear estructuras de datos (archivos, directorios y metadatos) para almacenar en Venti e implementado optimizaciones. Venti está disponible tanto en la distribución Plan 9 como para muchos sistemas operativos similares a UNIX [1] como parte del Plan 9 de User Space . Venti se incluye como parte de Inferno con los módulos que lo acompañan para el acceso. Hay un conjunto de programas Go para crear sus propios servidores Venti. Se incluyen ejemplos que utilizan diferentes tipos de almacenamiento de backend.
Detalles
Venti es un demonio de espacio de usuario . [2] Los clientes se conectan a Venti a través de TCP [2] y se comunican mediante un simple protocolo RPC . Los mensajes más importantes del protocolo se enumeran a continuación. Tenga en cuenta que no hay ningún mensaje para eliminar una dirección o modificar datos en una dirección determinada.
- leer (puntuación, tipo) , devuelve los datos identificados por puntuación y tipo [2]
- escribir (datos, tipo) , almacena datos en la dirección calculada por los datos hash SHA-1 , combinados con el tipo . [2]
El bloque de datos almacenado por Venti debe tener más de 512 bytes de longitud y menos de 56 kilobytes. Entonces, si un usuario / cliente de Venti desea almacenar bloques de datos más grandes, debe crear una estructura de datos (que se puede almacenar en Venti). Por ejemplo, Fossil usa árboles hash para almacenar archivos grandes. Venti en sí no se ocupa del contenido de un bloque de datos; sin embargo, almacena el tipo de bloque de datos.
El diseño de Venti tiene las siguientes consecuencias:
- Dado que las escrituras son permanentes, el sistema de archivos es de solo anexos (lo que permite una implementación simple con menos posibilidades de que se produzcan errores que destruyan los datos); no se produce ninguna fragmentación del sistema de archivos .
- Los clientes pueden verificar la corrección del servidor: la puntuación de los datos devueltos debe ser la misma que la dirección solicitada. Dado que SHA-1 es un hash criptográficamente seguro, no es factible computacionalmente fabricar datos.
- Los datos no se pueden sobrescribir. Si una dirección ya está presente, los datos ya están presentes.
- Hay poca necesidad de autenticación de usuario: los datos no se pueden eliminar y solo se pueden leer si se conoce la puntuación. El único problema potencial es que un usuario esté llenando los discos.
- Los datos se pueden comprimir sin complicar la estructura del disco.
Los bloques de datos se almacenan en discos duros . Los discos que componen el almacenamiento disponible, normalmente un RAID , se denominan registro de datos . Este registro de datos se divide en partes más pequeñas llamadas arenas , que tienen un tamaño que permite escribirlas en otros medios como CD / DVD o cinta magnética . Otro conjunto de discos duros se utiliza para el índice, que asigna puntuaciones a direcciones en el registro de datos. La estructura de datos utilizada para el índice es una tabla hash con de tamaño fijo cubos . Venti confía en que las puntuaciones se distribuyan aleatoriamente para que los cubos no se llenen. Dado que cada búsqueda cuesta un tiempo de búsqueda de disco , un índice generalmente consta de varios discos duros con poco tiempo de acceso .
Uso
Los clientes pueden utilizar el servidor Venti de varias formas. El sistema operativo Plan 9 utiliza Venti para las instantáneas de archivo diarias del sistema de archivos. Estas copias del sistema de archivos principal se pueden montar como un árbol de archivos de copias completas organizadas por fecha. Los programas de utilidad 'vac' y 'unvac' se pueden utilizar para almacenar y recuperar datos de un servidor Venti en forma de archivos individuales o como un directorio y su contenido. 'Vacfs' permite navegar por los datos asociados con una puntuación de vac sin la recuperación completa de todos los datos almacenados de forma remota. Los datos y las puntuaciones de índice se pueden duplicar entre los servidores de Venti utilizando 'rdarena' y 'wrarena'. Plan 9 de Bell Labs , Plan 9 de User Space , Inferno y cualquier otro cliente que implemente el protocolo Venti se pueden usar indistintamente para almacenar y recuperar datos. [3]
Colisiones hash
Un principio básico de la teoría de la información es el principio de casillero , que establece que si el conjunto A contiene más valores que el conjunto B, entonces para cualquier función que mapee A a B habrá miembros de B que estarán asociados con más de un miembro del conjunto A En el caso de Venti, el conjunto de posibles hashes SHA-1 es obviamente más pequeño que el conjunto de todos los bloques posibles que podrían almacenarse en el sistema de archivos y, por lo tanto, es posible una colisión de hash .
El riesgo de colisión accidental de hash en un hash de 160 bits es muy pequeño, incluso para exabytes de datos. Históricamente, sin embargo, muchas funciones hash se vuelven cada vez más vulnerables a las colisiones hash maliciosas debido a los avances tanto criptográficos como computacionales. [4] Venti no aborda el tema de las colisiones de hash; a partir de este momento, [ ¿cuándo? ] todavía es computacionalmente inviable encontrar colisiones en SHA-1, pero puede ser necesario que Venti cambie a una función hash diferente en algún momento en el futuro. El 23 de febrero de 2017, Google anunció el ataque SHAtter , en el que generó dos archivos PDF diferentes con el mismo hash SHA-1 en aproximadamente 2 63.1 evaluaciones SHA-1. [5]
Ver también
- Fossil : sistema de archivos de instantáneas que utiliza Venti para almacenamiento permanente
- Plan 9 desde el espacio de usuario
Referencias
- ^ Como Linux , FreeBSD , NetBSD , OpenBSD , SunOS o Mac OS X
- ^ a b c d Lukkien, Mechiel. Análisis Venti e Implementación Memventi. Tesis. Universidad de Twente, 2007. Np: np, nd Repositorio de tesis de la Universidad de Twente. Web. 13 de octubre de 2014. < http://essay.utwente.nl/694/1/scriptie_Lukkien.pdf >.
- ^ "Página de manual de Venti (6) en el manual de la cuarta edición de Plan 9" . Man.cat-v.org . Consultado el 21 de abril de 2013 .
- ^ "Preguntas y respuestas de HASH COLLISION". Investigación en criptografía. Rambus, nd Web. 12 de enero de 2010. < https://web.archive.org/web/20100306180648/http://www.cryptography.com/cnews/hash.html >.
- ^ < https://en.wikipedia.org/wiki/SHA-1#SHAitated_–_first_public_collision >
enlaces externos
- Venti: un nuevo enfoque para el almacenamiento de archivos , artículo que describe Venti.
- Nueva página de manual de Venti (descripción general) , sección 7, página de manual de venti que incluye descripción general y formato de almacenamiento.
- Nueva página de manual de Venti (servidor) , sección 8 página de manual del servidor de venti.
- Nueva página del manual de Venti (herramientas) , sección 1, página del manual de utilidades de Venti .
- Vaya al código para implementar clientes y servidores .
- Módulo Venti en Limbo para Inferno , amablemente traído a la vida gracias a Google Summer of Code.