Catena di audit e ancoraggio TSA
Ogni azione in una sessione — accessi, snapshot, lavagne, avvii di registrazione, chiusure — finisce in una catena di hash SHA-256 per sessione. La testa della catena viene ancorata a più autorità di marcatura temporale indipendenti nel momento in cui la sessione si chiude. La manomissione è rilevabile; la prova sopravvive senza doverti fidare di noi.
Come funziona
Ogni evento di audit contiene l'hash SHA-256 dell'evento precedente più il proprio payload canonico, e un lock di scrittura serializza gli eventi così che due acquisizioni concorrenti non possano competere sulla catena. Riordina un singolo evento in seguito e ogni hash a valle non corrisponde più — la verifica fallisce alla prima riga divergente.
| Campo | Scopo |
|---|---|
| sequence | Contatore monotòno per sessione. Append-only, imposto a livello di database. |
| prev_hash | SHA-256 dell'hash canonico dell'evento precedente. Il primo evento usa un prefisso tutto a zero. |
| payload_jsonb | Dati dell'evento in JSON canonico. Chiavi ordinate, senza spazi — così l'hash è riproducibile. |
| hash | SHA-256 su (sequence ‖ prev_hash ‖ kind ‖ payload canonico ‖ occurred_at). |
| occurred_at | Marcato sul server. Gli orologi client non determinano l'ordinamento. |
Ancoraggio multi-backend
Alla chiusura della sessione, la testa della catena viene inviata in parallelo a due autorità di marcatura temporale indipendenti. Un'interruzione non compromette la prova — il verificatore accetta qualsiasi token il cui controllo incrociato del backend passa.
Ancoraggio su ledger pubblico
La testa della catena viene registrata in uno smart contract su Tezos. La finalità arriva in 15–20 minuti; la ricevuta contiene l'hash del blocco e la profondità. Chiunque abbia la testa della catena della sessione può verificare rispetto al ledger pubblico senza la nostra collaborazione.
Marca temporale qualificata
Richiesta di marca temporale sincrona a una TSA qualificata — DataSure (qualificata ANSSI, eIDAS Art. 42) sui deployment gestiti, oppure FreeTSA per i pilot self-host. Il TSR è un token ASN.1 firmato che qualsiasi verificatore RFC 3161 può validare offline.
L'interfaccia del backend è sostituibile — Sectigo, DigiCert, OpenTimestamps e altri TSP qualificati si integrano con una modifica di configurazione. I clienti sui deployment gestiti ereditano DataSure; gli operatori self-host scelgono il proprio.
Com'è fatta la verifica
Ogni sessione include un URL di verifica pubblico (HMAC-pinned, scade in 90 giorni). L'auditor lo apre, vede la testa della catena, le ricevute TSA e un controllo di integrità della catena — nessun login, nessuna API key, nessuno strumento speciale. Il verificatore ricalcola l'hash di ogni riga dell'evento e verifica in modo incrociato i testimoni TSA; entrambi devono passare.
| Verifica | Cosa dimostra |
|---|---|
| chain_integrity.ok | L'hash di ogni riga corrisponde all'hash ricalcolato. Nessuna riga intermedia è stata modificata. |
| tokens[].ok | Ogni ricevuta TSA viene verificata in modo incrociato rispetto alla testa della catena che dichiara di ancorare. |
| event_count | Confrontato con il conteggio visto dall'operatore alla chiusura — rileva il troncamento. |
| issuing_org_name | Identità dell'org che ha condotto la sessione — per il fascicolo dell'auditor. |
Perché conta in tribunale
eIDAS Art. 42 stabilisce la presunzione legale per le marche temporali elettroniche qualificate nei tribunali dell'UE — un tribunale deve accettare la marca temporale come autentica a meno che la controparte non dimostri il contrario. Abbinalo a una catena di hash immutabile sugli eventi della sessione e l'onere della prova si ribalta: invece di "lo abbiamo registrato, fidati di noi", hai un testimone crittografico indipendente da noi, indipendente da te e verificabile anni dopo senza doverti fidare di nessuna delle due parti.
Prova una catena con cui puoi sperimentare
Il seeder demo crea una sessione reale con una vera catena di audit ancorata a TSA reali. Ottieni un URL di verifica pubblico, cambia un byte nel log degli eventi, osserva la prova rompersi.