Una funzione di hash crittografica è un algoritmo che può essere eseguito su dati come un singolo file o una password per produrre un valore chiamato checksum.
L'uso principale di una funzione di hash crittografica è verificare l'autenticità di un dato. Si presume che due file siano identici solo se i checksum generati da ciascun file, utilizzando la stessa funzione hash crittografica, sono identici.
Alcune funzioni di hash crittografiche comunemente utilizzate includono MD5 e SHA-1, sebbene esistano anche molte altre.
Le funzioni hash crittografiche vengono spesso definite "funzioni hash", ma ciò non è tecnicamente corretto. Una funzione hash è un termine generico che comprende funzioni hash crittografiche insieme ad altri tipi di algoritmi come i controlli di ridondanza ciclica.
Funzioni hash crittografiche: un caso d'uso
Supponiamo che tu scarichi l'ultima versione del browser Firefox. Per qualche ragione, dovevi scaricarlo da un sito diverso da Mozilla. Poiché non è ospitato su un sito di cui hai imparato a fidarti, ti piacerebbe assicurarti che il file di installazione appena scaricato sia esattamente uguale a quello offerto da Mozilla.
Usando una calcolatrice di checksum, si calcola un checksum usando una particolare funzione di hash crittografica, come SHA-2, e quindi si confronta con quella pubblicata sul sito di Mozilla. Se sono uguali, puoi essere ragionevolmente sicuro che il download che hai è quello che Mozilla intendeva avere.
Le funzioni di hash crittografico possono essere invertite?
Le funzioni hash crittografiche sono progettate per impedire la possibilità di invertire i checksum da loro creati nei testi originali. Tuttavia, anche se sono praticamente impossibili da invertire, non sono garantiti al 100% per salvaguardare i dati.
Gli hacker possono usare un tavolo arcobaleno per capire il testo in chiaro di un checksum.
Le tabelle Rainbow sono dizionari che elencano migliaia, milioni o persino miliardi di checksum insieme al corrispondente valore di testo normale.
Anche se questo non sta tecnicamente invertendo l'algoritmo di hash crittografico, potrebbe anche essere, dato che è così semplice da fare. In realtà, poiché nessun arcobaleno può elencare tutti i possibili checksum esistenti, di solito sono utili solo per frasi semplici come password deboli.
Ecco una versione semplificata di una tabella arcobaleno per mostrare come funzionerebbe quando si utilizza la funzione di hash crittografica SHA-1:
plaintext | SHA-1 Checksum |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
password1 | e38ad214943daad1d64c102faec29de4afe9da3d |
io amo il mio cane | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Un hacker deve sapere quale algoritmo hash crittografico è stato utilizzato per generare i checksum per calcolare i valori.
Per una maggiore protezione, alcuni siti Web che memorizzano le password utente eseguono funzioni aggiuntive sull'algoritmo hash crittografico dopo che il valore è stato generato ma prima che venga memorizzato. Questo processo produce un nuovo valore che solo il server Web comprende e che non corrisponde al checksum originale.
Ad esempio, dopo aver immesso una password e generato il checksum, è possibile separarlo in più parti e riorganizzarlo prima che sia archiviato nel database delle password, oppure alcuni caratteri potrebbero essere scambiati con altri. Quando si tenta di eseguire l'autenticazione al successivo accesso dell'utente, il server Web annulla questa funzione aggiuntiva e il checksum originale viene generato nuovamente per verificare che la password di un utente sia valida.
Prendere questi passaggi limita l'utilità di un hack in cui vengono rubati tutti i checksum. L'idea è di eseguire una funzione sconosciuta, quindi se l'hacker conosce l'algoritmo hash crittografico ma non quello personalizzato, allora conoscere i checksum della password non è utile.
Password e funzioni hash crittografiche
Un database salva le password degli utenti in modo simile a una tabella arcobaleno. Quando viene immessa la password, il checksum viene generato e confrontato con quello registrato con il tuo nome utente. Ti verrà quindi concesso l'accesso se i due sono identici.
Dato che una funzione di hash crittografica produce un checksum non reversibile, è sicuro per te rendere la tua password semplice come 12345, invece di 12@34$5semplicemente perché i checksum stessi non possono essere compresi? No, ed ecco perché.
Queste due password sono entrambe impossibili da decifrare semplicemente osservando il checksum:
MD5 per 12345: 827ccb0eea8a706c4c34a16891f84e7b
MD5 per 12 @ 34 $ 5: a4d3cc004f487b18b2ccd4853053818b
A prima vista, si potrebbe pensare che sia corretto utilizzare una di queste password. Questo è vero se un utente malintenzionato ha provato a capire la tua password indovinando il checksum MD5, cosa che nessuno fa, ma non è vero se viene eseguita una forza bruta o un attacco al dizionario, che è una tattica comune.
Un attacco di forza bruta si verifica quando vengono prese più pugnalate casuali per indovinare una password. In questo caso, sarebbe facile indovinare 12345, ma piuttosto difficile da capire casualmente l'altro. Un attacco di dizionario è simile in quanto l'attaccante può provare ogni parola, numero o frase da un elenco di password comuni (e non così comuni), e12345 è una di quelle password comuni.
Anche se le funzioni di hash crittografico producono checksum difficili da indovinare, è comunque necessario utilizzare una password complessa per tutti gli account utente online e locali.
Ulteriori informazioni sulle funzioni hash crittografiche
Potrebbe sembrare che le funzioni hash crittografiche siano correlate alla crittografia, ma i due funzionano in modi diversi.
La crittografia è un processo a due vie in cui qualcosa viene crittografato per diventare illeggibile e quindi decrittografato in seguito per essere utilizzato di nuovo normalmente. Potresti crittografare i file che hai archiviato in modo che chiunque li acceda non sia in grado di usarli, oppure puoi utilizzare la crittografia di trasferimento file per crittografare i file che si spostano su una rete, come quelli che carichi o scarichi online.
Le funzioni hash crittografiche funzionano in modo diverso in quanto i checksum non devono essere invertiti con una speciale password di dehashing. L'unico scopo delle funzioni hash crittografiche è quello di confrontare due parti di dati, ad esempio quando si scaricano file, si memorizzano password e si estrae dati da un database.
È possibile che una funzione di hash crittografica produca lo stesso checksum per diverse parti di dati. Quando questo accade, si chiama collisione, che è un grosso problema considerando che l'intero punto di una funzione di hash crittografica è di creare checksum unici per ogni dato in esso inserito.
Le collisioni possono verificarsi perché ogni funzione hash crittografica produce un valore di una lunghezza fissa indipendentemente dai dati di input. Ad esempio, la funzione di hash crittografica MD5 genera 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 e e10adc3949ba59abbe56e057f20f883e per tre blocchi di dati completamente diversi.
Il primo checksum è da 12345. Il secondo è stato generato da oltre 700 lettere e numeri, e il terzo da 123456.
Tutti e tre gli input hanno lunghezze diverse, ma i risultati sono sempre di soli 32 caratteri da quando è stato utilizzato il checksum MD5.
Non c'è limite al numero di checksum che potrebbero essere creati perché ogni piccolo cambiamento nell'input dovrebbe produrre un checksum completamente diverso. Poiché esiste un limite al numero di checksum che una funzione di hash crittografica può produrre, c'è sempre la possibilità che si verifichi una collisione.
Questo è il motivo per cui sono state create altre funzioni hash crittografiche. Mentre MD5 genera un valore di 32 caratteri, SHA-1 genera 40 caratteri e SHA-2 (512) genera 128. Maggiore è il numero di caratteri che ha il checksum, minore è la probabilità che si verifichi una collisione.