Di: Conrado Gouvêa
Il 23 febbraio è stato annunciato il calcolo della prima collisione della funzione hash SHA-1, in un lavoro condotto dai ricercatori di Google e del centro di ricerca CWI di Amsterdam. Questo post fornirà una breve spiegazione delle funzioni hash e SHA-1 per comprendere l'impatto di questa notizia.
Funzioni hash
Una funzione hash è un meccanismo che, dato un qualsiasi insieme di dati (ad esempio un file), calcola un "digest crittografico": una breve sequenza di byte che identifica in modo univoco tali dati. Viene utilizzato, ad esempio, nelle firme digitali: invece di firmare direttamente un documento (cosa impossibile a causa delle limitazioni dello schema di firma, che non accetta dati molto grandi), ne viene calcolato l'hash e poi firmato. Questo approccio è sicuro finché la funzione hash è sicura: vale a dire, è difficile generare documenti diversi che abbiano lo stesso hash (attacco di collisione) ed è difficile trovare un documento che abbia un hash specifico (attacco di inversione). Un attacco di collisione consentirebbe, ad esempio, a un aggressore di scambiare un contratto da te firmato digitalmente con un altro contratto con termini diversi.
Attacchi contro le funzioni hash
È sempre possibile eseguire un attacco di collisione tramite forza bruta. Ad esempio, una collisione in una funzione hash con dimensione 256 bit può essere forzata brute-forced con 2^128 calcoli. Si tratta però di un numero enorme e un calcolo del genere è del tutto irrealizzabile. SHA-1 è lungo 160 bit, quindi l'attacco a forza bruta richiede 2^80 calcoli. Un simile sforzo, benché molto più limitato, è comunque irrealizzabile.
Nel 2007 è stato scoperto un attacco di collisione contro SHA-1 che richiede 2^69 calcoli. In crittografia, uno schema è generalmente considerato non sicuro quando viene individuato un attacco più efficiente della forza bruta. Tuttavia, all'epoca non c'erano risorse sufficienti per eseguire effettivamente l'attacco, che rimase quindi un attacco teorico. Per questo motivo, SHA-1 ha continuato a essere utilizzato in molte applicazioni, nonostante gli avvertimenti dei ricercatori secondo cui sarebbe stato necessario migrare verso altre funzioni hash, come SHA-256 o SHA-512, per le quali non si conosce alcun attacco migliore della forza bruta, e per le quali l'attacco a forza bruta è completamente impraticabile.
Questo ci porta al presente, dove i ricercatori sopra menzionati hanno combinato progressi teorici (riduzione della complessità dell'attacco a 2^63 calcoli) e progressi tecnologici (un gran numero di CPU e GPU disponibili nell'infrastruttura di Google) e sono finalmente riusciti a eseguire l'attacco nella pratica, generando due file PDF con lo stesso hash SHA-1. I calcoli richiedevano l'equivalente di 6500 CPU e 110 GPU in funzione per un anno senza interruzioni.
MD5
Per comprendere il flusso di eventi correlati a SHA-1, vale la pena ricordare la storia di MD5, la funzione hash a 128 bit che è stata il predecessore di SHA-1. Nel 2004 venne scoperto un attacco di collisione, che rimase però solo teorico. Nel 2005, i ricercatori hanno messo in pratica l'attacco, generando due certificati con lo stesso hash. Tuttavia, l'attacco era ancora limitato e i certificati differivano solo per la chiave pubblica, il che non consentiva attacchi nella pratica. Nel 2008 è stato scoperto un attacco migliorato che consentiva di generare due certificati con lo stesso hash, uno legittimo e uno dannoso; quest'ultimo era in grado di emettere qualsiasi altro certificato. Infine, nel 2012, è stato scoperto il malware Flame che sfruttava le collisioni MD5 per infettare i computer sulle reti mediorientali compromettendo il meccanismo di Windows Update.
Quindi, anche 7 anni dopo il primo calcolo di collisione (dove siamo ora con SHA-1), era ancora possibile eseguire attacchi contro MD5, perché era ancora accettato da molti sistemi. Pertanto, è ragionevole prevedere che SHA-1 continuerà a essere utilizzato per un bel po' di tempo e che sarà attivamente attaccato negli anni a venire; ma si prevede che le lezioni apprese da MD5 ridurranno i tempi di risposta degli sviluppatori.
Implicazioni
Come accennato, le applicazioni di firma digitale possono essere attaccate falsificando documenti dotati di firme valide. La dimostrazione della collisione SHA-1 sfrutta la malleabilità del formato PDF per poter generare, da due immagini qualsiasi, due documenti PDF con lo stesso SHA-1, sfruttando una singola collisione. A questo proposito, esiste già un generatore di collisioni PDF online: https://alf.nu/SHA1.
Nell'infrastruttura dei certificati digitali, tuttavia, l'impatto non è immediato a causa dei limiti tecnici dell'attacco: esso è in grado di generare una collisione tra due documenti con lo stesso prefisso e suffisso, che differiscono solo per due blocchi di dati interni; Per attaccare i certificati è necessario un attacco che consenta prefissi arbitrari. Tuttavia, è solo questione di tempo prima che l'attacco venga perfezionato.
Utilizzo attuale di SHA-1
Da un lato, molte applicazioni sono già migrate da SHA-1 perché si era a conoscenza della sua vulnerabilità. Un fattore importante in questa migrazione è stata la decisione degli sviluppatori di browser (Chrome, Firefox, Edge) di non indicare come sicure le connessioni che utilizzano SHA-1. Di conseguenza, attualmente nessuno dei milioni di siti web più popolari utilizza SHA-1. (https://www.trustworthyinternet.org/ssl-pulse/)
D'altro canto, molte altre applicazioni utilizzano ancora SHA-1, come il sistema di controllo delle versioni dei file Git. Tali applicazioni sono ora vulnerabili agli attacchi e il problema dovrebbe essere risolto il prima possibile migrando l'uso di SHA-1 a SHA-256, SHA-512 o SHA-3. In alcuni casi che coinvolgono l'hardware, la migrazione è praticamente impossibile, come nel caso dei chip TPM versione 1.2 utilizzati in alcuni processori per ottenere funzionalità come l'avvio sicuro. Anche il software può smettere di funzionare correttamente quando incontra una collisione, come è successo con il sistema di controllo delle versioni dei file SVN: https://arstechnica.com/security/2017/02/watershed-sha1-collision-just-broke-the-webkit-repository-others-may-follow/
Cosa fare
Come utente finale: puoi solo sperare che le applicazioni vengano aggiornate. Come già accennato, i browser si rifiutano già di contrassegnare come sicure le connessioni che utilizzano SHA-1; Prestate sempre attenzione agli indicatori di sicurezza nella barra degli indirizzi.
Come sviluppatore: verifica se SHA-1 viene utilizzato in qualche prodotto e pianifica la migrazione. Verificare se qualche certificato lo utilizza; se è così; emettere nuovi certificati utilizzando SHA-256 o simili. Gli autori dell'attacco hanno anche scritto un software in grado di rilevare i tentativi di collisione, notando che l'attacco lascia tracce rilevabili nei dati (https://github.com/cr-marcstevens/sha1collisiondetection). L'HMAC con SHA-1 è ancora considerato sicuro perché si basa sulla sicurezza contro gli attacchi di inversione hash (ancora irrealizzabili), non contro gli attacchi di collisione; in ogni caso la migrazione è sempre consigliata.