Le funzioni di hash giocano un ruolo fondamentale nella sicurezza delle password per i servizi web sicuri. Questi servizi non memorizzano mai la tua password vera e propria, ma ne conservano 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 accedi, il servizio esegue un hash della password che fornisci e la confronta con l’hash memorizzato. In questo modo, anche se si verifica una 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. Accediamo a un servizio web nel modo consueto con un nome di account e una password:

Campo di inserimento dei dati di login

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

Database con nomi utente e password

Il servizio web cerca innanzitutto il nome dell’account nel database del modulo di login compilato. 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 chiunque abbia accesso al database, compresi gli operatori del servizio web e i loro dipendenti. Inoltre, è ormai prassi comune per molte aziende esternalizzare l’effettivo funzionamento dei servizi web che offrono a fornitori di cloud computing statunitensi come Amazon Web Services o Google Cloud. Pertanto, possiamo supporre 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 del 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:

Password e nome dell'account nel database

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

Funzione hash crittografica

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

Database di valori hash crittografici

Questo cambia solo leggermente la procedura di accesso. L’accesso avviene ancora nel modo consueto con un nome di account e una password:

Campo di inserimento dei dati di login

Per prima cosa, il servizio web cerca di nuovo nel suo database il nome dell’account dal modulo di login compilato. Ma nel passaggio successivo, 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, l’accesso viene effettuato. In caso contrario, l’accesso viene negato.

A parte l’uso della funzione hash, non è cambiato nulla nella procedura di login. 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 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 viene quindi eliminato perché le password non sono più contenute nel database.

Come funzionano le funzioni hash nella pratica

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 hai dimenticato la password di un servizio web, puoi richiedere la reimpostazione della password alla maggior parte dei servizi web. Riceverai un’e-mail con un link che ti porterà a un modulo in cui potrai impostare una nuova password. Ora sappiamo perché questa procedura è così scomoda: il servizio web non conosce la tua vecchia password. Purtroppo non tutte le aziende seguono ancora questa prassi di sicurezza consolidata. Se, tramite un’e-mail o una telefonata con il team di assistenza, indichi di aver dimenticato la password e poi ti viene effettivamente comunicata, puoi concludere che questa azienda non rispetta i moderni standard di sicurezza informatica. Al più tardi, quindi, devi assolutamente assicurarti di non utilizzare questa password in nessun altro contesto. Per utilizzare costantemente una password separata per ogni servizio web, dovresti utilizzare un gestore di password. In questo modo non dovrai più ricordare molte password individuali e avrai il vantaggio di poter creare password casuali di alta qualità. Esistono plug-in per i più diffusi gestori di password che compilano per te 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 tua formazione personale sulla sicurezza informatica

In conclusione, le funzioni di hash svolgono un ruolo fondamentale nel mantenere le password al sicuro dagli attacchi informatici. Tuttavia, la loro efficacia dipende molto dalla capacità delle persone di comprendere e gestire le proprie password. È qui che entra in gioco la formazione sulla sicurezza informatica. Insegnando alle persone a creare password forti e a stare attenti alle minacce online, tutti noi possiamo contribuire a mantenere al sicuro le nostre informazioni personali. Ricorda che la sicurezza online è un lavoro di squadra e che un po’ di conoscenza è molto utile per proteggersi nel mondo digitale.