Cos'è un hash crittografico

Un hash è la risposta a una domanda sola: questo file è ancora esattamente quello di prima? Non dice chi l'ha scritto, non dice quando. Dice solo se è cambiato, e lo dice in modo che nessuno possa barare. Capire con precisione cosa promette — e cosa non promette — è la differenza tra usarlo bene e affidarsi a una superstizione.

Che cos'è, in una riga

Un hash crittografico è una funzione che prende in ingresso una sequenza di byte di lunghezza qualsiasi — un PDF da 4 KB, un video da 30 GB — e restituisce sempre una sequenza di lunghezza fissa, detta digest o impronta. SHA-256 restituisce 256 bit, cioè 64 caratteri esadecimali. Sempre 64, che tu gli dia una parola o un disco intero.

contratto.pdf 4.218.301 byte lunghezza qualsiasi SHA-256 funzione pubblica impronta (digest) a72c479e834af13a 7ffb7765d2275b7e… sempre 256 bit nessuna strada di ritorno
Il calcolo è facile in una direzione e computazionalmente impraticabile nell'altra. È questo che si intende per «funzione a senso unico».

La funzione è pubblica: l'algoritmo è scritto in uno standard, chiunque lo implementa, non c'è nessun segreto dentro. È esattamente questo che la rende utile in giudizio — la controparte può rifare il calcolo con il suo software e ottenere lo stesso numero, oppure no.

Le quattro proprietà che contano

1. È deterministica

Lo stesso input produce sempre lo stesso digest, su qualunque macchina, con qualunque software, oggi e fra vent'anni. Non c'è casualità, non c'è orologio, non c'è stato interno che si porti dietro qualcosa dall'esecuzione precedente.

2. È a senso unico

Dal file si ricava l'impronta in millisecondi. Dall'impronta non si torna al file. Non perché sia «vietato», ma perché l'unico modo conosciuto è provare tutti i file possibili finché uno non produce quel digest — un lavoro che non finisce prima della morte termica dell'universo. Questa proprietà si chiama resistenza alla preimmagine.

3. Ha l'effetto valanga

Cambia un solo bit dell'ingresso e circa metà dei bit del digest cambia. Non «un po'»: metà. Non esiste una nozione di «impronte vicine» per file simili — due file che differiscono per una virgola producono impronte che non hanno niente da spartire.

contratto 9 byte contrattp 9 byte · una lettera diversa SHA-256 a72c479e834af13a7ffb7765d2275b7e b884fef6a2d2939236204ea3b10e2378 SHA-256 7f82fc11cb2d79f7cdbed898d7d94bcf ad64f8ac2293f4c6f7ea2d0b39e7f434
Valori reali. Le due impronte non condividono nulla: non esiste il concetto di «quasi uguale».

4. Resiste alle collisioni

Una collisione è una coppia di file diversi con la stessa impronta. Matematicamente le collisioni esistono per forza — gli input possibili sono infiniti, i digest a 256 bit sono «solo» 2256 — ma un buon algoritmo rende impossibile trovarne una. Su questa proprietà MD5 e SHA-1 sono caduti, e ne parliamo in una guida a parte.

Cosa un hash non dimostra

L'impronta prova che quel file è identico a quel file. Non prova chi l'ha creato, non prova quando è esistito, non prova che dicesse il vero.

È l'equivoco più diffuso, e in perizia costa caro. Se calcoli l'impronta di un documento oggi e la annoti su un foglio, hai dimostrato una cosa sola: che il documento di domani, se ha la stessa impronta, è bit per bit quello di oggi. Ma il foglio con l'impronta scritta sopra puoi averlo compilato in qualsiasi momento.

Per rispondere alle altre due domande servono strumenti diversi, che si appoggiano all'hash:

  • Quando → una marca temporale RFC 3161: un'autorità terza firma la tua impronta insieme all'ora. Nota che l'autorità vede solo il digest, mai il contenuto.
  • Chi → una firma digitale: il firmatario cifra l'impronta con la propria chiave privata, che non lascia mai la smartcard.

Entrambi firmano l'impronta, non il file. Questa è la ragione profonda per cui l'hash sta in fondo a tutta la catena di custodia: è il gancio a cui si appende tutto il resto.

Perché calcolarne diversi insieme

Probatio calcola 18 algoritmi e ti lascia sceglierne quanti vuoi in una sola operazione. Non è un vezzo: è una difesa e un'assicurazione.

La difesa: non è nota alcuna tecnica per costruire due file che collidano contemporaneamente su MD5 e su SHA-256. Chi volesse falsificare un reperto verificato con una batteria di hash dovrebbe rompere due algoritmi con strutture interne diverse nello stesso momento.

L'assicurazione: il fascicolo che produci oggi verrà riletto fra dieci anni, magari da un software che non esiste ancora, magari da una perizia che chiede l'algoritmo che allora sarà lo standard. Averne registrati sei costa quanto averne registrato uno.

«Costa quanto uno» è letterale. Probatio legge il file una volta sola, a blocchi da 1 MiB, e alimenta tutti gli algoritmi selezionati con lo stesso blocco prima di passare al successivo. Il collo di bottiglia è il disco, non la CPU: calcolare MD5, SHA-1, SHA-256 e BLAKE3 insieme richiede all'incirca lo stesso tempo di calcolarne uno.

In pratica

  1. Calcola l'impronta appena il file entra in tuo possesso, prima di aprirlo, copiarlo, rinominarlo. Alcuni formati si modificano da soli alla semplice apertura.
  2. Registra almeno SHA-256, e affiancagli MD5 o SHA-1 se devi dialogare con cataloghi o strumenti legacy.
  3. Non fidarti di un'impronta scritta in un file di testo qualsiasi: senza marca temporale, la sua data è quella che dice il tuo orologio.
  4. Ricalcola prima di consegnare. Se l'impronta non torna, qualcosa è successo tra l'acquisizione e adesso — ed è meglio scoprirlo tu.

L'hash non è una formalità burocratica da mettere in coda alla relazione. È la ragione per cui una prova digitale può essere contestata da chiunque, con qualunque software, e sopravvivere alla contestazione.