it-swarm-eu.dev

MD5 è considerato insicuro?

Dopo che tutti questi articoli circolano online su exploit md5, sto pensando di passare a un altro algoritmo hash. Per quanto ne so, è sempre stato l'algoritmo scelto da numerosi DBA. È molto utile utilizzare MD5 invece di (SHA1, SHA256, SHA384, SHA512) o è un puro problema di prestazioni?

Quale altro hash mi consigliate (prendendo in considerazione le applicazioni associate a dati come piattaforma)? Attualmente sto usando hash salati (hash salati MD5). Si prega di considerare sia gli hash dei file md5 che gli hash delle password.

89
Tawfik Khalifeh

MD5 per password

L'uso di md5 salato per le password è una cattiva idea. Non a causa delle debolezze crittografiche di MD5, ma perché è veloce. Ciò significa che un utente malintenzionato può provare miliardi di password candidate al secondo su una singola GPU.

Quello che dovresti usare sono costruzioni di hash deliberatamente lente, come scrypt, bcrypt e PBKDF2. SHA-2 salato semplice non è abbastanza buono perché, come la maggior parte degli hash per uso generale, è veloce. Dai un'occhiata Come hash sicuro delle password? per i dettagli su cosa dovresti usare.

MD5 per integrità dei file

L'uso di MD5 per l'integrità dei file può essere o meno un problema pratico, a seconda dello scenario di utilizzo esatto.

Gli attacchi contro MD5 sono attacchi di collisione, non attacchi pre-immagine. Questo significa che un attaccante può produrre due file con lo stesso hash, se ha il controllo su entrambi. Ma non può eguagliare l'hash di un file esistente che non ha influenzato.

Non so se gli attacchi si applicano alla tua applicazione, ma personalmente inizierei a migrare anche se pensi che non lo faccia. È troppo facile trascurare qualcosa. Meglio prevenire che curare.

La migliore soluzione in questo contesto è SHA-2 (SHA-256) per ora. Una volta standardizzato SHA-3, sarà anche una buona scelta.

108
CodesInChaos

Per completare la risposta di @CodesInChaos, MD5 viene spesso utilizzato a causa di Tradizione , non a causa delle prestazioni. Le persone che si occupano di database non sono le stesse persone che si occupano di sicurezza. Spesso non vedono problemi nell'uso di algoritmi deboli (ad es. Vedi la battuta di un algoritmo che MySQL stava usando per le password di hashing). Usano MD5 perché usavano MD5 e sono abituati a usare MD5.

Performance è molto più spesso discusso che misurato; eppure, logicamente, non può esserci un problema di prestazioni se non c'è nulla da misurare. Utilizzando un core di una CPU di base, è possibile eseguire l'hashing di oltre 400 MByte al secondo con MD5, più vicino a 300 MB/s con SHA-1 e 150 MB/s con SHA-256. D'altra parte, un disco rigido decente produrrà dati a una velocità persino inferiore (da 100 a 120 MB/s sarebbero tipici), quindi la funzione di hash non è quasi mai il collo di bottiglia. Di conseguenza, non vi è alcun problema di prestazioni relativamente all'hash nei database.

I soliti consigli, per le funzioni hash, sono:

  1. Non farlo Non dovresti usare algoritmi crittografici elementari, ma protocolli che assemblano diversi algoritmi in modo che forniscano collettivamente alcune funzionalità di sicurezza (ad es. Trasferimento di dati con riservatezza e integrità).

  2. Davvero, non farlo. Per memorizzare le password (più precisamente, i token di verifica delle password), non creare un mix personalizzato di una funzione hash e di sali; usare una costruzione che è stata studiata appositamente per tale uso. Questo di solito significa bcrypt o PBKDF2 .

  3. Se una funzione hash è davvero ciò che fa il lavoro, allora usa SHA-256. Prendi in considerazione l'utilizzo di qualsiasi altra funzione solo se un grave problema con SHA-256 (molto probabilmente la sua performance) è stato debitamente rilevato e misurato.

35
Thomas Pornin

Attualmente sto usando hash salati (hash salati MD5).

Se stai salando gli hash MD5, non vorrai assolutamente usare MD5. Sembra che tu debba usare PBKDF2 o bcrypt.

Per quanto ne so, è sempre stato l'algoritmo scelto da numerosi DBA.

Non è un motivo convincente.

Ho lavorato con molti DBA che sono indietro di almeno 5 anni nella tecnologia generale (non usando il controllo della versione, script Perl non formattati per tutto, ecc.). Potrebbero essere stati dei DBA particolarmente cattivi, ma penso che provenga dalla mentalità estremamente conservatrice di non cambiare le cose.

6
Bradley Kreider

Solo per integrare le risposte già fornite (la maggior parte delle quali sono eccellenti) ora abbiamo un esempio reale di dove una violazione dei dati (Ashley Madison) porta alla perdita di tutta la tabella delle password. Hanno usato bcrypt con un salt casuale per eseguire l'hashing delle password. Un ricercatore di sicurezza ha deciso di prendere quegli hash e costringerli bruti. Questo è stato il risultato

Come risultato di tutto ciò, bcrypt sta ponendo richieste erculee a chiunque cerchi di rompere la discarica di Ashley Madison per almeno due motivi. Innanzitutto, 4.096 iterazioni di hashing richiedono enormi quantità di potenza di calcolo. Nel caso di Pierce, bcrypt ha limitato la velocità del suo impianto di cracking a quattro GPU a una misera 156 ipotesi al secondo. In secondo luogo, poiché gli hash di bcrypt sono salati, il suo rig deve indovinare il testo in chiaro di ogni hash uno alla volta, piuttosto che tutti all'unisono.

"Sì, esatto, 156 hash al secondo", scrisse Pierce. "A qualcuno che è abituato a decifrare le password MD5, questo sembra piuttosto deludente, ma è criptato, quindi prenderò quello che posso ottenere."

Pierce ha rinunciato dopo aver superato i 4.000. Per eseguire tutti i sei milioni di hash nel pool limitato di Pierce contro le password di RockYou sarebbero stati necessari 19.493 anni, ha stimato. Con un totale di 36 milioni di password con hash nella discarica di Ashley Madison, ci sarebbero voluti 116.958 anni per completare il lavoro.

Alla fine della giornata, gli unici che era in grado di decifrare erano password ridicolmente semplici o comuni (come "123456").

4
Machavity

Per farla breve, ora è piuttosto insicuro a causa delle tabelle Rainbow, la tabella Rainbow è un elenco di hash MD5 e le loro stringhe corrispondenti. Quindi fondamentalmente prenderei in considerazione altre alternative come SHA1

0
Shane

Sì, MD5 non è sicuro, così come SHA-1, consiglio di utilizzare SHA-256 se la dimensione del digest è un problema. Ricorda, se lo memorizzi in una colonna BINARY, occuperà meno spazio che se memorizzato in CHAR. Assicurati solo che sia fatto correttamente. MD5 è circa 2,3 volte più veloce di SHA-256. Altri benchmark sono disponibili su http://www.cryptopp.com/benchmarks.html

0
Matrix