Sapevate che i servizi web sicuri a cui accedete con una password non conoscono in realtà la password che utilizzate per accedere? Perché si fa così? E come è possibile? Grazie alle conoscenze acquisite nel nostro articolo sulle funzioni hash e la sicurezza informatica, possiamo dare una risposta a queste domande.
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:
Cosa sia una funzione hash crittografica è stato descritto nell'articolo Funzioni hash e sicurezza informatica. 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 funziona in 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. Tuttavia, non vogliamo soffermarci su questo aspetto in questa sede.
Avete dimenticato la password?
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.