Format des sauvegardes

Dernière mise à jour : 14 septembre 2026

Vos sauvegardes vous appartiennent, et doivent le rester même sans nous. Le format des archives .sigbak est public, et un petit programme libre permet de les déchiffrer sur un ordinateur, avec votre clé de sauvegarde. Si Sigillarium venait à disparaître, vos documents resteraient lisibles.

1. Déchiffrer une sauvegarde sur un ordinateur

  1. Installez Python 3.
  2. Installez la bibliothèque de chiffrement : pip install cryptography
  3. Téléchargez le programme sigbak_decrypt.py.
  4. Lancez-le avec votre archive et un dossier de sortie :
python sigbak_decrypt.py sauvegarde.sigbak mes-documents

Le programme vous demande votre clé de sauvegarde au clavier (elle n'apparaît pas à l'écran), puis extrait chaque document dans le dossier. Il vérifie l'intégrité de chacun : un document abîmé est signalé et sauté, les autres sont extraits. Le programme lit l'archive et n'envoie rien sur Internet.

Code de sortie : 0 si l'archive est intacte, 1 si des documents manquent ou si l'archive est incomplète, 2 en cas d'erreur (mauvaise clé, fichier invalide).

2. Spécification du format, version 1

Cette section s'adresse aux personnes qui souhaitent vérifier le format ou écrire leur propre lecteur.

2.1 Clé de sauvegarde

2.2 Dérivation

okm             = HKDF-SHA256(clé, sel de l'en-tête, "Sigillarium archive v1", 64)   (RFC 5869)
clé_chiffrement = okm[0..32]
clé_contrôle    = okm[32..64]

2.3 En-tête (56 octets, en clair)

OctetsContenu
0–5SIGBAK (ASCII)
6version du format : 1
7dérivation : 1 = HKDF-SHA256
8–39sel aléatoire (32 octets)
40–55contrôle de clé : HMAC-SHA256(clé_contrôle, octets 0–39), tronqué à 16 octets

2.4 Enregistrements

À la suite de l'en-tête, jusqu'à la fin du fichier : type (1 octet) · longueur L du chiffré, tag inclus (4 octets, gros-boutiste) · nonce (12 octets) · AES-256-GCM (clé_chiffrement), chiffré suivi du tag de 16 octets.

Données associées de l'enregistrement de rang n (0 pour le premier) : en-tête (56) ‖ n (4, gros-boutiste) ‖ type (1) ‖ L (4, gros-boutiste). Un enregistrement déplacé, retiré ou pris dans une autre archive échoue donc à l'authentification.

TypeNomContenu déchiffré
0x01INFOJSON : {"createdAt": "<ISO 8601 UTC>"}
0x02METAJSON : métadonnées du document
0x03DATAoctets du document
0x7FENDJSON : {"entries": <nombre de documents>}

Séquence : INFO, puis (META, DATA) pour chaque document, puis END.

2.5 Métadonnées (META)

name, fileType (type MIME), createdAt, modifiedAt (ou null), description (ou null), tags, sha256 (des octets de DATA), size, et metadata (facultatif). Un lecteur ignore les champs inconnus, et ne doit jamais utiliser name tel quel comme chemin de fichier.

2.6 Archive abîmée

2.7 Vecteur de test

archive_v1_sample.sigbak — 1 078 octets, SHA-256 01b1eb4ac4aca12d32f0a482d76ec5dc5ec1b2f90e64ad64fcc16b1b8c478dbb. Clé : 000G-40R4-0M30-E209-185G-R38E-1W73 (octets 00 à 0F). Elle contient photo.jpg (300 octets) et un document nommé ../note.txt, un nom volontairement piégé qu'un lecteur correct ne doit pas utiliser comme chemin.

2.8 Limites de la version 1