Basics in Cryptography: What is a password hash?

Che cos’è una password?

Le password sono diventate un punto fermo nel mondo della tecnologia e anche nel linguaggio quotidiano. Dall’account di posta elettronica ai libri di favole per bambini su tesori sepolti, la richiesta di una password è diventata così banale che non ci si sofferma più di tanto su cosa sia una password, per non parlare dell’hash di una password.

Le password sono tecnicamente definite dal NIST come “Una stringa di caratteri (lettere, numeri e altri simboli) utilizzata per autenticare un’identità, verificare l’autorizzazione all’accesso o ricavare chiavi crittografiche”. Siamo tutti perfettamente informati su come inserire una password per accedere ai nostri siti web e account preferiti, ma la pratica di conservare queste credenziali in modo sicuro può essere un po’ più complicata.

Come utenti è fondamentale non riutilizzare mai le password, scegliere sempre password forti e assicurarsi di cambiarle di tanto in tanto. Un modo per creare e utilizzare password uniche e sicure per tutti i vostri account è utilizzare un gestore di password. Integrando un gestore di password nelle vostre pratiche di igiene della privacy, sarete già più sicuri del gran numero di utenti di Internet che non hanno ancora compiuto questo passo essenziale.

Purtroppo, non potete proteggervi al 100% perché le vostre credenziali di accesso sono gestite dai servizi a cui vi iscrivete. È qui che entrano in gioco le fughe di dati. Abbiamo imparato a conoscere gli articoli di cronaca che dicono qualcosa del tipo “la violazione comprende nomi utente, date di nascita, indirizzi e-mail, numeri di telefono e hashtag di password”. Mentre la maggior parte di questi termini è facile da capire, l’ultimo può essere fonte di confusione. Per chiarire, diamo un’occhiata a come le aziende e i servizi online gestiscono effettivamente i dati inviati quando si crea un nuovo account.

Il problema della memorizzazione sicura delle password.

Immaginate di essere un forum online in crescita e, dato che sempre più persone si affrettano a iscriversi al vostro servizio, dovete trovare un modo sicuro per conservare le informazioni di accesso dei vostri utenti. Dopotutto, se qualcuno ruba le informazioni di accesso, gli utenti non saranno contenti.

Per capire meglio questo aspetto, analizziamo cosa succede esattamente quando si cerca di accedere al proprio sito web preferito. Per prima cosa, si visita la pagina di accesso nel browser e viene richiesto di inserire un nome utente/indirizzo e-mail e una password. Si inseriscono queste informazioni e si fa clic su “Login”. Quello che succede dopo è un po’ complicato.

Quando si sceglie la password, questa non viene (si spera) memorizzata in chiaro presso il servizio in questione. Se i servizi memorizzassero le password in chiaro, si correrebbe il rischio di esporre le credenziali di accesso in caso di compromissione del servizio. Invece, la password scelta dovrebbe essere sottoposta a hash e l’hash dovrebbe essere memorizzato in un database sicuro gestito dal servizio. Quando si accede al nuovo account, l’indirizzo e-mail fornito e l’hash della password vengono confrontati con le informazioni memorizzate nel database. Se queste corrispondono, voilà, avete ottenuto l’accesso all’account. Tuttavia, chi viola il servizio otterrà solo hash con cui non potrà fare nulla e non potrà accedere al vostro account.

In Tuta utilizziamo Argon2 per ricavare la chiave che sblocca i dati criptati (chiave della password). Quando siamo passati da bycrypt ad Argon2 abbiamo anche aumentato la lunghezza delle chiavi generate a 256 bit, rendendole sicure anche dal punto di vista post-quantistico. La chiave della password non viene utilizzata per autenticare l’utente con il server Tuta, ma viene sottoposta a hash con SHA256 per diventare il verificatore della password, che viene trasmessa al server e sottoposta a un nuovo hash prima di essere memorizzata nel database. Per maggiori dettagli sul modo in cui la password è protetta in Tuta, consultare qui.

A visualization of how we handle passwords and encryption keys.

