Cadeia de auditoria + ancoragem TSA
Cada ação de uma sessão — entradas, capturas, quadros brancos, arranques e fins de gravação — aterra numa cadeia de hash SHA-256 por sessão. A cabeça da cadeia é ancorada em várias autoridades de selo temporal independentes no momento em que a sessão fecha. A adulteração é detetável; a prova sobrevive sem que seja preciso confiar em nós.
Como funciona
Cada evento de auditoria transporta o hash SHA-256 do evento anterior mais o seu próprio payload canónico, e um bloqueio de escrita serializa os eventos para que duas capturas concorrentes não possam competir na cadeia. Reordene um único evento mais tarde e cada hash a jusante deixa de corresponder — a verificação falha na primeira linha divergente.
| Campo | Finalidade |
|---|---|
| sequence | Contador monótono por sessão. Append-only, imposto ao nível da base de dados. |
| prev_hash | SHA-256 do hash canónico do evento anterior. O primeiro evento usa um prefixo todo a zeros. |
| payload_jsonb | Dados do evento em JSON canónico. Chaves ordenadas, sem espaços — para que o hash seja reproduzível. |
| hash | SHA-256 sobre (sequence ‖ prev_hash ‖ kind ‖ payload canónico ‖ occurred_at). |
| occurred_at | Carimbado no servidor. Os relógios do cliente não determinam a ordenação. |
Ancoragem multi-backend
Ao fim da sessão, a cabeça da cadeia é submetida a duas autoridades de selo temporal independentes em paralelo. Uma falha não quebra a prova — o verificador aceita qualquer token cujo cruzamento de backend passe.
Âncora em livro-razão público
A cabeça da cadeia é comprometida num smart contract em Tezos. A finalidade chega em 15–20 minutos; o recibo transporta o hash do bloco + a profundidade. Qualquer pessoa com a cabeça da cadeia da sessão pode verificar contra o livro-razão público sem a nossa cooperação.
Selo temporal qualificado
Pedido de selo temporal síncrono a uma TSA qualificada — DataSure (qualificada pela ANSSI, Art. 42 do eIDAS) em implementações geridas, ou FreeTSA para pilotos de auto-alojamento. O TSR é um token ASN.1 assinado que qualquer verificador RFC 3161 pode validar offline.
A interface de backend é substituível — Sectigo, DigiCert, OpenTimestamps e outros TSPs qualificados encaixam com uma alteração de configuração. Os clientes em implementações geridas herdam a DataSure; os operadores de auto-alojamento escolhem a sua.
Como é a verificação
Cada sessão vem com um URL de verificação público (fixado por HMAC, expira em 90 dias). O auditor abre-o, vê a cabeça da cadeia, os recibos da TSA e uma verificação de integridade da cadeia — sem login, sem chave de API, sem ferramentas especiais. O verificador volta a calcular o hash de cada linha de evento e cruza as testemunhas da TSA; ambas têm de passar.
| Verificação | O que prova |
|---|---|
| chain_integrity.ok | O hash de cada linha corresponde ao hash recalculado. Nenhuma linha intermédia foi editada. |
| tokens[].ok | Cada recibo de TSA é cruzado com a cabeça da cadeia que afirma ancorar. |
| event_count | Comparado com a contagem que o operador viu no encerramento — deteta truncagem. |
| issuing_org_name | Identidade da organização que realizou a sessão — para o processo do auditor. |
Porque isto importa em tribunal
O Art. 42 do eIDAS estabelece uma presunção legal para os selos temporais eletrónicos qualificados nos tribunais da UE — um tribunal tem de aceitar o selo temporal como genuíno, salvo se a parte contrária provar o contrário. Combine isso com uma cadeia de hash imutável sobre os eventos da sessão e o ónus da prova inverte-se: em vez de «registámos isto, acredite na nossa palavra», tem uma testemunha criptográfica independente de nós, independente de si e verificável anos mais tarde sem confiar em nenhum dos lados.
Veja uma cadeia com que pode mexer
O seeder de demonstração cria uma sessão real com uma cadeia de auditoria real ancorada em TSAs reais. Obtenha um URL de verificação público, altere um byte no registo de eventos e veja a prova quebrar.