Información técnica
Motores soportados
- SQLite: copia consistente con
VACUUM INTO, sin cerrar el programa. - MySQL / MariaDB:
mysqldump --single-transaction --routines --triggers --events.
Cifrado
Cada respaldo se cifra en el equipo del cliente antes de salir, con una llave aleatoria nueva por respaldo (XChaCha20-Poly1305 en modo streaming de libsodium, autenticado por bloques de 64 KiB). Esa llave se guarda dentro del archivo protegida dos veces:
- con una llave derivada de la contraseña del cliente (Argon2id, 64 MiB, 3 pasadas), y
- con la llave pública de recuperación de Arca (X25519, sealed box). La llave privada correspondiente se guarda fuera de línea y nunca está en el servidor; solo se usa, manualmente y con verificación de identidad, si el cliente pierde su contraseña.
El servidor guarda archivos que no puede leer.
Formato de archivo .arca
"ARCA" (4 bytes) | versión u8 = 1 | largo de cabecera u32 LE
cabecera JSON: installationId, createdAt, engine, compression (zstd|gzip),
plainSha256, wrapClient (argon2id+secretbox),
wrapRecovery (x25519-sealedbox)
cabecera secretstream (24 bytes)
bloques cifrados de 64 KiB; el último con TAG_FINALUn archivo .arca más la contraseña basta para restaurar, incluso sin conexión con Arca, usando arca-agent restore --file.
Transporte y verificación
Subida por trozos con suma SHA-256 por trozo y reanudación si se corta la conexión. El servidor verifica el hash del archivo completo antes de aceptarlo. Cada mes se elige un respaldo al azar y se prueba su restauración en un entorno aislado.