Arca

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_FINAL

Un 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.