
Il furto di dati è uno degli attacchi informatici più diffusi, diventa sempre quindi più importante curare i livelli di protezione ed accesso ai dati sia durante il loro transito fra dispositivi sia nei luoghi di salvataggio.
Si pensi per esempio all’insieme delle password di tutti gli utenti iscritti ad un sito web, in caso di accesso illecito al database e furto di tali password, l’insieme degli utenti risulta vulnerabile a futuri furti di account. Infatti, è pratica estremamente diffusa fra gli utenti l’utilizzo della stessa password per account differenti (pratica molto rischiosa).
Si rende quindi necessaria una maggiore protezione dei dati sensibili degli utenti. Una possibile soluzione al furto di password è data dall’utilizzo di tecniche di crittografia di hashing.
Hashing in teoria
L’hashing è un metodo di crittografia che permette di trasformare un segnale di input (nel nostro caso una stringa di caratteri, la password) in un segnale di output con dimensione fissata. La trasformazione avviene attraverso una funzione di hash che opera attraverso uno specifico algoritmo e che possiede le seguenti proprietà:
- La funzione è deterministica: dato lo stesso input produce sempre lo stesso output
- La funzione non è invertibile: dato un output non è possibile risalire all’input
- Dati due input essi possono produrre lo stesso output (collisione)
Sono proprio le suddette proprietà che permettono all’hashing di trovare una concreta applicazione nella cybersecurity infatti esse garantiscono rispettivamente che:
- A partire dalla stessa password si ottenga sempre la stessa stringa di hash
- Data una stringa di hash non è possibile risalire alla password di input
La terza “proprietà” potrebbe essere causa di malfunzionamenti, tuttavia la probabilità di collisioni non può essere eliminata ma è estremamente limitata per quanto riguarda le funzioni di hash.
Vediamo un esempio:
- La stringa “HelloWorld35” produce (e produrrà sempre con lo stesso algoritmo) una stringa di hash del tipo “74ea9223ac”
- La stringa “HelloPass36!” produce (e produrrà sempre con lo stesso algoritmo) una stringa di hash del tipo “4677e13e83”
- La stringa “123MyKeyWord” produce (e produrrà sempre con lo stesso algoritmo) una stringa di hash del tipo “74ea9223ac” questo è un caso di collisione
Utilizzo dell’hashing per la sicurezza delle password
L’utilizzo di hashing sulle password, quindi, permette di non dover salvare direttamente le password degli utenti nei database ma solamente il loro corrispondente valore hashato.
In questo modo quando l’utente crea una nuova password (o la inserisce per loggarsi) non viene trasmessa la stringa inserita bensì la stringa di hash corrispondente esponendo al rischio di furto solamente dati criptati!
Vediamo cosa accade durante una tipica operazioni di registrazione e login che utilizza l’hashing come tecnica di sicurezza:
- L’utente crea e ricorda la propria password
- La password viene hashata e spedita al server
- Il server registra la stringa hashata come password dell’utente
- L’utente inserisce la password per un successivo login
- La password viene hashata e spedita al server
- Il server esegue il confronto fra le due stringhe hashate, se sono uguali la password inserita è corretta

Quando i malintenzionati compiono il furto di dati essi ottengono solamente stringhe di hash che non sono in grado di invertire. Le password degli utenti, conseguentemente, sono al sicuro.
Password dimenticata?
La conoscenza delle tecniche di hash e della loro applicazione permette di spiegare anche il motivo per cui quando un utente dimentica la password è costretto a crearne una nuova. Il server non possiede le password degli utenti ma solo le corrispondenti stringhe di hash, perciò non può comunicare all’utente la password dimenticata ma può solo abilitarlo a crearne una nuova.
Questo procedimento, che a volte risulta lungo e stressante per alcuni utenti è in realtà spesso sinonimo di sicurezza. Sempre meglio diffidare dai siti/server che alla domanda “password dimenticata?” rispondono inviando la password in chiaro, significa che la hanno salvata sul database ed è esposta a potenziali furti!
Salt & Pepper
Per garantire ulteriori livelli di sicurezza sono spesso applicate modifiche agli input prima dell’utilizzo di funzioni di hashing. Questi ulteriori livelli di sicurezza consistono nell’aggiungere una stringa di caratteri alla password prima che questa venga sottoposta ad hashing. Ovviamente, in assenza di tale stringa il risultato della funzione di hashing sarà errato.
- Salt: stringa di caratteri generata casualmente associata ad ogni utente, e diversa per ciascuno di essi, aggiunta agli input prima dell’hashing
- Pepper: stringa di caratteri segreta gestita dal server o dal codice sorgente aggiunta agli input prima dell’hashing
Vediamo un esempio con stringa di pepper = “myPepper”:
User | Password | Salt | Password + Salt + Pepper |
User_A | HelloWordl35 | ABE090 | HelloWordl35+ABE090+myPepper |
User_B | HelloPass36! | 8A76CD | HelloPass36!+8A76CD+myPepper |
Le password salvate in chiaro sono ancora molte!
Il salvataggio di password tramite hashing è una pratica di sicurezza che dovrebbe sempre essere adottata, tuttavia molte aziende ancora non adempiono a questo compito.
Ne è un esempio un recente caso avviato nel 2019 e concluso nel 2024 riguardante una società irlandese di Meta. La società aveva, infatti, salvato in chiaro le password di numerosi utenti lasciandole accessibili ai dipendenti e a possibili malintenzionati senza, fra l’altro, adempiere alla normativa europea GDPR in materia di sicurezza dei dati personali.
Per approfondire l’argomento è possibile consultare il comunicato della Irish Data Protection Commission.