L'hashing delle password è un aspetto fondamentale della sicurezza delle password, trasformando il paesaggio dell'archiviazione delle password da testo in chiaro a hash crittografati. Questo articolo esplora l'evoluzione dell'hashing delle password, dalle prime algortmi come MD5 e SHA-1 ai metodi più sicuri raccomandati oggi, concludendo con l'importanza di utilizzare password casuali per ciascun sito web.
Prima di approfondire la storia e l'evoluzione dell'hashing delle password, è importante capire cosa sia l'hashing. Le funzioni hash, i metodi che eseguono l'hashing, sono progettate per prendere qualsiasi stringa di dati, o "input", e produrre una stringa di byte a dimensione fissa, tipicamente nota come "hash". Questo processo ha diverse caratteristiche chiave che lo rendono particolarmente utile per scopi di sicurezza.
Una caratteristica cruciale delle funzioni hash è la loro sensibilità ai cambiamenti dell'input. Questo è noto come effetto valanga. Anche una minima alterazione dell'input, come cambiare un singolo carattere in una password, produrrà un hash completamente diverso. Ad esempio, gli hash per le stringhe "password1" e "password2" appariranno completamente dissimili, anche se l'unica differenza tra i due input è l'ultimo carattere. Questa caratteristica è fondamentale per mantenere l'integrità dei dati, in quanto rende quasi impossibile dedurre l'input originale dall'hash.
Inoltre, le funzioni hash sono funzioni a senso unico. Ciò significa che sono progettate per essere computazionalmente infeasible da invertire. L'output (l'hash) non conserva dettagli specifici sull'input che permetterebbero a qualcuno di ricostruire i dati originali senza uno sforzo computazionale straordinario. L'unico modo fattibile per "invertire" un hash è attraverso un metodo chiamato brute-forcing, dove ogni possibile combinazione dei dati originali viene hashata di nuovo fino a trovare un hash corrispondente.
Nei primi giorni della sicurezza digitale, MD5 (Message-Digest Algorithm 5) e SHA-1 (Secure Hash Algorithm 1) erano ampiamente utilizzati per l'hashing delle password. Sviluppati nei primi anni '90, questi algoritmi convertivano le password in testo in chiaro in valori hash a dimensione fissa. Nonostante la loro sicurezza iniziale, vulnerabilità come la suscettibilità agli attacchi di collisione presto li resero obsoleti per applicazioni sicure.
Mentre le funzioni hash sono progettate per essere veloci ed efficienti, questa caratteristica può essere dannosa quando si tratta di sicurezza delle password perché facilita gli attacchi brute-force. Le Funzioni di Derivazione delle Chiavi Basate su Password (PBKDF), come PBKDF2, bcrypt e scrypt, sono progettate per contrastare questi attacchi incorporando un sale (per difendersi dagli attacchi con tabelle arcobaleno) e impiegando una tecnica nota come key stretching. Il key stretching rallenta intenzionalmente il processo di hashing, che può scoraggiare significativamente i tentativi di accesso non autorizzato.
Con l'avanzare della cibersicurezza, le inadeguatezze degli algoritmi di hashing iniziali come MD5 e SHA-1 divennero evidenti, spingendo lo sviluppo di algoritmi specificamente progettati per la sicurezza delle password, come bcrypt, scrypt e Argon2 o le cosiddette Funzioni di Derivazione delle Chiavi Basate su Password (PBKDF).
Secondo OWASP, gli algoritmi raccomandati per l'hashing delle password sono bcrypt, scrypt e Argon2. Questi sono preferiti per la loro robusta difesa contro gli attacchi brute-force e i loro meccanismi integrati per sale e key stretching.
bcrypt è una funzione di hashing delle password derivata dal cifrario Blowfish. Incorpora un sale per proteggersi dagli attacchi con tabelle arcobaleno e utilizza un parametro di costo per aumentare il tempo di computazione (e quindi la difficoltà) di generare l'hash. Questo fattore di costo è regolabile, permettendo all'algoritmo di essere scalabile con i miglioramenti hardware.
Parametri chiave:
OWASP raccomanda l'uso di un fattore di lavoro di 10 o più con un limite di password di 72 byte.
scrypt è progettato per essere sia intensivo in termini di memoria che di tempo per resistere agli attacchi su larga scala con hardware personalizzato. Può essere configurato per richiedere una quantità specifica di memoria e include anche un sale e un conteggio delle iterazioni, simile a PBKDF2.
Parametri chiave:
OWASP raccomanda di usare un costo CPU/memoria minimo di (2^17), una dimensione del blocco minima di 8 (1024 byte) e un parametro di parallelizzazione di 1.
Argon2, il vincitore della Password Hashing Competition nel 2015, viene in due varianti: Argon2d e Argon2i. Argon2d è ottimizzato per ambienti in cui la minaccia degli attacchi side-channel è bassa, mentre Argon2i è ottimizzato per resistere agli attacchi side-channel. Incorpora anche caratteristiche chiave sia da bcrypt che da scrypt.
Parametri chiave:
OWASP raccomanda di utilizzare Argon2id con una configurazione minima di 19 MiB di memoria, un conteggio delle iterazioni di 2 e un grado di parallelismo di 1.
Dati i continui cambiamenti delle minacce e delle contromisure di sicurezza, è cruciale rimanere aggiornati con le ultime pratiche in materia di sicurezza delle password. Per le raccomandazioni più recenti e complete, si prega di fare riferimento al OWASP Password Storage Cheat Sheet sul sito ufficiale di OWASP. Assicurati di rivedere queste linee guida regolarmente per allinearti alle migliori pratiche in materia di cibersicurezza.
Sebbene l'impiego di algoritmi di hashing moderni sia cruciale, anche il modo in cui le password vengono create e gestite gioca un ruolo critico nel mantenimento della sicurezza. Password casuali per ciascun sito web sono essenziali per diversi motivi:
Da MD5 e SHA-1 agli algoritmi moderni come bcrypt e Argon2, l'hashing delle password ha subito significative trasformazioni. Poiché le minacce informatiche continuano a evolversi, l'adozione di algoritmi di hashing moderni e l'assicurare l'uso di password casuali e uniche per ciascun sito web sono pratiche essenziali per salvaguardare la sicurezza online. Queste strategie non solo prevengono la compromissione di account individuali, ma rafforzano anche la postura complessiva di sicurezza contro attacchi sempre più sofisticati.