Cos’è che rende la memorizzazione di un hash più sicura rispetto alla memorizzazione di una password in chiaro? La risposta è una semplice protezione aggiuntiva in caso di violazione.

Che cos’è l’hashing delle password?

L’hashing della password è il processo che consiste nel prendere una password creata dall’utente e farla passare attraverso un algoritmo di hashing per rimescolare i bit e creare una rappresentazione unica della password scelta. Se non si conosce la password, idealmente non sarà possibile replicare lo stesso identico hash.

Esistono molti tipi di algoritmi di hashing, ma tutti svolgono una funzione simile. Prendono una password in chiaro, considerata come una stringa di dati di lunghezza arbitraria (si pensi alle diverse lunghezze delle vostre password); questa stringa viene poi convertita in bit di dati che vengono rimescolati in modo deterministico (il che significa che la stessa password produrrà sempre lo stesso hash) in base alla funzione di hash utilizzata. Questo hash viene poi memorizzato in un database sicuro.

È importante ricordare che l’hashing non è la stessa cosa della crittografia. Non esiste una chiave che permetta di decifrare un hash. L’hashing è una strada a senso unico che permette di passare solo dal testo in chiaro all’hash. Per coloro che hanno una certa inclinazione culinaria, prendiamo come esempio la patata. La patata sbucciata è il nostro testo in chiaro, una volta che l’abbiamo trasformata in un delizioso piatto di hashbrown, questo è il nostro hash. Proprio come non si possono trasformare gli hashbrown nella patata originale, non si può trasformare un hash nella password originale.

Hashing functions are a one-way street

Una funzione di hashing è una strada a senso unico. A differenza della crittografia, non vengono generate chiavi per riportare un hash al testo in chiaro originale.

Quando qualcuno parla di cracking delle password, non sta “decriptando” nulla, ma piuttosto creando un proprio elenco di hash basati sulle password comunemente utilizzate e confrontando poi i risultati noti con le informazioni trapelate nelle violazioni dei dati. Si tratta di una questione di riferimenti incrociati che non richiede conoscenze approfondite di crittoanalisi, ma solo una logica di base.

Cos’è l’hash di una password salata?

Abbiamo già parlato di salatura degli hash. La salatura è un processo in cui vengono aggiunti dati casuali a un input prima che venga elaborato da un algoritmo di hashing. Poiché il sale è unico per ogni password, questo protegge dagli attacchi che mirano a utilizzare hash precompilati perché, anche se i valori del sale fossero inclusi in una violazione dei dati, l’attaccante dovrebbe precompilare i valori per ogni singolo sale, rendendo l’attacco molto più costoso. Inoltre, se le password non sono salate, se io e voi utilizziamo la stessa password, gli hash appariranno uguali nel database a causa della natura deterministica degli algoritmi di hashing delle password. Salando le password, si ottengono risultati finali diversi, il che impedisce agli hacker di individuare rapidamente gli account con password identiche.

An example of the difference between hashed passwords with and without salting.

La salatura non solo rende il cibo più gustoso, ma rafforza anche gli hash delle password!

I sali crittografici possono derivare da elementi come il nome utente o altri identificatori unici, specifici per ogni account. L’elemento dell’unicità è fondamentale in questo caso, perché rende l’uso di attacchi con tabelle precalcolate molto più impegnativi dal punto di vista delle risorse di quanto sarebbe ragionevole.

Problemi e tipi di attacchi

L’hashing non è ovviamente perfetto, ma ci sono una serie di attacchi noti che vengono presi in considerazione quando i crittografi creano queste funzioni.

Attacchi di compleanno

Ogni algoritmo di hashing per password è vulnerabile a un attacco noto come attacco di compleanno. Questi sfruttano un problema matematico di probabilità noto come problema del compleanno. Una descrizione più precisa della matematica alla base di questo problema è disponibile qui. Fortunatamente, questi attacchi non sono considerati più veloci di un attacco a forza bruta.

Attacchi di collisione

Un attacco di collisione si verifica quando due password diverse (stringhe di testo in chiaro) vengono passate attraverso un algoritmo di hashing e restituiscono un hash corrispondente. Questo è problematico perché significa che una password errata, combinata con il nome utente corretto, potrebbe portare a un accesso riuscito.

