Contenedores cifrados confiables con soporte para FIDO2 y criptografía post-cuántica
Los proveedores de nube adoran repetir la frase "tus datos están cifrados en reposo." Suena reconfortante, hasta que recuerdas quién tiene las claves de ese cifrado. Si el proveedor de hosting tiene las claves, entonces cualquier solicitud regulatoria, filtración interna o token de acceso comprometido puede abrir tus archivos a terceros.
Para evitar depender de la confianza en el servicio de otra persona, los datos se cifran del lado del cliente antes de enviarlos por la red. Existen herramientas como VeraCrypt, gocryptfs o age para esto, pero cada una tiene sus desventajas: formatos obsoletos, falta de soporte para claves de hardware o complicaciones al montar el contenedor como un disco regular.
Hace poco descubrí LUKSbox, un proyecto escrito en Rust. Es una herramienta para crear contenedores de archivos cifrados que toma las mejores ideas del mundo LUKS2 pero las adapta para almacenamiento en la nube, unidades USB y métodos de autenticación modernos.
Qué hay dentro del contenedor
El concepto central es sencillo: todos los datos se empaquetan en un único archivo .lbx. Para un observador externo o unidad en la nube, este archivo parece ruido aleatorio sin encabezados ni metadatos obvios, siempre que el encabezado se almacene en un archivo separado.
Al mismo tiempo, el contenedor se monta en el sistema operativo como un disco regular a través de FUSE (en Linux y macOS) o WinFsp (en Windows). Trabajas con él igual que con una memoria USB normal.
El objetivo principal del proyecto, tal como lo describen los autores, es crear una copia segura y portátil. Subes .lbx a S3, Dropbox o una unidad de red compartida y descansas tranquilo: el host es físicamente incapaz de leer el contenido.
Métodos de desbloqueo y protección contra computadoras cuánticas
Normalmente, el almacenamiento cifrado requiere una contraseña. LUKSbox también tiene contraseñas, hashadas mediante Argon2id con parámetros predeterminados serios, pero los desarrolladores fueron más allá y agregaron ranuras para claves de hardware.
Estas son las opciones soportadas para desbloquear el almacenamiento:
- Autenticadores FIDO2. Puedes vincular un YubiKey, Nitrokey o Google Titan a través del protocolo HMAC-secret. Sin tocar físicamente la clave, el contenedor no se abrirá.
- TPM 2.0. Vinculación al chip de hardware de tu placa base en Linux y Windows. Conveniente si el contenedor solo debe abrirse en tu estación de trabajo.
- Modo híbrido post-cuántico. Protección contra el escenario de "recolectar ahora, descifrar después con una computadora cuántica". LUKSbox puede combinar algoritmos clásicos con el algoritmo ML-KEM (FIPS 203, anteriormente Kyber). Se crea un archivo de clave separado
.kyberpara esto, que puedes mantener aparte del contenedor.
Ninguna de estas ranuras cifra archivos directamente. Envuelven la Clave Maestra del Volumen. Tras la validación exitosa de cualquier ranura, la clave maestra se descifra y las claves para metadatos, bloques de archivos y verificación de integridad se derivan de ella mediante HKDF-SHA256.
+-------------------------------------------------------------+
| Пароль / FIDO2 / TPM 2.0 / ML-KEM (.kyber) |
+------------------------------+------------------------------+
|
v
+-------------------------------+
| Master Volume Key (MVK) |
+---------------+---------------+
|
+---------------------+---------------------+
v v v
+-----------------+ +-----------------+ +-----------------+
| Header HMAC Key | | Metadata Key | | Per-file Keys |
+-----------------+ +-----------------+ +-----------------+
Seguridad a nivel de detalles
El repositorio sorprendentemente llama la atención por la atención a detalles que muchos desarrolladores pasan por alto.
Por defecto, se usa AES-256-GCM-SIV para el cifrado de bloques. La adición SIV proporciona resistencia a la reutilización de nonce, lo cual es útil durante sobrescrituras frecuentes. También puedes elegir ChaCha20-Poly1305 o AES-256-GCM estándar.
Algunos hallazgos interesantes del código fuente:
- Protección contra sustitución de bloques. Cada fragmento cifrado de un archivo viene equipado con datos autenticados adicionales (AAD), incluyendo el ID del archivo, el índice del bloque y el contador de generación. Un atacante basado en la nube no podrá reemplazar silenciosamente un bloque nuevo por una versión anterior ni intercambiar piezas.
- Limpieza de memoria. En Linux, la llamada al sistema
memfd_secretexcluye la clave maestra de los volcados de memoria del kernel y las imágenes de hibernación. En otros sistemas, se usa una combinación de bloqueo de memoria y zerado de búfer mediante traitsZeroize. - Protección contra ataques de reversión. Un archivo auxiliar opcional
.anchoralmacena un contador de cambios firmado. Si un proveedor revierte todo el contenedor a una versión anterior, el programa lo notará. - Encabezado separado. Si mueves el encabezado a un archivo
.hdr, el contenedor principal.lbxse convierte en un arreglo de bytes sin firmas.
Inicio rápido
El proyecto está escrito en Rust, así que puedes compilarlo desde el código fuente de la manera estándar cargo build. Hay paquetes precompilados .deb, .rpm, instaladores para Windows y paquetes para macOS disponibles para la mayoría de las plataformas.
Puedes gestionar contenedores de tres maneras: a través de CLI, un asistente TUI interactivo o una interfaz gráfica construida con egui.
Crear un contenedor regular y montarlo:
# Создаем хранилище с настройками по умолчанию
luksbox create my-vault.lbx
# Монтируем как директорию в Linux/macOS
luksbox mount my-vault.lbx /mnt/vault
# Или в отдельный диск в Windows
luksbox mount my-vault.lbx Z:
Agregar una clave de hardware FIDO2 a un contenedor existente:
luksbox enroll my-vault.lbx --kind fido2
Crear un contenedor post-cuántico con una clave híbrida en una memoria USB separada:
luksbox create secure-data.lbx --kind hybrid-pq --pq-hybrid /media/usb/key.kyber
Si no quieres recordar indicadores de línea de comandos, el comando luksbox wizard inicia un diálogo paso a paso en la terminal.
Escenarios prácticos
LUKSbox resuelve el problema del transporte seguro y el almacenamiento remoto. Estas son situaciones donde el proyecto parece una buena opción:
- Sincronización a través de nubes de terceros. Almacenas tu base de datos de contraseñas, claves personales o documentos de trabajo en un único archivo
.lbxdentro de una carpeta de Google Drive o Yandex Disk. - Copias de seguridad en servidores externos. Un script de respaldo monta el contenedor, coloca los nuevos volcados y desmonta el disco.
- Compartir archivos secretos. Enviar archivos a un colega con el requisito de confirmación física a través de un token de hardware.
Estado actual del proyecto
El proyecto está en etapa pre-1.0. El formato del contenedor v3 ya está congelado, fuzzing está configurado en el repositorio a través de libFuzzer y AFL++ con millones de iteraciones. Se han completado catorce rondas internas de auditoría de seguridad, aunque una auditoría independiente de terceros aún está pendiente.
Los autores advierten honestamente: un contenedor cifrado es un único punto de fallo. Si el archivo se daña o se pierden todas las claves, los datos son irrecuperables. Por lo tanto, LUKSbox está diseñado para copias portátiles protegidas, no como la única ubicación de almacenamiento para archivos críticamente importantes.
Si necesitas una herramienta de cifrado moderna y multiplataforma con soporte para FIDO2 y protección post-cuántica, definitivamente vale la pena explorar el repositorio. El código fuente se publica bajo la licencia Apache-2.0.
Proyectos relacionados