it-swarm-eu.dev

Qual è il vantaggio dell'utilizzo di PBKDF2 vs SHA256 per generare una chiave di crittografia AES da una passphrase?

Sto guardando due software comparabili che crittografano i dati sul disco usando una passphrase. Uno utilizza PBKDF2 per generare la chiave di crittografia da una passphrase, mentre l'altro utilizza due round di SHA256. Qual è la differenza? L'uno è preferito all'altro?

82
Andrey Fedorov

La differenza è che:

  • PBKDF2 in base alla progettazione è lento
  • SHA256 è una buona funzione hash; non è lento, di progettazione

Quindi, se qualcuno dovesse provare molte diverse passphrase possibili, dire l'intero dizionario, quindi ogni parola con una cifra aggiunta, quindi ogni parola con una diversa maiuscola, quindi due parole del dizionario, ecc. Quindi questo processo sarebbe molto più lento con PBKDF2 .

Ma se la tua passphrase è veramente sicura, che è molto lunga, piuttosto casuale e fuori dalla portata di qualsiasi processo di enumerazione sistematico, allora non fa alcuna differenza pratica, tranne che un attaccante può spendere più risorse nel tentativo di violare la passphrase (o forse meno se decidono di arrendersi prima).

93
curiousguy

Gli algoritmi di hashing delle password come PBKDF2, bcrypt e scrypt sono pensati per l'uso con password e sono intenzionalmente lenti. Gli algoritmi di hash crittografico sono veloci. Veloce è buono nella maggior parte delle situazioni, ma non qui. Rallentare l'algoritmo (di solito per iterazione) rende il lavoro dell'attaccante molto più difficile. Gli hash delle password aggiungono anche un valore salato a ciascun hash per renderlo univoco in modo che un utente malintenzionato non possa attaccare più hash contemporaneamente.

Gli aggressori cercheranno di recuperare le password eseguendo attacchi di dizionario e forza bruta in cui indovinano le password eseguendone l'hashing e confrontandole con la password memorizzata per determinare se corrispondono. Con le normali funzioni hash crittografiche (ad esempio MD5, SHA256), un utente malintenzionato può indovinare miliardi di password al secondo. Con PBKDF2, bcrypt o scrypt, l'attaccante può fare solo poche migliaia di ipotesi al secondo (o meno, a seconda della configurazione).

Ciò significa che ogni password è molto più forte se si utilizzano PBKDF2, bcrypt o scrypt invece di una normale funzione hash.

Inoltre, PBKDF2, bcrypt e scrypt usano tutti grandi valori "salt" casuali per assicurarsi che la password di ogni utente sia sottoposta a hash in modo univoco. Attaccare 100 hash di password richiederà 100 volte più tempo di attaccare un hash. Attaccare un milione richiederà un milione di volte in più, ecc. Con SHA256, l'attaccante può provare a rompere migliaia o milioni di hash contemporaneamente con un rallentamento molto piccolo.

Dovresti sempre usare un hash password o una "formula di derivazione chiave" per le password piuttosto che un normale hash crittografico. È molto difficile selezionare password sufficientemente forti da resistere a uno sforzo di cracking dedicato se sono associate a hash con qualcosa come SHA o MD5. Con PBKDF2, bcrypt o scrypt, le password possono essere brevi come 7 o 8 caratteri ma con MD5 o SHA, devono contenere almeno 13-14 caratteri.

52
Steven Alexander

Ci sono buone risposte sopra, ma la ragione immediata è che sha256 non è salato e due round sono pietosamente deboli allo stesso modo in cui le password a 4 cifre sono deboli, dal punto di vista computazionale:

  • Una moderna configurazione GPU può facilmente calcolare tutti gli hash sha256 a 4 cifre non salati (in millisecondi)
10
Bradley Kreider