L’Agenzia per la cybersicurezza nazionale (ACN) ed il Garante per la protezione dei dati personali hanno messo a punto specifiche linee guida in materia di conservazione delle passwords, fornendo importanti indicazioni sulle misure tecniche da adottare per innalzare il livello di sicurezza.
Di seguito, abbiamo quindi estratto un sunto degli elementi principali contenuti nelle Linee Guida, cercando di semplificarne i concetti così da renderli di pronta comprensione.
Perchè è necessario “proteggere” le passwords?
La gestione delle passwords è un aspetto fondamentale nell’ambito della sicurezza informatica e della protezione dei dati personali che, in genere, vengono appunto protetti dalle passwords.
E’ quindi indispensabile prevedere ed attuare misure tecniche e organizzative efficaci per l’archiviazione, la conservazione e l’utilizzo delle passwords.
Gli archivi in cui sono conservate le passwords sono infatti divenuti sempre più frequentemente oggetto di attacchi informatici. E, nel caso di successo dell’attività di hackeraggio, le passwords sono spesso successivamente rese disponibili mediante la loro pubblicazione online od utilizzate per condurre altri attacchi.
Per tali ragioni, il Garante e l’ACN hanno deciso di redigere le Linee Guida per la conservazione delle password, raccomandando l’utilizzo di robuste funzioni crittografiche di password hashing e fornendo indicazioni e raccomandazioni sulle funzioni ritenute, attualmente, più sicure.
La struttura delle Linee Guida
Le Linee Guida per la conservazione delle passwords si compongono sostanzialmente di tre parti, nelle quali rispettivamente possiamo trovare:
- il concetto di password hashing
- gli algoritmi più comuni utilizzati per il password hashing
- le indicazioni su quali sono gli algoritmi raccomandati e sui rispettivi parametri.
Di seguito, abbiamo approfondito gli aspetti più rilevanti delle Linee Guida.
Password Hashing
La funzione di hash produce una sequenza di bit (o una stringa), detta digest, strettamente correlata con i dati in ingresso.
Una delle proprietà delle funzioni di hash crittografiche è quella di essere one-way, ovvero non invertibile.
Tale caratteristica rende le funzioni di hash particolarmente adatte alla conservazione delle passwords:.
Invece che memorizzare nell’archivio le passwords in chiaro, l’uso della funzione permette di salvare il loro digest.
In tal modo, qualsiasi soggetto malintenzionato che sia venuto in loro possesso non potrà disporre direttamente delle passwords, ma solamente del loro digest.
Nonostante il password hashing migliori la sicurezza della conservazione delle passwords, è importante prestare attenzione ad alcuni aspetti delicati, che possono lasciare spazio a vulnerabilità.
Il principale scenario da tenere in considerazione è il data breach, ovvero l’incidente in cui trapela tutta o parte della lista contenente i digest di passwords salvati su un server.
Una volta ottenuta la lista delle coppie utente-digest, l’attaccante può procedere per forza bruta, cioè calcolando l’hash di passwords casuali fino a trovare una corrispondenza.
Salt & Pepper
Per potersi difendere da questo genere di attacchi hacker, le Linee Guida consigliano l’utilizzo di algoritmi di password hashing che prevedano l’aggiunta di un salt o di un pepper ad ogni password.
Il salt è una stringa di bit casuali, che viene concatenata alla password prima del calcolo del digest e poi salvata in chiaro insieme al digest della password dell’utente.
Nonostante non sia cifrato, il salt fornisce protezione su diversi fronti: benchè non aumenti il livello di sicurezza della conservazione della password di un utente specifico, consente però di rallentare le capacità offensive di un attaccante sull’intero archivio in modo direttamente proporzionale alla sua dimensione.
Il pepper è una stringa di bit casuale che, al contrario del salt, può essere la stessa per tutte le passwords nell’archivio, ma deve essere tenuta segreta in quanto viene utilizzata come chiave di un HMAC o di un meccanismo di cifratura simmetrico applicato al digest della password.
I principali algoritmi
Il principale algoritmo che viene utilizzato per il password hashing è quello c.d. “di derivazione della chiave” (o key derivation function).
Le funzioni di derivazione di chiave sono ideate per ottenere una o più chiavi segrete a partire da un valore iniziale segreto, detto master key, e sono spesso configurabili a seconda delle necessità rispetto a tutte o ad alcune tra le seguenti caratteristiche:
- il costo computazionale, solitamente rappresentato dal numero di iterazioni di una funzione dell’algoritmo che, se aumentato, ne rallenta l’esecuzione;
- la memoria utilizzata, ovvero la memoria massima necessaria per eseguire l’algoritmo;
- la possibilità di parallelizzazione, in quanto l’algoritmo potrebbe essere suddiviso in più parti l’una indipendente dall’altra e quindi eseguibili simultaneamente.
Le varianti della key derivation function
Le sempre maggiori capacità computazionali utilizzate dai sistemi di decrittazione hanno indotto i crittografi ad implementare gli algoritmi di cifratura.
Attualmente, per l’utilizzo in ambito di password hashing sono quattro le funzioni maggiormente diffuse e più sicure:
- Password Based Key Derivation Function 2
- Scrypt
- Bcrypt
- Argon2
Il Password Based Key Derivation Function 2 (PBKDF2) è una funzione di derivazione di chiave basata su password ideata nel 1999.
Nel PBKDF2 la stringa è generata da blocchi formati dalla concatenazione del salt con il contatore convertito in binario da 32 bit.
Dal 2010, il salt deve essere lungo almeno 128 bit, ottenuti tramite un generatore di numeri casuali.
Scrypt è una funzione di derivazione di chiave basata su password ideata nel 2009, con lo scopo di rendere meno efficaci gli attacchi basati su implementazioni hardware specializzate.
Rispetto ai predecessori, lo scrypt prevede un nuovo parametro che può essere personalizzato al fine di rendere l’algoritmo più sicuro quando utilizzato nel contesto del password hashing.
Bcrypt è una funzione ideata specificatamente per essere una funzione di password hashing e non una funzione di derivazione di chiave. È stata introdotta nel 1999 e sfrutta un cifrario a blocchi.
L’idea è quella di creare un algoritmo di key schedule per il cifrario a blocchi che abbia alti requisiti computazionali.
Ciò permette di aumentare i tempi richiesti per eseguire il cifrario, per poi applicare la cifratura varie volte.
Argon2 è una funzione di derivazione di chiave progettata nel 2013 e l’algoritmo è stato progettato per massimizzare il costo degli attacchi alle passwords effettuati con macchine ASIC (in grado di ottenere numerosi digest contemporaneamente), grazie alla quantità personalizzabile di memoria necessaria durante la sua computazione.
Conclusioni
Le Linee Guida approdano a conclusioni condivise dalla comunità scientifica: l’uso di un salt risulta una condizione obbligatoria per qualsiasi algoritmo di password hashing.
Pertanto, al fine di garantire la sicurezza delle Vostre passwords Vi consigliamo di:
- utilizzare gli algoritmi di password hashing indicati nelle Tabelle delle Linee Guida
- attenersi ai parametri minimi consigliati per i diversi algoritmi
- evitare soluzioni personalizzate.
Per approfondire l’argomento, potete leggere il testo integrale delle Linee Guida ACN-GPDP QUI →
Per la relativa consulenza od assistenza, potete contattare l’avv. Andrea Spreafico.