• 1
  • 2
  • 3

Falla di sicurezza: collisione SHA1

In questi giorni si è diffusa in rete una notizia che mostra come il sistema sha1 sia ufficialmente diventato obsoleto e poco sicuro. Prima di continuare è doveroso fare una breve introduzione sugli algoritmi di hash e nelle specifico presentare il sistema SHA1.

Innanzi tutto un algoritmo di hash è un sistema che prende come input un qualsiasi quantitativo di bit (idealmente possiamo immaginare un'infinità di bit) e restituisce una stringa composta da numeri e lettere di lunghezza definita. L'algoritmo ovviamente è unidirezionale, e quindi dall'output è impossibile risalire all'input.

Un esempio banale è provare, attraverso un terminale, a trasformare con sistema sha1 la parola "ciao". Notiamo come cambiando solo la prima lettera da maiuscola a minuscola cambia l'intera stringa.
iMac-di-Carlo:~ Carlo$ echo -n "ciao" | openssl sha1
1e4e888ac66f8dd41e00c5a7ac36a32a9950d271
iMac-di-Carlo:~ Carlo$ echo -n "Ciao" | openssl sha1
a810368ec47867e1c68e2d02a9293a2c04cd314c

SHA1 è l'acronimo di Secure Hash Algorithm, sistema sviluppato a partire dal lontano 1993. Questo sistema è stato pioniere nella protezione e sicurezza di dati sensibili (quali password). Esso produce sempre un output binario di 160bit, che in esadecimale si traduce in 40 caratteri.

Ora che abbiamo capito di cosa si tratta passiamo alla notizia di questi giorni che mostra come due file PDF, di fatto differenti, possiedano lo stessa stringa di output.

File 1: PDF1

File 2: PDF2

iMac-di-Carlo:Downloads Carlo$ shasum -a 1 shattered-*
38762cf7f55934b34d179ae6a4c80cadccbb7f0a  shattered-1.pdf
38762cf7f55934b34d179ae6a4c80cadccbb7f0a  shattered-2.pdf

Questo fenomeno si chiama collisione ed è dovuto al fatto che la nostra stringa output si basa solo su 160bit. Algoritmi più sofisticati e sicuramente più sicuri sono ad esempio il SHA256 o il SHA512 con i quali, ad esempio, questa collisione non si verifica:

iMac-di-Carlo:Downloads Carlo$ shasum -a 256 shattered-*
2bb787a73e37352f92383abe7e2902936d1059ad9f1ba6daaa9c1e58ee6970d0  shattered-1.pdf
d4488775d29bdef7993367d541064dbdda50d383f89f0aa13a6ff2e0894ba5ff  shattered-2.pdf

La cosa che lascia pensare è il fatto che la collisione è stata voluta, non casuale, e quindi sono sicuramente state sfruttate delle falle all'interno dell'algoritmo stesso.