Se si scopre che un attacco di collisione è più veloce e più efficiente di un attacco di compleanno, la funzione di hashing della password può essere considerata rotta e dovrebbe essere sostituita con un algoritmo più resistente.

Attacchi di forza bruta

Gli attacchi di forza bruta sono una potenziale vulnerabilità per ogni crittosistema. Data una quantità infinita di tempo e una quantità infinita di potenza di calcolo, un hash può essere scoperto. Per questo motivo, sono considerati una cartina di tornasole per la gravità di altre vulnerabilità. Se si scopre che un attacco è più veloce di una forza bruta, l’algoritmo in questione deve essere modificato o abbandonato.

Funzioni hash più diffuse

Sono stati sviluppati numerosi algoritmi di hashing per le password, ognuno dei quali presenta punti di forza e di debolezza specifici. Purtroppo alcuni degli algoritmi di hashing più diffusi si sono dimostrati vulnerabili, ma sono ancora regolarmente utilizzati (come spiega questo video di YouTube) e sono spesso presenti nei dataset di violazione.

  1. MD5 : considerato un algoritmo superato da tempo, questa funzione di hashing è ancora regolarmente presente quando nuovi dataset di violazioni vengono resi pubblici. MD5 è stato sviluppato dal professore del MIT Ronald Rivest nel 1991 in sostituzione di MD4. Produce un hash a 128 bit, ma si è subito dimostrato suscettibile agli attacchi di collisione. Nel 2013, i ricercatori sono riusciti a dimostrare che l’algoritmo non era più sicuro e doveva essere sostituito. Purtroppo, gli hash MD5 continuano a emergere nelle violazioni dei dati, il che significa che i vostri dati possono essere esposti senza alcuna colpa.
  2. SHA : Il sostituto consigliato per MD5 era la famiglia di funzioni di hashing Secure Hash Algorithms. SHA-1 è stato introdotto nel 1995 dopo lo sviluppo da parte dell’NSA e genera hash a 160 bit. Nel 2005 l’algoritmo è stato considerato insicuro contro gli attori delle minacce avanzate, il che rappresentava una minaccia particolare nei casi in cui veniva utilizzato per creare firme digitali per verificare l’autenticità. SHA-2 è stato pubblicato in precedenza, nel 2001, e ha ufficialmente sostituito il suo predecessore nel 2011, quando il NIST ha introdotto nuovi requisiti minimi di sicurezza. Sfortunatamente, la loro introduzione è stata rallentata dalla mancanza di compatibilità all’indietro. Più recentemente, nel 2015 è stato rilasciato SHA-3, con una struttura completamente diversa rispetto alle precedenti iterazioni, che erano simili a MD5. SHA-2 e -3 supportano entrambi le stesse lunghezze di hash, da 256 a 512 bit, a seconda delle impostazioni scelte.
  3. bcrypt : Introdotto nel 1999, bcrypt è un algoritmo di hashing per password che ha introdotto la salatura predefinita ed è adattivo. Ciò significa che nel tempo può continuare a resistere agli attacchi di forza bruta. Bcrypt si basa sul cifrario Blowfish, sviluppato da Bruce Schneier.
  4. Argon2 : Argon2 è stato il vincitore della Password Hashing Competition 2015. Non solo è resistente ai canali laterali, ma è anche resistente alla memoria, il che lo rende più resistente agli attacchi di forza bruta rispetto a bcrypt.

In Tuta siamo all’avanguardia nel campo della sicurezza e della privacy. Il passaggio ad Argon2 ci ha reso il primo provider di posta elettronica a utilizzare la forma più forte di derivazione delle chiavi attualmente disponibile. Mettendo la crittografia e la sicurezza al primo posto, stiamo costruendo una privacy di cui ci si può fidare. Grazie alla nostra architettura a conoscenza zero, non abbiamo accesso alle chiavi necessarie per decifrare o visualizzare i dati. La vostra privacy è nel palmo della vostra mano.

Riprendete il controllo dei vostri dati oggi stesso passando a Tuta e attivando la privacy.