Che cos'è una funzione hash crittografica?
Una funzione hash crittografica è un algoritmo che può essere eseguito su dati come un individuo file o una password per produrre un valore chiamato checksum.
L'uso principale di una funzione di hash crittografico è verificare l'autenticità di un dato. Si può presumere che due file siano identici solo se i checksum generati da ciascun file, utilizzando la stessa funzione di hash crittografico, sono identici.
Alcune funzioni di hash crittografico comunemente usate includono MD5 e SHA-1, sebbene ne esistano anche molti altri.
Le funzioni hash crittografiche vengono spesso chiamate "funzioni hash", ma tecnicamente non è corretto. Una funzione hash è un termine generico che comprende le funzioni hash crittografiche insieme ad altri tipi di algoritmi come i controlli di ridondanza ciclica.
Funzioni hash crittografiche: un caso d'uso
Diciamo che scarichi il ultima versione del browser Firefox. Per qualche ragione, dovevi scaricarlo da un sito diverso da quello di Mozilla. Poiché non è ospitato su un sito di cui hai imparato a fidarti, assicurati che il file di installazione appena scaricato sia esattamente lo stesso di quello offerto da Mozilla.
Usando un calcolatore di checksum, calcoli un checksum usando una particolare funzione di hash crittografica, come SHA-2, e poi lo confronti con quello pubblicato sul sito di Mozilla. Se sono uguali, puoi essere ragionevolmente sicuro che il download che hai è quello che Mozilla voleva che avessi.

Le funzioni hash crittografiche possono essere invertite?
Le funzioni di hash crittografiche sono progettate per impedire la capacità di invertire i checksum che creano nei testi originali. Tuttavia, anche se sono praticamente impossibili da invertire, non è garantito al 100% per salvaguardare i dati.
Gli hacker possono utilizzare una tabella arcobaleno per capire il testo in chiaro di un checksum. Le tabelle arcobaleno sono dizionari che elencano migliaia, milioni o addirittura miliardi di checksum insieme al loro valore di testo normale corrispondente.
Sebbene questo non stia tecnicamente invertendo l'algoritmo di hash crittografico, potrebbe anche esserlo, dato che è così semplice da fare. In realtà, poiché nessuna tabella 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 hash crittografica SHA-1:
Esempio di tavolo arcobaleno | |
---|---|
Testo in chiaro | Checksum SHA-1 |
12345 | 8cb2237d0679ca88db6464eac60da96345513964 |
password1 | e38ad214943daad1d64c102faec29de4afe9da3d |
io amo il mio cane | a25fb3505406c9ac761c8428692fbf5d5ddf1316 |
Jenny400 | 7d5eb0173008fe55275d12e9629eef8bdb408c1f |
dallas1984 | c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2 |
Un hacker deve sapere quale algoritmo di hash crittografico è stato utilizzato per generare i checksum per determinare i valori.
Per una maggiore protezione, alcuni siti Web che memorizzano password utente eseguire funzioni aggiuntive sull'algoritmo di hash crittografico dopo che il valore è stato generato ma prima che venga archiviato. Questo processo produce un nuovo valore che solo il server web comprende e che non corrisponde al checksum originale.
Ad esempio, dopo aver inserito una password e generato il checksum, è possibile separarla in più parti e riorganizzato prima che venga memorizzato nel database delle password, o alcuni caratteri potrebbero essere scambiati con altri. Quando si tenta di autenticarsi la prossima volta che l'utente accede, il server web lo inverte funzione aggiuntiva e il checksum originale viene generato nuovamente per verificare che la password di un utente è valido.
L'adozione di 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 di hash crittografico ma non quello personalizzato, non è utile conoscere i checksum della password.
Password e funzioni di hash crittografico
Un database salva le password degli utenti in modo simile a una tabella arcobaleno. Una volta inserita la password, il checksum viene generato e confrontato con quello registrato con il tuo nome utente. Ti viene quindi concesso l'accesso se i due sono identici.
Dato che una funzione hash crittografica produce un checksum non reversibile, è sicuro per te rendere la tua password semplice come 12345, invece di 12@34$5, semplicemente perché i checksum stessi non possono essere compresi? No, ed ecco perché.
Queste due password sono entrambe impossibili da decifrare semplicemente guardando i checksum:
MD5 per 12345:827ccb0eea8a706c4c34a16891f84e7b
MD5 per 12@34$5:a4d3cc004f487b18b2ccd4853053818b
A prima vista, potresti 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 eseguito un attacco di forza bruta o dizionario, che è una tattica comune.
Un attacco di forza bruta si verifica quando vengono effettuati più tentativi casuali di indovinare una password. In questo caso, sarebbe facile da indovinare 12345, ma piuttosto difficile da capire casualmente l'altro. Un attacco a dizionario è simile in quanto l'attaccante può provare ogni parola, numero o frase da un elenco di password comuni (e non così comuni) e 12345 è una di quelle password comuni.
Anche se le funzioni di hash crittografiche producono checksum difficili da indovinare, dovresti comunque usa una password complessa per tutti i tuoi account utente online e locali.
Ulteriori informazioni sulle funzioni hash crittografiche
Potrebbe sembrare che le funzioni di hash crittografico siano correlate alla crittografia, ma le due funzionano in modi diversi.
La crittografia è un processo bidirezionale in cui qualcosa viene crittografato per diventare illeggibile e quindi decifrato in seguito per essere utilizzato di nuovo normalmente. Tu potresti crittografare i file che hai archiviato in modo che chiunque vi acceda non sia in grado di usarli, oppure puoi usare crittografia del trasferimento di file per crittografare i file che si spostano su una rete, come quelli che carichi o scarichi online.
Le funzioni di hash crittografiche funzionano in modo diverso in quanto i checksum non devono essere invertiti con una password di dehashing speciale. L'unico scopo delle funzioni di hash crittografico è confrontare due dati, ad esempio durante il download di file, l'archiviazione di password e l'estrazione di dati da un database.
È possibile che una funzione di hash crittografica produca lo stesso checksum per diversi pezzi di dati. Quando ciò accade, si parla di collisione, che è un grosso problema considerando che l'intero scopo di una funzione di hash crittografica è creare checksum univoci per ogni input di dati al suo interno.
Le collisioni possono verificarsi perché ogni funzione hash crittografica produce un valore di lunghezza fissa indipendentemente dai dati di input. Ad esempio, la funzione hash crittografica MD5 genera 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 ed e10adc3949ba59abbe56e057f20f883e per tre totalmente diversi blocchi di dati.
Il primo checksum è from 12345. Il secondo è stato generato da oltre 700 lettere e numeri e il terzo è da 123456. Tutti e tre gli input sono di lunghezza diversa, ma i risultati sono sempre lunghi solo 32 caratteri poiché Checksum MD5 era usato.
Non c'è limite al numero di checksum che possono 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 hash crittografica può produrre, c'è sempre la possibilità che si verifichi una collisione.
Questo è il motivo per cui sono state create altre funzioni di hash crittografico. Mentre MD5 genera un valore di 32 caratteri, SHA-1 genera 40 caratteri e SHA-2 (512) ne genera 128. Maggiore è il numero di caratteri del checksum, minore è la probabilità che si verifichi una collisione.