Platone Data Intelligence.
Ricerca verticale e intelligenza artificiale.

Sicurezza seria: MD5 considerato dannoso - per un importo di $ 600,000

Data:

In un'affascinante delibera legale emessa dal regolatore francese per la protezione dei dati CNIL (Commissione nazionale per l'informatica e le libertà), l'impresa energetica Électricité de France, in breve EDF, lo è stata multa di 600,000 euro (circa $ 600,000).

La dichiarazione legale è, nel modo di cose del genere, piuttosto lunga e (almeno per i non avvocati) linguisticamente rotonda, il che significa che è necessaria una ragionevole competenza in francese per comprendere tutti i dettagli della questione, ma il caso generale si riduce a quattro infrazioni.

I primi tre riguardano le interazioni generali relative ai dati con i clienti, coprendo:

  • Invio di e-mail di marketing commerciale senza il giusto consenso.
  • Raccolta dati senza chiarire cosa o perché.
  • Non gestire le richieste in modo affidabile quando i clienti hanno chiesto di vedere i propri dati, o di farli cancellare.

Ma è l'ultima lamentela che ha suscitato il nostro interesse: Sur le manquement à l'obbligation d'assurer la sécurité des données.

In inglese, questo si traduce vagamente come mancata memorizzazione sicura dei dati, e si riferisce in modo molto specifico alla gestione non sicura delle password.

MD5 considerato dannoso

Il regolatore ha osservato, tra le altre cose, che nonostante affermasse che si trattava di salting e quindi hashing delle password utilizzando un algoritmo di hashing accettato, EDF aveva ancora più di 25,000 password di utenti "protette" con un singolo hash MD5 fino a luglio 2022.

Come avrai sentito molte volte su Naked Security, archiviare il file hash crittografico di una password significa che puoi convalidare una password quando viene presentata semplicemente ricalcolando il suo hash e confrontandolo con l'hash della password originariamente scelta.

Se gli hash corrispondono, puoi tranquillamente dedurre che le password corrispondono, senza mai dover memorizzare la password effettiva.

Quando viene presentata, la password deve essere sempre e solo tenuta temporaneamente in memoria e può essere scartata non appena viene calcolato il suo hash.

Finché l'algoritmo di hashing è considerato crittograficamente sicuro, non può essere utilmente "eseguito al contrario", quindi non è possibile lavorare a ritroso dall'hash per rivelare nulla sulla password stessa. (Un hash di questo tipo è conosciuto in gergo come a funzione a senso unico.)

Allo stesso modo, un algoritmo di hashing decente ti impedisce di iniziare con un hash noto e di escogitare un valore di input (qualsiasi input, non necessariamente la password originale) che produca l'hash desiderato.

Dovresti provare input dopo input fino a quando non sei fortunato, il che per gli hash anche di 128 bit richiederebbe troppo tempo per essere un attacco praticabile. (Si dice che sia un hash con la precauzione di sicurezza di non consentire di capire più input con lo stesso output resistente alle collisioni.)

Ma MD5, come probabilmente saprai, ha problemi significativi con le collisioni, così come il suo immediato successore SHA-1 (entrambi questi hash sono usciti all'inizio degli anni '1990).

Al giorno d'oggi, nessuno dei due algoritmi è raccomandato per l'uso ovunque, da chiunque, per qualsiasi scopo, dato che esistono alternative simili ma ancora sicure che possono essere facilmente utilizzate per sostituirle, come SHA-256 e SHA-512:

Gli hash MD5 sono lunghi 128 bit o 16 byte. SHA-256 e SHA-512 sono rispettivamente 2x e 4x più lunghi. Ma non è solo questa lunghezza extra di hash che li rende più adatti. Il loro vantaggio principale rispetto a MD5 è che non hanno problemi specifici noti con le collisioni, quindi la loro sicurezza crittografica non è considerata generalmente dubbia come risultato.

Salatura e filatura

In breve, non ti aspetteresti che nessuna azienda, figuriamoci un colosso del settore energetico come EDF, utilizzi MD5 per qualsiasi scopo crittografico, figuriamoci per proteggere le password.

Ancora peggio, tuttavia, era la mancanza di salatura, che è il punto in cui un blocco di dati scelto casualmente per ogni utente viene mescolato con la password prima che venga calcolato il relativo hash.

Il motivo di un salt è semplice: garantisce che i valori hash di potenziali password non possano essere calcolati in anticipo e quindi portati con sé per aiutare con un attacco.

Senza salatura, ogni volta che un utente sceglie la password 123456, i truffatori sanno in anticipo quale sarebbe il suo hash.

