Formato dos backups

Última atualização: 14 de setembro de 2026

Seus backups pertencem a você e devem continuar assim, mesmo sem nós. O formato dos arquivos .sigbak é público, e um pequeno programa livre permite descriptografá-los em um computador, com sua chave de backup. Se o Sigillarium deixasse de existir, seus documentos continuariam legíveis.

1. Descriptografar um backup em um computador

  1. Instale o Python 3.
  2. Instale a biblioteca de criptografia: pip install cryptography
  3. Baixe o programa sigbak_decrypt.py.
  4. Execute-o com seu arquivo e uma pasta de saída:
python sigbak_decrypt.py backup.sigbak meus-documentos

O programa pede sua chave de backup pelo teclado (ela não aparece na tela) e depois extrai cada documento para a pasta. Ele verifica a integridade de cada um: um documento danificado é sinalizado e ignorado, e os demais são extraídos. O programa lê o arquivo e não envia nada pela internet.

Código de saída: 0 se o arquivo está íntegro, 1 se faltam documentos ou se o arquivo está incompleto, 2 em caso de erro (chave incorreta, arquivo inválido).

2. Especificação do formato, versão 1

Esta seção é destinada a quem deseja verificar o formato ou escrever seu próprio leitor.

2.1 Chave de backup

2.2 Derivação

okm                = HKDF-SHA256(chave, sal do cabeçalho, "Sigillarium archive v1", 64)   (RFC 5869)
chave_criptografia = okm[0..32]
chave_controle     = okm[32..64]

2.3 Cabeçalho (56 bytes, em texto claro)

BytesConteúdo
0–5SIGBAK (ASCII)
6versão do formato: 1
7derivação: 1 = HKDF-SHA256
8–39sal aleatório (32 bytes)
40–55verificação da chave: HMAC-SHA256(chave_controle, bytes 0–39), truncado em 16 bytes

2.4 Registros

Após o cabeçalho, até o fim do arquivo: tipo (1 byte) · comprimento L do texto cifrado, tag incluída (4 bytes, big-endian) · nonce (12 bytes) · AES-256-GCM (chave_criptografia), texto cifrado seguido da tag de 16 bytes.

Dados associados do registro de posição n (0 para o primeiro): cabeçalho (56) ‖ n (4, big-endian) ‖ tipo (1) ‖ L (4, big-endian). Um registro movido, removido ou tirado de outro arquivo falha, portanto, na autenticação.

TipoNomeConteúdo descriptografado
0x01INFOJSON: {"createdAt": "<ISO 8601 UTC>"}
0x02METAJSON: metadados do documento
0x03DATAbytes do documento
0x7FENDJSON: {"entries": <número de documentos>}

Sequência: INFO, depois (META, DATA) para cada documento, depois END.

2.5 Metadados (META)

name, fileType (tipo MIME), createdAt, modifiedAt (ou null), description (ou null), tags, sha256 (dos bytes de DATA), size e metadata (opcional). Um leitor ignora os campos desconhecidos e nunca deve usar name como está como caminho de arquivo.

2.6 Arquivo danificado

2.7 Vetor de teste

archive_v1_sample.sigbak — 1.078 bytes, SHA-256 01b1eb4ac4aca12d32f0a482d76ec5dc5ec1b2f90e64ad64fcc16b1b8c478dbb. Chave: 000G-40R4-0M30-E209-185G-R38E-1W73 (bytes 00 a 0F). Ele contém photo.jpg (300 bytes) e um documento chamado ../note.txt, um nome propositalmente armadilhado que um leitor correto não deve usar como caminho.

2.8 Limites da versão 1