Formato de las copias de seguridad

Última actualización: 14 de septiembre de 2026

Tus copias de seguridad te pertenecen, y deben seguir siéndolo incluso sin nosotros. El formato de los archivos .sigbak es público, y un pequeño programa libre permite descifrarlos en un ordenador con tu clave de copia. Si Sigillarium llegara a desaparecer, tus documentos seguirían siendo legibles.

1. Descifrar una copia en un ordenador

  1. Instala Python 3.
  2. Instala la biblioteca de cifrado: pip install cryptography
  3. Descarga el programa sigbak_decrypt.py.
  4. Ejecútalo con tu archivo y una carpeta de salida:
python sigbak_decrypt.py copia.sigbak mis-documentos

El programa te pide la clave de copia por teclado (no aparece en pantalla) y extrae cada documento en la carpeta. Comprueba la integridad de cada uno: un documento dañado se indica y se omite, los demás se extraen. El programa solo lee el archivo y no envía nada por Internet.

Código de salida: 0 si el archivo está intacto, 1 si faltan documentos o el archivo está incompleto, 2 en caso de error (clave incorrecta, archivo no válido).

2. Especificación del formato, versión 1

Esta sección está dirigida a quienes deseen verificar el formato o escribir su propio lector.

2.1 Clave de copia

2.2 Derivación

okm           = HKDF-SHA256(clave, sal de la cabecera, "Sigillarium archive v1", 64)   (RFC 5869)
clave_cifrado = okm[0..32]
clave_control = okm[32..64]

2.3 Cabecera (56 bytes, en claro)

BytesContenido
0–5SIGBAK (ASCII)
6versión del formato: 1
7derivación: 1 = HKDF-SHA256
8–39sal aleatoria (32 bytes)
40–55control de clave: HMAC-SHA256(clave_control, bytes 0–39), truncado a 16 bytes

2.4 Registros

Tras la cabecera, hasta el final del archivo: tipo (1 byte) · longitud L del cifrado, etiqueta incluida (4 bytes, big-endian) · nonce (12 bytes) · AES-256-GCM (clave_cifrado), cifrado seguido de la etiqueta de 16 bytes.

Datos asociados del registro de índice n (0 para el primero): cabecera (56) ‖ n (4, big-endian) ‖ tipo (1) ‖ L (4, big-endian). Un registro desplazado, eliminado o tomado de otro archivo falla por tanto la autenticación.

TipoNombreContenido descifrado
0x01INFOJSON: {"createdAt": "<ISO 8601 UTC>"}
0x02METAJSON: metadatos del documento
0x03DATAbytes del documento
0x7FENDJSON: {"entries": <número de documentos>}

Secuencia: INFO, luego (META, DATA) para cada documento, luego END.

2.5 Metadatos (META)

name, fileType (tipo MIME), createdAt, modifiedAt (o null), description (o null), tags, sha256 (de los bytes de DATA), size y metadata (opcional). Un lector ignora los campos desconocidos y nunca debe usar name tal cual como ruta de archivo.

2.6 Archivo dañado

2.7 Vector de prueba

archive_v1_sample.sigbak — 1078 bytes, SHA-256 01b1eb4ac4aca12d32f0a482d76ec5dc5ec1b2f90e64ad64fcc16b1b8c478dbb. Clave: 000G-40R4-0M30-E209-185G-R38E-1W73 (bytes 00 a 0F). Contiene photo.jpg (300 bytes) y un documento llamado ../note.txt, un nombre deliberadamente malicioso que un lector correcto no debe usar como ruta.

2.8 Límites de la versión 1