MD5 e SHA-1 sono davvero «rotti»?

«MD5 è rotto, non usarlo.» La frase circola da vent'anni ed è, come tutte le semplificazioni, vera abbastanza da essere pericolosa. MD5 è rotto rispetto a un attacco preciso, e resta perfettamente idoneo a un altro uso, che è esattamente quello che ne fa la forensica digitale. La differenza sta in due parole che quasi nessuno distingue.

Collisione e preimmagine non sono la stessa cosa

Un attacco di collisione chiede: «trovami due file diversi con la stessa impronta». L'attaccante li costruisce entrambi. Li progetta insieme, dal nulla, con dentro le zone di riempimento che gli servono per far tornare i conti.

Un attacco di preimmagine chiede molto di più: «ecco un'impronta; trovami un file che la produca». Qui l'impronta è data, è quella del reperto, e l'attaccante non ha alcuna libertà su di essa.

Nella variante che interessa la forensica — la seconda preimmagine — la domanda diventa: «ecco questo file; trovamene un altro, diverso, con la stessa impronta». È la domanda che si pone chi vorrebbe sostituire un reperto già acquisito e verbalizzato.

COLLISIONE — riuscita su MD5 e SHA-1 file A (costruito) file B (costruito) stessa impronta l'attaccante controlla entrambi i file SECONDA PREIMMAGINE — mai riuscita reperto esistente impronta fissata l'attaccante non controlla nulla: deve inseguire Perché la distinzione è decisiva Falsificare un reperto già acquisito richiede una seconda preimmagine, non una collisione. Su MD5 e SHA-1 nessuno, ad oggi, sa produrne una.
Rompere la resistenza alle collisioni non implica saper rompere la resistenza alla seconda preimmagine. Sono barriere distinte.

Cosa è successo davvero

MD5 (1992, digest a 128 bit) cade nel 2004: un gruppo di ricercatori cinesi guidato da Xiaoyun Wang mostra come costruire coppie di messaggi colliding in poche ore. Negli anni successivi il costo scende a secondi, e nel 2008 un gruppo di ricercatori arriva a fabbricare un certificato SSL falso sfruttando quella debolezza. Nel 2012 il malware Flame usa una collisione MD5 per farsi firmare da Microsoft.

SHA-1 (1995, digest a 160 bit) resiste più a lungo. Nel 2005 arrivano gli attacchi teorici; la dimostrazione pratica è del 2017, quando Google e il CWI di Amsterdam pubblicano SHAttered: due PDF diversi, visivamente diversi, con lo stesso digest SHA-1. Nel 2020 l'attacco viene esteso al caso «chosen-prefix», che lo rende utilizzabile contro PGP.

Nota la costante: in ogni caso l'attaccante ha costruito entrambi i documenti. Nessuno, in trent'anni di crittanalisi, ha mai preso un file esistente e ne ha fabbricato un secondo con lo stesso MD5.

199219952004 20122017oggi MD5 collisione pratica (Wang) Flame firma un driver Microsoft SHA-1 SHAttered SHA-256 nessuna collisione nota
Le linee tratteggiate segnano la caduta della resistenza alle collisioni. La resistenza alla preimmagine di MD5 e SHA-1 non è mai stata violata.

Perché Probatio calcola ancora MD5 e SHA-1

Perché servono, e servono in scenari dove non sono affatto deboli.

  • Le immagini forensi E01 memorizzano al loro interno gli hash dell'acquisizione in MD5 e SHA-1. Probatio ricalcola il flusso logico e li confronta con quelli registrati: senza MD5 non potresti verificare un'immagine acquisita nel 2011.
  • Gli hashset e i cataloghi — liste di hash di file noti — sono in larga parte storici, e la loro chiave è spesso MD5. Rifiutarsi di calcolarlo significa non poterli interrogare.
  • Le verbalizzazioni pregresse: un reperto sequestrato dieci anni fa ha nel verbale un MD5. Confermarlo oggi è un'operazione legittima e informativa.

In tutti e tre i casi la domanda è: questo file è ancora quello che era? Rispondervi richiede la resistenza alla seconda preimmagine — che MD5, per quanto ne sappiamo, conserva. Non richiede la resistenza alle collisioni, che MD5 ha perso.

Quando MD5 è invece davvero pericoloso

C'è un caso in cui la debolezza morde, e va detto chiaramente: quando l'avversario ha potuto scegliere il file.

Se qualcuno ti consegna spontaneamente un documento e tu ne registri l'MD5, quel qualcuno potrebbe averne preparata una coppia colliding: il documento innocuo che ti mostra, e il documento compromettente da esibire dopo, con lo stesso MD5. Non ha rotto nulla del tuo lavoro — ha semplicemente costruito entrambi i file prima che tu li vedessi.

Regola operativa: se il file arriva da una fonte che ha interesse all'esito e ha potuto fabbricarlo, MD5 e SHA-1 da soli non bastano. Se il file è stato acquisito da te, o proviene da un dispositivo sequestrato, il rischio di collisione è irrilevante.

La difesa non è scegliere: è sommare

Nessuno sa costruire una coppia di file che collida contemporaneamente su MD5 e su SHA-256. Le due funzioni hanno strutture interne diverse e le tecniche di collisione differenziale che hanno abbattuto MD5 non si trasferiscono.

Per questo Probatio calcola più impronte in una sola lettura del file, e per questo il termine giusto è batteria di hash: non un algoritmo scelto bene, ma diversi algoritmi indipendenti che devono cadere tutti insieme perché la prova cada.

Regole pratiche

  1. SHA-256 è il minimo sindacale per qualsiasi nuova acquisizione. È lo standard di fatto ed è tuttora integro.
  2. Aggiungi MD5 o SHA-1 per compatibilità, non come garanzia principale. Servono a dialogare col passato.
  3. Non usare mai MD5 da solo su un file fornito dalla controparte.
  4. Non scrivere in relazione «MD5 è insicuro» senza specificare rispetto a cosa. È una frase che un consulente tecnico preparato smonta in trenta secondi, e con essa la tua credibilità.
  5. CRC32 e XXH3 non c'entrano: non sono hash crittografici, non resistono a nessun avversario. Servono a scoprire errori di trasmissione.

Il punto non è la moda dell'algoritmo. È sapere quale barriera stai chiedendo alla matematica di reggere, e verificare che quella barriera sia ancora in piedi.