Anche se l'utente sceglie una password più adatta, ad esempio 34DF6467!Lqa9, puoi sapere in anticipo che sarà il suo hash MD5 7063a00e 41866d47 f6226e60 67986e91.

Se hai un elenco abbastanza lungo di password precalcolate, o di password parzialmente calcolate (conosciute piuttosto splendidamente in gergo come tavolo arcobaleno), potresti essere in grado di recuperare la password tramite la tabella piuttosto che provando trilioni di combinazioni di password fino a quando non sarai fortunato.

Salting significa che avresti bisogno di una tabella arcobaleno completa e precalcolata per ogni utente (la tabella è determinata dalla combinazione di sale + password) e non saresti in grado di calcolare ogni tabella arcobaleno - un'attività che può richiedere diverse settimane e occupare terabyte di spazio su disco - fino a quando non avrai comunque recuperato i sali,

Ma c'è altro che devi fare.

Anche se includi un salt, in modo che i "dizionari hash" precalcolati non possano essere utilizzati e utilizzi un algoritmo crittografico affidabile come SHA-512, un calcolo hash da solo è sufficientemente rapido da consentire agli aggressori che hanno acquisito un database di hash di prova ancora miliardi di possibili password al secondo, o anche di più.

Quindi dovresti usare quello che viene chiamato stiramento inoltre, dove non solo salti la password iniziale, ma poi passi l'input attraverso l'algoritmo di hashing migliaia di volte o più in un ciclo, rendendo così gli attacchi molto più dispendiosi in termini di tempo per tutti i truffatori che vogliono provare.

A differenza dell'addizione ripetuta, dove puoi usare una singola moltiplicazione come scorciatoia per sostituire, diciamo, il calcolo 5+5+5+5+5+5 con 6×5, non ci sono scorciatoie per gli hash ripetuti. Per eseguire l'hashing di un input 1000 volte sono necessari 1000 "giri" dell'handle di calcolo crittografico.

Non solo un problema MD5

Ironia della sorte, sembra che sebbene EDF avesse solo 25,800 password sottoposte ad hashing con MD5 e affermasse in sua difesa che utilizzava principalmente SHA-512, non stava ancora salando o estendendo gli hash memorizzati.

L'autorità di regolamentazione riferisce che 11,200,000 password sono state correttamente salate e sottoposte ad hashing, ma ce n'erano comunque 2,400,000 che erano state semplicemente sottoposte ad hashing direttamente una volta, sia con MD5 che con SHA-512.

Apparentemente, EDF ha ora messo a punto l'archiviazione delle password, ma la società è stata comunque multata di 600,000 euro e rimarrà quotata pubblicamente online sul "passo cattivo" di CNIL per i prossimi due anni.

Non possiamo essere sicuri di quale multa sarebbe stata inflitta se la sentenza avesse riguardato solo un hashing scadente e EDF non avesse dovuto rispondere anche degli altri tre reati di protezione dei dati elencati all'inizio...

... ma dimostra che scelte crittografiche sbagliate possono costarti denaro in più di un modo!

Cosa fare?

Memorizza le password dei tuoi clienti in modo sicuro!

Il costo computazionale aggiuntivo di salting-and-stretching può essere scelto in modo che i singoli utenti non siano disturbati quando eseguono l'accesso, ma gli aspiranti aggressori hanno la loro velocità di attacco aumentata di diversi ordini di grandezza.

Un attacco di recupero password che potrebbe richiedere una settimana per estrarre il 10% delle password archiviate come semplici hash one-shot richiederebbe, in teoria, 200 anni (10,000 settimane) se si rendesse il costo del calcolo di ogni password di prova 10,000 volte più difficile .

Leggi la nostra ottimo articolo esplicativo proprio su questo argomento:

In breve, consigliamo il PBKDF2 Algoritmo di "allungamento" con SHA-256 come core hash, con un random per utente salt of 16 bytes (128 bit) o ​​più.

Ciò corrisponde alle raccomandazioni dell'ultima sentenza della CNIL.

CNIL non offre consigli per il numero di iterazioni PBKDF2, ma come vedrai nel nostro articolo, il nostro consiglio (ottobre 2022) è di utilizzare 200,000 or more. (Puoi aumentare regolarmente il numero di loop per tenere il passo con l'aumento della potenza di calcolo.)

Se non vuoi usare PBKDF2, ti suggeriamo di leggere gli algoritmi bcrypt, scrypt ed Argon2 per aiutarti a fare una scelta saggia.

Non lasciarti sorprendere dal passaggio cattivo crittografico!


spot_img

L'ultima intelligenza

spot_img