Cosa sono le "Hash Functions"? Le funzioni di hash svolgono un ruolo fondamentale nella sicurezza delle password per i servizi web sicuri. Questi servizi non memorizzano mai la password vera e propria, ma ne memorizzano una versione con hash. Le funzioni hash sono algoritmi che convertono i dati di input (come una password) in una stringa di caratteri di dimensioni fisse. Questo processo è irreversibile, il che significa che è quasi impossibile ricavare l'input originale dall'hash. Quando si accede, il servizio esegue l'hash della password fornita e la confronta con l'hash memorizzato. In questo modo, anche in caso di violazione dei dati, gli hacker non possono accedere alle password in chiaro, migliorando la sicurezza generale.
Una procedura di login poco sofisticata
Vediamo innanzitutto come si presenta una procedura di login non sofisticata. Si accede a un servizio Web nel modo consueto, con un nome di account e una password:

Il nostro servizio web non sofisticato ha una tabella nel suo database con tutti i nomi degli account e le loro password associate:

Il servizio Web cerca innanzitutto il nome dell'account dal modulo di accesso compilato nel suo database. Se il nome esiste nel database, il servizio confronta anche la password del modulo di accesso con la password associata nel database. Se le password corrispondono, la registrazione viene effettuata. In caso contrario, la registrazione viene negata. A prima vista, si tratta di una procedura di login sicura. Solo chi è in possesso di un nome account valido e conosce la password associata può accedere all'account corrispondente. A tutti gli altri viene negato l'accesso. Fin qui tutto bene! Ma cosa c'è di poco sofisticato in questa procedura?
Il problema è che le password sono memorizzate in un database. Ciò significa che sono potenzialmente note a tutti coloro che hanno accesso al database, compresi gli operatori del servizio Web e i loro dipendenti. Inoltre, è ormai prassi comune per molte aziende esternalizzare il funzionamento effettivo dei servizi Web che offrono a fornitori di cloud computing statunitensi come Amazon Web Services o Google Cloud. Pertanto, possiamo presumere che, in linea di principio, anche gli operatori e i dipendenti di questi fornitori di cloud computing abbiano accesso al database e quindi alla nostra password. Inoltre, ovviamente, anche i criminali potrebbero ottenere un accesso non autorizzato ai dati contenuti nel database.
Inoltre, non è un segreto che la maggior parte degli utenti di servizi Web riutilizzi la stessa password per diversi servizi. Pertanto, chi è riuscito a ottenere la password dell'account Facebook/Twitter o dell'agenzia di viaggi online di un obiettivo, con un po' di fortuna avrà anche la password della sua e-mail, dell'online banking, dell'agenda personale, di una piattaforma di incontri e della intranet dell'azienda in cui l'obiettivo lavora. L'incentivo economico a rubare le password dal database di qualsiasi servizio web è di conseguenza elevato, anche se il servizio web stesso non è un obiettivo redditizio! La domanda è: come possiamo risolvere questo problema?
Una procedura di login più sofisticata
Ricordiamo: Il servizio web descritto in precedenza ha una tabella nel suo database con tutti i nomi degli account e le relative password:

Adattiamo questa tabella nel modo seguente. Invece di memorizzare le password, applichiamo alle stesse una funzione crittografica di hash di nostra scelta:

Quindi, al posto delle password, memorizziamo i valori hash risultanti nel database:

La procedura di accesso cambia solo leggermente. L'accesso avviene ancora nel modo consueto, con un nome di account e una password:

Per prima cosa, il servizio web cerca di nuovo nel suo database il nome dell'account dal modulo di login compilato. Ma nella fase successiva, la nuova procedura è diversa. Se il nome esiste nel database, la funzione hash viene applicata alla password della schermata di login. Solo allora il valore hash risultante viene confrontato con il valore hash corrispondente nel database. Ancora una volta, le password non vengono più confrontate tra loro, ma solo con i loro valori hash. Se i valori hash corrispondono, il login viene effettuato. In caso contrario, l'accesso viene negato.
A parte l'uso della funzione hash, non è cambiato nulla nella procedura di accesso. Dalle proprietà delle funzioni hash crittografiche, ne consegue che il confronto dei valori hash è altrettanto valido del confronto diretto delle password. Ma ora le password stesse non sono più memorizzate nel database del servizio web. Chiunque acceda al database - autorizzato o meno - non ha più accesso alle password, ma solo ai loro valori hash. L'incentivo economico descritto in precedenza per rubare le password dal database di un servizio Web è quindi eliminato, perché le password non sono più contenute nel database.
Come funzionano in pratica le funzioni hash
Speriamo di essere riusciti a spiegare meglio come sia possibile e perché è prassi comune che i servizi web sicuri non conoscano nemmeno le password che utilizziamo per accedere. In pratica, la sicurezza di questa procedura viene ulteriormente aumentata generando i valori di hash con una funzione di hash crittografica specializzata(bcrypt) e collegandoli inoltre con una stringa di caratteri segreti a livello di database (salt) prima di applicare questa funzione di hash.
Se avete dimenticato la password di un servizio web, potete richiedere la reimpostazione della password dalla maggior parte dei servizi web. Riceverete un'e-mail con un link che vi porterà a un modulo in cui potrete impostare una nuova password. Ora sappiamo perché questa procedura è così scomoda: il servizio web non conosce la vecchia password. Purtroppo non tutte le aziende seguono ancora questa prassi di sicurezza consolidata. Se si segnala via e-mail o durante una telefonata con un team di assistenza di aver dimenticato la password e poi viene effettivamente comunicata la password, si può concludere che l'azienda in questione non aderisce ai moderni standard di sicurezza informatica. Al più tardi, quindi, dovreste assolutamente assicurarvi di non utilizzare questa password in nessun altro contesto. Per utilizzare costantemente una password separata per ogni servizio web, dovreste utilizzare un gestore di password. In questo modo non dovrete più ricordare molte password individuali e avrete il vantaggio di poter creare password casuali di alta qualità. Esistono plug-in per i più diffusi gestori di password che compilano per voi anche le schermate di accesso ai servizi web. Raramente convenienza e sicurezza si incontrano così bene.
Integrare la sicurezza delle password e le funzioni hash nella formazione personale sulla sicurezza informatica
In conclusione, le funzioni di hash svolgono un ruolo cruciale nel mantenere le password al sicuro dagli attacchi informatici. Tuttavia, la loro efficacia dipende in larga misura dalla capacità delle persone di comprendere e gestire le proprie password. È qui che entra in gioco la formazione sulla sicurezza informatica. Insegnando a creare password forti e a stare attenti alle minacce online, tutti possiamo contribuire a mantenere al sicuro i nostri dati personali. Ricordate che la sicurezza online è un lavoro di squadra e che un po' di know-how è molto utile per proteggerci nel mondo digitale.