Formato dei backup

Ultimo aggiornamento: 14 settembre 2026

I tuoi backup ti appartengono, e devono continuare ad appartenerti anche senza di noi. Il formato degli archivi .sigbak è pubblico, e un piccolo programma libero permette di decifrarli su un computer, con la tua chiave di backup. Se Sigillarium dovesse scomparire, i tuoi documenti resterebbero leggibili.

1. Decifrare un backup su un computer

  1. Installa Python 3.
  2. Installa la libreria di crittografia: pip install cryptography
  3. Scarica il programma sigbak_decrypt.py.
  4. Avvialo con il tuo archivio e una cartella di destinazione:
python sigbak_decrypt.py backup.sigbak miei-documenti

Il programma ti chiede la chiave di backup da tastiera (non compare a schermo), poi estrae ogni documento nella cartella. Ne verifica l'integrità: un documento danneggiato viene segnalato e saltato, gli altri vengono estratti. Il programma legge l'archivio e non invia nulla su Internet.

Codice di uscita: 0 se l'archivio è integro, 1 se mancano documenti o se l'archivio è incompleto, 2 in caso di errore (chiave errata, file non valido).

2. Specifica del formato, versione 1

Questa sezione è rivolta a chi vuole verificare il formato o scrivere un proprio lettore.

2.1 Chiave di backup

2.2 Derivazione

okm              = HKDF-SHA256(chiave, sale dell'intestazione, "Sigillarium archive v1", 64)   (RFC 5869)
chiave_cifratura = okm[0..32]
chiave_controllo = okm[32..64]

2.3 Intestazione (56 byte, in chiaro)

ByteContenuto
0–5SIGBAK (ASCII)
6versione del formato: 1
7derivazione: 1 = HKDF-SHA256
8–39salt casuale (32 byte)
40–55controllo della chiave: HMAC-SHA256(chiave_controllo, byte 0–39), troncato a 16 byte

2.4 Record

Dopo l'intestazione, fino alla fine del file: tipo (1 byte) · lunghezza L del testo cifrato, tag incluso (4 byte, big-endian) · nonce (12 byte) · AES-256-GCM (chiave_cifratura), testo cifrato seguito dal tag di 16 byte.

Dati associati del record di posizione n (0 per il primo): intestazione (56) ‖ n (4, big-endian) ‖ tipo (1) ‖ L (4, big-endian). Un record spostato, rimosso o preso da un altro archivio non supera quindi l'autenticazione.

TipoNomeContenuto decifrato
0x01INFOJSON: {"createdAt": "<ISO 8601 UTC>"}
0x02METAJSON: metadati del documento
0x03DATAbyte del documento
0x7FENDJSON: {"entries": <numero di documenti>}

Sequenza: INFO, poi (META, DATA) per ogni documento, poi END.

2.5 Metadati (META)

name, fileType (tipo MIME), createdAt, modifiedAt (o null), description (o null), tags, sha256 (dei byte di DATA), size e metadata (facoltativo). Un lettore ignora i campi sconosciuti e non deve mai usare name così com'è come percorso di file.

2.6 Archivio danneggiato

2.7 Vettore di test

archive_v1_sample.sigbak — 1.078 byte, SHA-256 01b1eb4ac4aca12d32f0a482d76ec5dc5ec1b2f90e64ad64fcc16b1b8c478dbb. Chiave: 000G-40R4-0M30-E209-185G-R38E-1W73 (byte da 00 a 0F). Contiene photo.jpg (300 byte) e un documento chiamato ../note.txt, un nome volutamente insidioso che un lettore corretto non deve usare come percorso.

2.8 Limiti della versione 1